【问题标题】:Changing user role in WooCommerce on purchase在购买时更改 WooCommerce 中的用户角色
【发布时间】:2018-04-10 22:37:18
【问题描述】:

我正在使用两种产品类型开发 WooCommerce。我需要其中一些($products_to_check)来创建一个特定的角色帐户(订阅者),其余的需要另一个(客户,这是 WooCommerce 的默认帐户)。

问题是,如果我有一个已经是客户的用户,我不希望他将其角色更改为订阅者(所以我检查他是否已登录,这意味着他不是新客户并且之前定义了角色)。另一方面,如果订阅者购买了 $products_to_check 中未包含的产品之一,他应该获得角色升级(从订阅者到客户)。

这是我的功能,它不起作用,但我真的不知道为什么。

add_action( 'woocommerce_order_status_completed', 'change_role_on_purchase' );
function change_role_on_purchase( $order_id ) {
    $order = wc_get_order( $order_id );
    $items = $order->get_items();

    $products_to_check = array( ... );

    $user = new WP_User( $order->user_id );
    $user_meta = get_userdata( $order->user_id );
    $user_roles = $user_meta->roles;

    foreach ( $items as $item ) {
        if ( $order->user_id > 0 && in_array( $item['product_id'], $products_to_check ) ) {
                if (!is_user_logged_in()){
                        $user->set_role( 'subscriber' );
                }
        }
        elseif ( $order->user_id > 0 && !(in_array( $item['product_id'], $products_to_check)) ) {
                if (is_user_logged_in() && in_array('subscriber', $user_roles)){
                        $user->set_role( 'customer' );
                }
        }
    }
}

非常感谢您在此问题上的任何帮助。我做错了什么?

【问题讨论】:

  • 那么现在发生了什么?您的功能根本不起作用?
  • 没有。当一个新用户从 $products_to_check 购买东西时,他被注册为客户......

标签: php wordpress woocommerce


【解决方案1】:

这里有几点需要注意。

  1. 确保在设置用户角色的 WooCommerce 或任何其他插件的挂钩之后调用或覆盖挂钩。
  2. 不要使用您的登录条件来检查用户是否是新用户。 user_register 是用于新注册用户的钩子。
  3. 这里的角色逻辑循环也有缺陷。您正在遍历所有产品订单并尝试在每次迭代中设置角色。这显然意味着,如果条件满足,每次迭代都可以更改用户角色,并且可以覆盖之前的迭代。 (虽然您似乎希望您的登录条件能够解决问题,但我认为这很容易出错,即使它可能有效。)
  4. WooCommerce 订阅插件实际上将 subscriber 角色设置为具有活动订阅的用户,并将 customer 角色设置为过期订阅用户。这是可配置的,但我认为这是一个更明确的任务。

因此,首先确保您的钩子在或覆盖 WooCommerce 用户角色钩子之后触发。而且我认为您可以完全取消新旧用户逻辑,因为唯一重要的是他们是否购买了可以升级他们的产品;如果不是,它们应该具有默认角色。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-02-01
    • 2019-12-29
    • 2019-01-12
    • 1970-01-01
    • 2017-03-18
    • 2015-06-21
    • 2019-08-14
    • 2015-10-06
    相关资源
    最近更新 更多