基于 Woocommerce 中用户总购买量的自定义购物车通知
Custom cart notice based on user total purchased amount in Woocommerce
我正在尝试根据此答案代码在 Woocommerce 中显示基于用户总购买量的自定义购物车通知:
它没有像我想要的那样工作。
例如,如果客户下了 2 个订单:
- 一单200
- 二阶为122
所以总和是200 + 122 = 322。但是我一共得到了200。
我做错了什么?
这是我使用的代码:
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 '......';
}}
感谢任何帮助。
尝试以下方法 (我重新访问了一些 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' );
}
}
}
此代码在您的活动子主题(或主题)的 function.php 文件中。已测试并有效。
我正在尝试根据此答案代码在 Woocommerce 中显示基于用户总购买量的自定义购物车通知:
它没有像我想要的那样工作。
例如,如果客户下了 2 个订单:
- 一单200
- 二阶为122
所以总和是200 + 122 = 322。但是我一共得到了200。 我做错了什么?
这是我使用的代码:
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 '......';
}}
感谢任何帮助。
尝试以下方法 (我重新访问了一些 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' );
}
}
}
此代码在您的活动子主题(或主题)的 function.php 文件中。已测试并有效。