在 WooCommerce 我的帐户自定义菜单项内容中定义用户变量
Define user variable in WooCommerce My account custom menu item content
自定义菜单显示在我的woocommerce账户中。
我正在使用以下代码制作自定义菜单。
/**
* 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');
我想在此自定义菜单中显示用户信息注册表单。
我能够复制并粘贴 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'); ?> <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'); ?> <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'); ?> <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'); ?> <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');
但是一直获取不到用户信息
所以对应保存时的非输入检查
$user
部分显示“Undefined variable $user
”。我应该在哪里定义它?
首先在你的最后一个函数中,defined('ABSPATH') || exit;
是不必要的,它被 php 或模板文件使用。然后你需要定义$user
变量,它是WP_User
对象(当前用户)的一个实例。
所以只需将 defined('ABSPATH') || exit;
替换为 $user = wp_get_current_user();
。
应该可以解决 “未定义变量 $user
” 问题。
函数开头:
$user = wp_get_current_user();
如果那个代码不起作用,这个应该可以解决问题:
$user = get_userdata( get_current_user_id() );
自定义菜单显示在我的woocommerce账户中。
我正在使用以下代码制作自定义菜单。
/**
* 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');
我想在此自定义菜单中显示用户信息注册表单。
我能够复制并粘贴 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'); ?> <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'); ?> <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'); ?> <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'); ?> <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');
但是一直获取不到用户信息
所以对应保存时的非输入检查
$user
部分显示“Undefined variable $user
”。我应该在哪里定义它?
首先在你的最后一个函数中,defined('ABSPATH') || exit;
是不必要的,它被 php 或模板文件使用。然后你需要定义$user
变量,它是WP_User
对象(当前用户)的一个实例。
所以只需将 defined('ABSPATH') || exit;
替换为 $user = wp_get_current_user();
。
应该可以解决 “未定义变量 $user
” 问题。
函数开头:
$user = wp_get_current_user();
如果那个代码不起作用,这个应该可以解决问题:
$user = get_userdata( get_current_user_id() );