简体   繁体   English

根据Woocommerce中用户总购买金额的自定义购物车通知

[英]Custom cart notice based on user total purchased amount in Woocommerce

I am trying to display a custom cart notice based on user total purchased amount in Woocommerce, based on this answer code: 我试图根据这个答案代码,根据Woocommerce中用户的总购买金额显示自定义购物车通知:

Add a percentage discount based on customer total purchases sum in Woocommerce 根据客户在Woocommerce中的总购买金额添加百分比折扣

It does not work as I would like. 它不能像我想的那样工作。

For example if a customer has made 2 orders: 例如,如果客户订购了2个订单:

  • First order is 200 第一个订单是200
  • Second order is 122 第二个订单是122

So the total sum is 200 + 122 = 322. But I get a total of 200. What I am doing wrong? 所以总和是200 + 122 = 322.但我总共得到200.我做错了什么?

This is the code that I use: 这是我使用的代码:

 add_action( 'woocommerce_before_cart', 'vc' );

  function vc( ) {
// Only for logged in user
if ( ( is_admin() && ! defined( 'DOING_AJAX' ) ) || ! is_user_logged_in() )
    return;
$um = WC()->session->get( 'um' );
// If not get it and save it
if( empty($um) ){
    // ==> HERE goes the function to get customer's purchases total sum
    $um = get_customer_total_purchases_sum();
    // Save it in WC_Session
    WC()->session->set('um', $um);
}
 $vv=10000 - $um;
    if ( $um > 0 && $vv >0) {

    echo '<div class="woocommerce-message"><a href="' . get_permalink( 
       woocommerce_get_page_id( 'shop' ) ) . '" class="button wc-forward">Tiếp tục mua sắm</a>Bạn cần thêm ' . wc_price($vv) . ' để được.... </div>';
}
else { 
echo '......';
  }}

Any help is appreciated. 任何帮助表示赞赏。

Try the following instead (I have revisited a bit get_customer_total_purchases_sum() function) : 请尝试以下方法(我已经重新访问了一下get_customer_total_purchases_sum()函数)

// Utililty function to get customer's total purchases sum
function get_customer_total_purchases_sum() {
    $current_user_id = get_current_user_id(); // Current user ID

    if( $current_user_id == 0 ) return 0; // we return zero if customer is not logged in

    global $wpdb;

    // return the SQL query (paid orders sum)
    return $wpdb->get_var("SELECT SUM(pm.meta_value) FROM {$wpdb->prefix}postmeta as pm
    INNER JOIN {$wpdb->prefix}postmeta as pm2 ON pm.post_id = pm2.post_id
    INNER JOIN {$wpdb->prefix}posts as p ON pm.post_id = p.ID
    WHERE p.post_status LIKE 'wc-completed' AND p.post_type LIKE 'shop_order'
    AND pm.meta_key LIKE '_order_total' AND pm2.meta_key LIKE '_customer_user'
    AND pm2.meta_value LIKE '$current_user_id'");
}

// Display a custom notice
add_action( 'template_redirect', 'total_purchase_custom_notification' );
function total_purchase_custom_notification( ) {

    if ( is_wc_endpoint_url('order-received') && WC()->session->get( 'purchases_sum' ) ) {
        // We remove this session variable in thankyou page (if it still exist)
        WC()->session->__unset( 'purchases_sum' );
    }
    // On cart page we display a custom notice
    elseif( is_cart() ) {
        // Get customer's purchases total sum and set it in WC_Session
        if( ! WC()->session->get( 'purchases_sum' ) ){
            WC()->session->set('purchases_sum', get_customer_total_purchases_sum());
        }

        $total_purchases  = WC()->session->get( 'purchases_sum' );

        if ( $total_purchases == 0 ) return; // We exit (no purchases or non logged users)

        if ( ( 10000 - $total_purchases ) > 0 )
        {
            wc_add_notice( sprintf(
                '<a class="button alt wc-forward" style="float:right" href="%s">%s</a> ' .
                __( "You need an extra %s at all to get a...", "woocommerce" ),
                get_permalink( wc_get_page_id( 'shop' ) ),
                __( "Continue shopping", "woocommerce" ),
                strip_tags( wc_price( 10000 - $total_purchases ) )
            ), 'notice');
        }
        else
        {
            wc_add_notice( __( "......", "woocommerce"), 'notice' );
        }
    }
}

This code goes on function.php file of your active child theme (or theme). 此代码位于活动子主题(或主题)的function.php文件中。 Tested and works. 经过测试和工作。

在此输入图像描述

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM