簡體   English   中英

根據在Woocommerce中購買的商品總數更改用戶角色

[英]Change user role based on total items purchased in Woocommerce

在Woocommerce中,我試圖結合這兩個功能:

第一個獲取用戶訂購的商品總數(一直)

function get_user_total_purchased_items( $user_id = 0 ){
    global $wpdb;

    $customer_id = $user_id === 0 ? get_current_user_id() : (int) $user_id;

    return (int) $wpdb->get_var( "
        SELECT SUM(woim.meta_value)
        FROM {$wpdb->prefix}woocommerce_order_items AS woi
        INNER JOIN {$wpdb->prefix}woocommerce_order_itemmeta AS woim ON woi.order_item_id = woim.order_item_id
        INNER JOIN {$wpdb->prefix}posts as p ON woi.order_id = p.ID
        INNER JOIN {$wpdb->prefix}postmeta as pm ON woi.order_id = pm.post_id
        WHERE woi.order_item_type = 'line_item'
        AND p.post_type LIKE 'shop_order'
        AND p.post_status IN ('wc-completed')
        AND pm.meta_key LIKE '_customer_user'
        AND pm.meta_value LIKE '$customer_id'
        AND woim.meta_key LIKE '_qty'
    " );
}

如果用戶訂購某項商品,第二種更改用戶角色。

function change_role_on_purchase( $order_id ) {

    $order = new WC_Order( $order_id );
    $items = $order->get_items();

    foreach ( $items as $item ) {
        $product_name = $item['name'];
        $product_id = $item['product_id'];
        $product_variation_id = $item['variation_id'];

        if ( $order->user_id > 0 && $product_id == '416' ) {
            update_user_meta( $order->user_id, 'paying_customer', 1 );
            $user = new WP_User( $order->user_id );

            // Remove role
            $user->remove_role( 'subscriber' ); 

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

add_action( 'woocommerce_order_status_processing', 'change_role_on_purchase' );

我要完成的工作是,如果用戶總共訂購了50-99件商品,那么他的用戶角色將從“標准用戶”更改為“青銅用戶”;如果訂購了100-199件,他的用戶角色“青銅用戶-> silver_user”,並且商品總數超過200用戶角色silver_user-> gold_user。

第一個功能運行良好,並且來自此答案

現在,只想弄清楚如何將其實現到第二個函數中。

由於Woocommerce 3,您的代碼有些過時了,需要進行一些更改。 以下內容應根據購買的商品數量(未試用)有條件地更改用戶角色:

function get_user_total_purchased_items( $user_id = 0 ){
    global $wpdb;

    $customer_id = $user_id === 0 ? get_current_user_id() : (int) $user_id;

    return (int) $wpdb->get_var( "
        SELECT SUM(woim.meta_value)
        FROM {$wpdb->prefix}woocommerce_order_items AS woi
        INNER JOIN {$wpdb->prefix}woocommerce_order_itemmeta AS woim ON woi.order_item_id = woim.order_item_id
        INNER JOIN {$wpdb->prefix}posts as p ON woi.order_id = p.ID
        INNER JOIN {$wpdb->prefix}postmeta as pm ON woi.order_id = pm.post_id
        WHERE woi.order_item_type = 'line_item'
        AND p.post_type LIKE 'shop_order'
        AND p.post_status IN ('wc-completed')
        AND pm.meta_key LIKE '_customer_user'
        AND pm.meta_value LIKE '$customer_id'
        AND woim.meta_key LIKE '_qty'
    " );
}

add_action( 'woocommerce_order_status_processing', 'change_role_on_purchase', 20, 2 );
function change_role_on_purchase( $order_id, $order ) {

    $user_id   = $order->get_customer_id();
    $user      = new WP_User( $user_id );
    $purchases = get_user_total_purchased_items( $user_id );

    if( $purchases >= 50 &&  $purchases < 100 && ! in_array( 'bronze_user', $user->roles ) ) {
        // Remove role
        $user->remove_role( 'subscriber' );

        // Add role
        $user->add_role( 'bronze_user' );
    }
    elseif( $purchases >= 100 &&  $purchases < 200 && ! in_array( 'silver_user', $user->roles ) ) {
        // Remove role
        $user->remove_role( 'bronze_user' );

        // Add role
        $user->add_role( 'silver_user' );
    }
    elseif( $purchases >= 200 && ! in_array( 'gold_user', $user->roles ) ) {
        // Remove role
        $user->remove_role( 'silver_user' );

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

    if ( $user_id > 0 && $product_id == '416' ) {
        foreach ( $order->get_items() as $item ) {
            if ( $order->user_id > 0 && $item->get_product_id() == '416' ) {
                update_user_meta( $user_id, 'paying_customer', 1 );

                // Remove role
                $user->remove_role( 'subscriber' );

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

代碼進入您的活動子主題(或活動主題)的function.php文件中。 我希望它能正常工作,因為我無法對其進行測試。


有關Woocommerce中的訂單的參考3:

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM