简体   繁体   English

在WooCommerce中定义用户变量我的账户自定义菜单项内容

[英]Define user variable in WooCommerce My account custom menu item content

The custom menu is displayed in My Account of woocommerce.自定义菜单显示在 woocommerce 的我的帐户中。
I am making a custom menu with the code below.我正在使用下面的代码制作自定义菜单。

/**
 * Query registration
 */
function my_custom_query_vars($vars)
{
    $vars[] = 'my-dosu-endpoint';
    return $vars;
}
add_filter('query_vars', 'my_custom_query_vars', 0);

function my_custom_my_account_menu_items($items)
{
    $items['my-dosu-endpoint'] = __('OOOO', 'woocommerce');
    return $items;
}
add_filter('woocommerce_account_menu_items', 'my_custom_my_account_menu_items');

function my_custom_endpoint_content()
{
}

add_action('woocommerce_account_my-dosu-endpoint_endpoint', 'my_custom_endpoint_content');


function my_custom_endpoint_title($title)
{
    global $wp_query;
    $is_endpoint = isset($wp_query->query_vars['my-dosu-endpoint']);
    if ($is_endpoint && !is_admin() && is_main_query() && in_the_loop() && is_account_page()) {
        // New page title.
        $title = __('OOOO', 'woocommerce');
        remove_filter('the_title', 'my_custom_endpoint_title');
    }
    return $title;
}
add_filter('the_title', 'my_custom_endpoint_title');

I would like to display the user information registration form in this custom menu.我想在这个自定义菜单中显示用户信息注册表。

I was able to copy and paste the contents of form-edit-acount.php and display it using the following:我能够复制并粘贴form-edit-acount.php的内容并使用以下内容显示它:

function my_custom_endpoint_content()
{
    defined('ABSPATH') || exit;

    do_action('woocommerce_before_edit_account_form'); ?>

    <form class="woocommerce-EditAccountForm edit-account" action="" method="post" <?php do_action('woocommerce_edit_account_form_tag'); ?>>

        <?php do_action('woocommerce_edit_account_form_start'); ?>

        <p class="woocommerce-form-row woocommerce-form-row--first form-row form-row-first">
            <label for="account_first_name"><?php esc_html_e('First name', 'woocommerce'); ?>&nbsp;<span class="required">*</span></label>
            <input type="text" class="woocommerce-Input woocommerce-Input--text input-text" name="account_first_name" id="account_first_name" autocomplete="given-name" value="<?php echo esc_attr($user->first_name); ?>" />
        </p>
        <p class="woocommerce-form-row woocommerce-form-row--last form-row form-row-last">
            <label for="account_last_name"><?php esc_html_e('Last name', 'woocommerce'); ?>&nbsp;<span class="required">*</span></label>
            <input type="text" class="woocommerce-Input woocommerce-Input--text input-text" name="account_last_name" id="account_last_name" autocomplete="family-name" value="<?php echo esc_attr($user->last_name); ?>" />
        </p>
        <div class="clear"></div>

        <p class="woocommerce-form-row woocommerce-form-row--wide form-row form-row-wide">
            <label for="account_display_name"><?php esc_html_e('Display name', 'woocommerce'); ?>&nbsp;<span class="required">*</span></label>
            <input type="text" class="woocommerce-Input woocommerce-Input--text input-text" name="account_display_name" id="account_display_name" value="<?php echo esc_attr($user->display_name); ?>" /> <span><em><?php esc_html_e('This will be how your name will be displayed in the account section and in reviews', 'woocommerce'); ?></em></span>
        </p>
        <div class="clear"></div>

        <p class="woocommerce-form-row woocommerce-form-row--wide form-row form-row-wide">
            <label for="account_email"><?php esc_html_e('Email address', 'woocommerce'); ?>&nbsp;<span class="required">*</span></label>
            <input type="email" class="woocommerce-Input woocommerce-Input--email input-text" name="account_email" id="account_email" autocomplete="email" value="<?php echo esc_attr($user->user_email); ?>" />
        </p>

        <fieldset>
            <p class="woocommerce-form-row woocommerce-form-row--wide form-row form-row-wide">
                <label for="password_current"><?php esc_html_e('Current password (leave blank to leave unchanged)', 'woocommerce'); ?></label>
                <input type="password" class="woocommerce-Input woocommerce-Input--password input-text" name="password_current" id="password_current" autocomplete="off" />
            </p>
            <p class="woocommerce-form-row woocommerce-form-row--wide form-row form-row-wide">
                <label for="password_1"><?php esc_html_e('New password (leave blank to leave unchanged)', 'woocommerce'); ?></label>
                <input type="password" class="woocommerce-Input woocommerce-Input--password input-text" name="password_1" id="password_1" autocomplete="off" />
            </p>
            <p class="woocommerce-form-row woocommerce-form-row--wide form-row form-row-wide">
                <label for="password_2"><?php esc_html_e('Confirm new password', 'woocommerce'); ?></label>
                <input type="password" class="woocommerce-Input woocommerce-Input--password input-text" name="password_2" id="password_2" autocomplete="off" />
            </p>
        </fieldset>
        <div class="clear"></div>

        <?php do_action('woocommerce_edit_account_form'); ?>

        <p>
            <?php wp_nonce_field('save_account_details', 'save-account-details-nonce'); ?>
            <button type="submit" class="woocommerce-Button button" name="save_account_details" value="<?php esc_attr_e('Save changes', 'woocommerce'); ?>"><?php esc_html_e('Save changes', 'woocommerce'); ?></button>
            <input type="hidden" name="action" value="save_account_details" />
        </p>

        <?php do_action('woocommerce_edit_account_form_end'); ?>
    </form>

<?php do_action('woocommerce_after_edit_account_form');
}

add_action('woocommerce_account_my-dosu-endpoint_endpoint', 'my_custom_endpoint_content');

But I have not been able to obtain user information.但是我一直无法获取用户信息。

Therefore, it corresponds to the non-input check when saving.因此,它对应于保存时的非输入检查。
"Undefined variable $user " is displayed in the $user part. “未定义的变量$user ”显示在$user部分。 Where should I define it?我应该在哪里定义它?

First on your last function, defined('ABSPATH') || exit;首先在你的最后一个 function, defined('ABSPATH') || exit; defined('ABSPATH') || exit; is unnecessary, this is used by php or templates files.是不必要的,这是由 php 或模板文件使用的。 Then you need to define $user variable, which is an instance of the WP_User object (the current user).然后你需要定义$user变量,它是WP_User object(当前用户)的一个实例。

So simply replace defined('ABSPATH') || exit;所以只需替换defined('ABSPATH') || exit; defined('ABSPATH') || exit; with $user = wp_get_current_user(); $user = wp_get_current_user(); . .

It should solve that "Undefined variable $user " issue.它应该解决“未定义的变量$user问题。

at the beginning of the function:在 function 的开头:

$user = wp_get_current_user();

if that code doesn't work, this one should make the trick:如果该代码不起作用,那么这个代码应该可以解决问题:

$user = get_userdata( get_current_user_id() );

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 WooCommerce 我的帐户自定义端点菜单项 - WooCommerce My Account custom endpoint menu item 在Woocommerce 3中显示自定义帐户菜单项的自定义内容 - Display custom content for a custom account menu item in Woocommerce 3 在 Woocommerce 我的帐户菜单中的注销项上方添加自定义项 - Add a custom item above logout item in Woocommerce my account menu WooCommerce 我的帐户页面自定义菜单项与自定义链接 - WooCommerce My Account page custom menu item with custom link 在 WooCommerce 中添加基于用户角色的自定义我的帐户菜单项 3+ - Add custom my account menu item based on user role in WooCommerce 3+ WooCommerce“我的账户”页面如何定义相互关联的菜单和操作? - How to define interrelated menu and action on WooCommerce "My account" page? 如何将链接项目添加到 WooCommerce 我的帐户菜单中的另一个页面 - How to add a linked item to another page in WooCommerce My Account menu 在Woocommerce中获取作为“自定义我的帐户”页面内容分页的未购买商品 - Get unpurchased items paginated as Custom My account page content in Woocommerce 仅在 WooCommerce 我的帐户仪表板中添加自定义 html 内容 - Add custom html content in WooCommerce My Account Dashboard only 仅针对特定用户角色在 Woocommerce 中自定义我的帐户端点 - Custom my account endpoint in Woocommerce just for a specific user role
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM