WooCommerce 以编程方式/通过函数创建帐户

Posted

技术标签:

【中文标题】WooCommerce 以编程方式/通过函数创建帐户【英文标题】:WooCommerce Create account programmatically / through function 【发布时间】:2015-12-21 20:58:18 【问题描述】:

是否可以像使用 WordPress 用户一样以编程方式创建客户。显然 WooCommerce 用户共享一些相同的 WordPress 用户字段,还有一些额外的内容需要设置,例如帐单/邮政地址。

以前有人做到过吗?我在他们网站上的 WooCommerce API / 函数列表中找不到任何内容。

编辑:刚刚发现:http://docs.woothemes.com/wc-apidocs/function-wc_create_new_customer.html

但是我怎样才能提供其他字段详细信息(如地址)。

【问题讨论】:

【参考方案1】:

在尝试创建新用户之前,我会查看该用户是否已经存在,如果找到则更新现有用户。 get_user_by(field,value) 函数返回用户对象,因此如果用户存在,则使用他们的 id 更新元字段,或者如果不创建新的。

  $email = 'test@test.test';

        $address = array(
            'first_name' => 'Tester',
            'last_name'  => 'Test',
            'company'    => 'Testing, LLC',
            'email'      => $email,
            'phone'      => '777-777-777-777',
            'address_1'  => '310 S. Main Street',
            'address_2'  => '',
            'city'       => 'Las Vegas',
            'state'      => 'NV',
            'postcode'   => '89000',
            'country'    => 'US'
        );

        $default_password = wp_generate_password();
        $user = get_user_by('login', $email);

        if (!$user = $user->ID) $user = wp_create_user( $email, $default_password, $email );

        update_user_meta( $user, "billing_first_name", $address['first_name'] );
        update_user_meta( $user, "billing_last_name", $address['last_name']);
        update_user_meta( $user, "billing_company", $address['company'] );
        update_user_meta( $user, "billing_email", $address['email'] );
        update_user_meta( $user, "billing_address_1", $address['address_1']);
        update_user_meta( $user, "billing_address_2", $address['address_2'] );
        update_user_meta( $user, "billing_city", $address['city']);
        update_user_meta( $user, "billing_postcode", $address['postcode'] );
        update_user_meta( $user, "billing_country", 'US');
        update_user_meta( $user, "billing_state", $address['state'] );
        update_user_meta( $user, "billing_phone", $address['phone'] );
        update_user_meta( $user, "shipping_first_name", $address['first_name'] );
        update_user_meta( $user, "shipping_last_name", $address['last_name']);
        update_user_meta( $user, "shipping_company", $address['company'] );
        update_user_meta( $user, "shipping_address_1", $address['address_1']);
        update_user_meta( $user, "shipping_address_2", $address['address_2'] );
        update_user_meta( $user, "shipping_city", $address['city']);
        update_user_meta( $user, "shipping_postcode", $address['postcode'] );
        update_user_meta( $user, "shipping_country", 'US');
        update_user_meta( $user, "shipping_state", $address['state'] );

【讨论】:

当您已经部分拥有地址字段索引时,您可以只使用 3-4 行代码而不是 20 多行 update_user_meta 运行 foreach 循环 你应该使用: wc_create_new_customer( $email, $username, $password );而不是:'wp_create_user($email, $default_password, $email);',对吗? 太好了,+1 供您验证。此外,您可以创建一个包含所有这些字段的数组,然后声明: foreach ( $billing_address as $key => $value ) update_user_meta( $user, $key, $value ); foreach ( $shipping_address as $key => $value ) update_user_meta( $user, $key, $value ); 【参考方案2】:

WooCommerce 客户本质上是具有额外元数据的 WordPress 用户。因此,创建用户后,您可以使用 update_user_meta 函数向其添加元数据。导航到用户 -> 所有用户,编辑其中一个用户,然后向下滚动以查看字段。

编写下面给出的代码,让您了解其工作原理。

$user_id = wc_create_new_customer( $email, $username, $password );

update_user_meta( $user_id, "billing_first_name", 'God' );
update_user_meta( $user_id, "billing_last_name", 'Almighty' );
.... more fields

这是账单和运输字段的完整列表

计费

billing_first_name billing_last_name billing_company billing_address_1 billing_address_2 billing_city billing_postcode billing_country billing_state billing_email billing_phone

运费

shipping_first_name shipping_last_name shipping_company shipping_address_1 shipping_address_2 shipping_city shipping_postcode shipping_country shipping_state

【讨论】:

非常感谢。我在午餐时得出了同样的结论,但我会为以后遇到它的用户标记你的答案。 @AnandShah 能否请您回复一个您从哪里获得此字段列表的链接?请尽快做。 docs.woocommerce.com/document/… 新链接 update_user_meta 由于某种原因,以这种方式创建的用户不会出现在管理员的 WooCommerce 客户列表中。

以上是关于WooCommerce 以编程方式/通过函数创建帐户的主要内容,如果未能解决你的问题,请参考以下文章

在 Woocommerce 3 中以编程方式更新产品库存

以编程方式更新 WooCommerce 订阅订单行项目

以编程方式更新 WooCommerce 产品中设置的自定义属性值

自定义以编程方式在 Woocommerce 中添加运费 [重复]

在 Woocommerce 管理订单编辑页面中以编程方式添加自定义订单备注

在 Woocommerce 3+ 中使用订单项以编程方式创建订单