从WooCommerce中的自定义结帐字段更新用户显示名称

问题描述 投票:1回答:1

在WooCommerce中,在结账时,我可以在下订单时创建或更新所有用户和账单信息。但是,我也想设置/更新用户“显示名称”(别名)。

所以基于“Capture custom checkout field value in Woocommerce”答案代码,我将以下代码添加到我的活动主题的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'] ) );
}

但这不起作用,因为我收到“内部服务器错误”消息。

任何帮助解决这个问题将不胜感激。

php wordpress woocommerce checkout user-data
1个回答
2
投票

问题来自你的第二个函数...函数参数缺失,$user变量为null,你不能使用WC_Data方法update_meta_data()

此外,display_name不是用户元数据,而只是用户数据。因此,您需要使用专用的WordPress函数wp_update_user()来设置/更新用户显示名称。

用以下内容替换您的第二个钩住功能:

// 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文件中。它应该现在有效。

© www.soinside.com 2019 - 2024. All rights reserved.