使用Woocommerce订单转换状态挂钩添加用户角色

时间:2019-02-25 08:51:06

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

我需要为最近注册的用户添加一个新角色(购买我的四个特定订阅产品中的任何一个之后)。到目前为止,每个最近注册的用户(购买订阅产品的用户)都具有订阅者角色。如果我希望他们购买我的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;
}

任何帮助将不胜感激!

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

自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起相关的订单和订单商品: