【问题标题】:Update WooCommerce User programmatically when creating a user创建用户时以编程方式更新 WooCommerce 用户
【发布时间】:2020-11-03 15:41:02
【问题描述】:

我试图通过表单以编程方式创建一个新用户,但在通过wp_create_user 获取电话号码和国家/地区设置时遇到问题 - 为什么不采用这些值?名字和姓氏按预期工作。

相关代码:

$user_id = wp_create_user( $username, $random_password, $user_email ); 
    wp_update_user([
    'ID' => $user_id,
     'first_name' => rgar( $entry, '20.3' ),
     'last_name'  => rgar( $entry, '20.6' ),
     'phone'      => rgar( $entry, '16' ),
     'country'  => rgar( $entry, '24.6' )
    ]);

【问题讨论】:

    标签: php wordpress woocommerce user-data usermetadata


    【解决方案1】:

    在 WooCommerce 中,电话和国家是计费字段,因此正确的用户元键是:

    • billing_country(记住你需要设置一个有效的国家代码)
    • billing_phone

    您还需要设置billing_emailbilling_first_namebilling_last_name

    因此,您的代码将改为将您的 wp_create_user() 函数替换为:

        $username = rgar( $entry, '20.3' );
        $email    = rgar( $entry, '10' );
        $password = wp_generate_password( 12, false );
    
        $user_data = array(
            'user_login' => $username,
            'user_pass'  => $password,
            'user_email' => $email,
            'role'       => 'customer',
            'first_name' => rgar( $entry, '20.3' ),
            'last_name'  => rgar( $entry, '20.6' ),
        );
    
        $user_id  = wp_insert_user( $user_data ); // Create user with specific user data
    

    那么添加 WooCommerce 用户数据有两种方式:

    1)。使用WC_Customer 对象和方法:

        $customer = new WC_Customer( $user_id ); // Get an instance of the WC_Customer Object from user Id
    
        $customer->set_billing_first_name( rgar( $entry, '20.3' ) );
        $customer->set_billing_last_name( rgar( $entry, '20.6' ) );
        $customer->set_billing_country( rgar( $entry, '24.6') );
        $customer->set_billing_phone( rgar( $entry, '16' ) );
        $customer->set_billing_email( $email );
    
        $customer->save(); // Save data to database (add the user meta data)
    

    2) 或者使用WordPress update_user_meta()函数 (老办法)

    update_user_meta( $user_id, 'billing_first_name', rgar( $entry, '20.3') );
    update_user_meta( $user_id, 'billing_last_name', rgar( $entry, '20.6') );
    update_user_meta( $user_id, 'billing_country', rgar( $entry, '24.6') );
    update_user_meta( $user_id, 'billing_phone', rgar( $entry, '16') );
    update_user_meta( $user_id, 'billing_email', $email );
    

    【讨论】:

    • 谢谢!越来越近。有了这个,我得到了正确设置的数字,但由于某种原因国家没有更新
    • 嗯,我如何获取所选国家/地区的国家代码集(从下拉县字段中选择国家/地区)
    • @user3344734 最好提出一个新问题,我会回答它(因为这不是您当前问题的直接部分)。所以你可以@ 987654321@ 回答你最初的问题。
    • 谢谢 - 我读了一点,我明白了问题 - 似乎重力表格有一个过滤器挂钩,至少可以转换国家名称。在我创建一个新问题之前,我会先试一试。再次感谢!
    【解决方案2】:

    您可以将countryphone 添加为用户元数据并将其保存在用户元数据表中:

    add_user_meta( $user_id, 'country', rgar( $entry, '24.6'));
    add_user_meta( $user_id, 'phone', rgar( $entry, '16'));
    

    WordPress 法典:Click Here

    【讨论】:

    • 谢谢!但是不要让它工作,我应该以某种方式在数组中调用它吗?我的php没那么强..
    猜你喜欢
    • 2021-02-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-21
    • 2014-12-26
    • 2015-07-16
    • 2011-07-30
    相关资源
    最近更新 更多