【问题标题】:Add a user role using WooCommerce order transition status hooks使用 WooCommerce 订单转换状态挂钩添加用户角色
【发布时间】:2019-07-18 15:16:24
【问题描述】:

我需要为我最近注册的用户添加一个新角色(购买我的四种特定订阅产品中的任何一种)。到目前为止,每个最近注册的用户(购买订阅产品的用户)都会获得订阅者角色。如果他们购买我的 4 种目标订阅产品中的任何一种,我希望他们成为订阅者 + 广告商。

我尝试使用 woocommerce_order_status_completedwoocommerce_order_status_processingwoocommerce_order_status_changed 钩子,但它们都不能使用我的代码。

我已经多次修改了这些钩子中的函数和代码,但没有什么特别的。

到目前为止,我一直在使用这个代码。

add_action( 'woocommerce_order_status_completed', 'so_29647785_convert_customer_role' );   
function so_29647785_convert_customer_role( $order_id ) {

    $order = new WC_Order( $order_id );
    if ( $order->user_id > 0 ) {
        foreach ( $order->get_items() as $order_item ) {
            if( 4008 == $order_item[ 'product_id' ] ) {
                $user = new WP_User( $order->user_id );

                // Add new role
                $user->add_role( 'advertiser' );
            }
        }
    }
}

我将不胜感激任何帮助或跟踪。


我也尝试过此代码,它有助于创建同时具有订阅者和广告商角色的用户,但在我的情况下我不能这样做。因为只有当用户购买我的四种目标订阅产品时,我才需要用户同时注册订阅者和广告商角色。虽然此代码将订阅者和广告商都添加到每个新用户,无论他们选择什么产品。

add_filter('woocommerce_new_customer_data', 'bbloomer_assign_custom_role', 10, 1);

function bbloomer_assign_custom_role($args) {
  $args['role'] = 'advertiser';
  return $args;
}

任何帮助将不胜感激!

【问题讨论】:

    标签: php wordpress woocommerce user-roles woocommerce-subscriptions


    【解决方案1】:
    add_action( 'woocommerce_order_status_completed', 'add_advertiser_role' );
    
    function add_advertiser_role( $order_id ) {
    
    $order = new WC_Order( $order_id );
    if ( $order->get_user_id() > 0 ) {
        foreach ( $order->get_items() as $order_item ) {
            if( 4008 == $order_item->get_product_id() ) {
                $user = new WP_User( $order->get_user_id() );
    
                // Add new role
                $user->add_role( 'advertiser' );
            }
        }
    }
    }
    

    Programatically get WooCommerce Order details

    【讨论】:

    • @teccraft 请检查修改
    【解决方案2】:

    自 Woocommerce 3 以来,您的代码已经过时,并且您的代码中存在一些错误和错误,例如 $order_item['product_id'] 将无法正常工作……请尝试以下操作:

    add_action( 'woocommerce_order_status_processing', 'order_status_change_add_user_role', 10, 2 );
    add_action( 'woocommerce_order_status_completed', 'order_status_change_add_user_role', 10, 2 );
    function order_status_change_add_user_role( $order_id, $order ) {
        if ( $order->get_user_id() > 0 ) {
            $user = $order->get_user(); // Get an instance of the WP_User object
    
            foreach ( $order->get_items() as $item ) {
                // Check that user role is not set yet and that is matching with a product ID
                if( 4008 == $item->get_product_id() && ! in_array('advertiser', $user->roles) ) {
                    $user->add_role( 'advertiser' ); // Add new role
                    break; // Stop the loop
                }
            }
        }
    }
    

    代码进入您的活动子主题(或活动主题)的 function.php 文件中。它现在应该可以工作了。

    自 Woocommerce 3 起订购和订购相关商品:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-01-30
      • 2018-01-10
      • 2018-03-04
      • 2019-08-11
      • 2014-05-29
      • 1970-01-01
      • 2021-08-27
      相关资源
      最近更新 更多