根据WooCommerce年度订单数更改用户角色

时间:2019-03-06 09:44:33

标签: php wordpress woocommerce hook-woocommerce orders

我正在尝试实现一项功能,使客户在完成一定数量的订单后会获得新的用户角色,但是所有这些订单必须在同一年内完成。

我能够根据第n个订单来分配用户角色,但似乎无法超出需要考虑日期的地方,有人可以向我指出正确的方向或指出我可能会做些什么丢失。

这是我到目前为止尝试过的。

function change_user_role_on_order_status_completed( $order_id ) {

    $order = new WC_Order( $order_id );

    $user_id = $order->user_id;

    $order_this_year = false;

    $current_date = date('Y');

    $total_orders = get_posts( array(
        'numberposts' => -1,
        'meta_key'    => '_customer_user',
        'meta_value'  => $user_id,
        'post_type'   => 'shop_order',
    ) );

    if ( $total_orders > 1 ) {
        foreach ($order->get_items() as $item_key => $item_values):

            // Get the item date
            if ($item_date = $item_values->get_date_completed()->format ('Y') == $current_date) {
                $order_this_year = true;
            }

        endforeach;

        if ($order_this_year) {
            $user = new WP_User( $order->user_id );

            // Set role editor
            $user->set_role( 'customer_club' ); 
        }

    }
}

add_action( 'woocommerce_order_status_completed', 'change_user_role_on_order_status_completed', 10, 1 );

1 个答案:

答案 0 :(得分:0)

这里使用WC_Order_Query是一种基于年度订单数来更改用户角色的更轻松,更简单的方法:

add_action( 'woocommerce_order_status_completed', 'change_user_role_on_order_status_completed', 10, 2 );
function change_user_role_on_order_status_completed( $order_id, $order ) {
    // Here set the minimal order count
    $min_orders_count = 3;

    // The WC_Order_Query
    $queried_orders = wc_get_orders( array(
        'limit'        => -1,
        'customer_id'  => $order->get_customer_id(),
        'date_paid'    => '>=' . date('Y') . '-01-01', // or 'date_created'
        'return'       => 'ids'
    ) );

    if ( sizeof($queried_orders) >= $min_orders_count ) {
        // Get an instance of the customer WP_User Object
        $user = $order->get_user();

        // Change the user role
        $user->set_role( 'customer_club' );
    }
}

代码进入您的活动子主题(或活动主题)的function.php文件中。经过测试,可以正常工作。