首页 > 解决方案 > 根据 WooCommerce 年度订单数更改用户角色

问题描述

我正在尝试实现一项功能,在该功能下,客户在下达一定数量的订单后会收到新的用户角色,但所有这些订单必须是在同一年内下达的。

我能够根据第 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 );

标签: phpwordpresswoocommercehook-woocommerceorders

解决方案


在这里使用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 文件中。测试和工作。


推荐阅读