从 WooCommerce 中的自定义结帐字段更新用户显示名称
Update user display name from custom checkout field in WooCommerce
在 WooCommerce 中,结账时,我可以在下订单时创建或更新所有用户和账单信息。但是,我也想 set/update 用户 "display name" (别名)。
因此,根据 "" 答案代码,我将以下代码添加到我的活动主题的 functions.php 文件中:
// Display a custom checkout field
add_action( 'woocommerce_before_checkout_billing_form', 'my_custom_checkout_field' );
function my_custom_checkout_field( $checkout ) {
echo '<div id="my_custom_checkout_field">';
woocommerce_form_field( 'display_name', array(
'type' => 'text',
'class' => array('my-custom-field form-row-wide'),
'label' => __('Alias'),
'placeholder' => __('Nickname to show in my account and comments'),
'required' => true,
), $checkout->get_value( 'display_name' ));
echo '</div>';
}
// Save the custom checkout field in the order meta
add_action( 'woocommerce_checkout_update_user_meta', 'save_order_custom_meta_data', 10, 2 );
function save_order_custom_meta_data( ) {
if ( isset($_POST['display_name']) )
$user->update_meta_data('display_name', sanitize_text_field( $_POST['display_name'] ) );
}
但这不起作用,因为我收到 "Internal Server Error" 消息。
任何解决此问题的帮助将不胜感激。
问题出在你的第二个函数上……缺少函数参数并且 $user
变量为 null,你不能在其上使用 WC_Data
方法 update_meta_data()
.
此外 display_name
不是用户元数据,而只是用户数据。因此,您需要使用专用的 WordPress 函数 wp_update_user()
才能 set/update 用户显示名称。
将您的第二个挂钩函数替换为以下内容:
// Save/update user data from custom checkout field value
add_action( 'woocommerce_checkout_update_user_meta', 'checkout_update_user_display_name', 10, 2 );
function checkout_update_user_display_name( $customer_id, $data ) {
if ( isset($_POST['display_name']) ) {
$user_id = wp_update_user( array( 'ID' => $customer_id, 'display_name' => sanitize_text_field($_POST['display_name']) ) );
}
}
代码进入您的活动子主题(或活动主题)的 function.php 文件。现在应该可以使用了。
在 WooCommerce 中,结账时,我可以在下订单时创建或更新所有用户和账单信息。但是,我也想 set/update 用户 "display name" (别名)。
因此,根据 "
// Display a custom checkout field
add_action( 'woocommerce_before_checkout_billing_form', 'my_custom_checkout_field' );
function my_custom_checkout_field( $checkout ) {
echo '<div id="my_custom_checkout_field">';
woocommerce_form_field( 'display_name', array(
'type' => 'text',
'class' => array('my-custom-field form-row-wide'),
'label' => __('Alias'),
'placeholder' => __('Nickname to show in my account and comments'),
'required' => true,
), $checkout->get_value( 'display_name' ));
echo '</div>';
}
// Save the custom checkout field in the order meta
add_action( 'woocommerce_checkout_update_user_meta', 'save_order_custom_meta_data', 10, 2 );
function save_order_custom_meta_data( ) {
if ( isset($_POST['display_name']) )
$user->update_meta_data('display_name', sanitize_text_field( $_POST['display_name'] ) );
}
但这不起作用,因为我收到 "Internal Server Error" 消息。
任何解决此问题的帮助将不胜感激。
问题出在你的第二个函数上……缺少函数参数并且 $user
变量为 null,你不能在其上使用 WC_Data
方法 update_meta_data()
.
此外 display_name
不是用户元数据,而只是用户数据。因此,您需要使用专用的 WordPress 函数 wp_update_user()
才能 set/update 用户显示名称。
将您的第二个挂钩函数替换为以下内容:
// Save/update user data from custom checkout field value
add_action( 'woocommerce_checkout_update_user_meta', 'checkout_update_user_display_name', 10, 2 );
function checkout_update_user_display_name( $customer_id, $data ) {
if ( isset($_POST['display_name']) ) {
$user_id = wp_update_user( array( 'ID' => $customer_id, 'display_name' => sanitize_text_field($_POST['display_name']) ) );
}
}
代码进入您的活动子主题(或活动主题)的 function.php 文件。现在应该可以使用了。