Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/231.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 基于Woocommerce中用户总购买金额的定制购物车通知_Php_Wordpress_Woocommerce_Discount_Notice - Fatal编程技术网

Php 基于Woocommerce中用户总购买金额的定制购物车通知

Php 基于Woocommerce中用户总购买金额的定制购物车通知,php,wordpress,woocommerce,discount,notice,Php,Wordpress,Woocommerce,Discount,Notice,我正在尝试根据用户在Woocommerce中的总购买金额,根据以下回答代码显示自定义购物车通知: 它不能像我希望的那样工作 例如,如果客户已下了2份订单: 第一批是200 二阶是122 所以总的总和是200+122=322。但我总共得到了200。 我做错了什么 这是我使用的代码: add_action( 'woocommerce_before_cart', 'vc' ); function vc( ) { // Only for logged in user if ( ( is_a

我正在尝试根据用户在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 '......';
  }}
add_action('woocommerce_-before_-cart','vc');
函数vc(){
//仅适用于已登录的用户
如果((定义了('DOING_AJAX'))| |!用户登录了吗?)
返回;
$um=WC()->session->get('um');
//如果没有,请获取并保存它
如果(空($um)){
//==>下面是获取客户购买总额的函数
$um=获取客户的购买总额();
//将其保存在WC_会话中
WC()->session->set('um',$um);
}
$vv=10000-$um;
如果($um>0&$vv>0){
回音'Bạ北卡罗来纳州ần thêm.wc_价格($vv)。'ể được、 …';
}
否则{
回声“……”;
}}
非常感谢您的帮助。

请尝试以下操作(我重新访问了bit
get\u customer\u total\u purchases\u sum()
函数):

//获取客户总购买金额的实用函数
函数get\u customer\u total\u purchases\u sum(){
$current_user_id=get_current_user_id();//当前用户id
if($current\u user\u id==0)返回0;//如果客户未登录,则返回零
全球$wpdb;
//返回SQL查询(已付款订单总额)
返回$wpdb->get_var(“从{$wpdb->prefix}postemta中选择SUM(pm.meta_值)作为pm
内部连接{$wpdb->prefix}postemta作为pm2 ON pm.post_id=pm2.post_id
内部联接{$wpdb->prefix}在pm.post_id=p.id上作为p发布
其中p.post_状态如“wc已完成”和p.post_类型如“车间订单”
pm.meta_键类似于“\u order\u total”和pm2.meta_键类似于“\u customer\u user”
和pm2.meta_值,如“$current_user_id”);
}
//显示自定义通知
添加操作(“模板重定向”、“采购总额”和“定制通知”);
函数总计\采购\自定义\通知(){
if(is_wc_endpoint_url('order-received')&&wc()->session->get('purchases_sum')){
//我们在thankyou页面中删除此会话变量(如果它仍然存在)
WC()->session->unset('purchases_sum');
}
//在购物车页面上,我们显示一个自定义通知
elseif(is_cart()){
//获取客户的购买总额并在WC_会话中设置
如果(!WC()->会话->获取('purchases\u sum')){
WC()->session->set('purchases_sum',get_customer_total_purchases_sum());
}
$total_purchases=WC()->session->get('purchases_sum');
if($total_purchases==0)return;//我们退出(没有购买或没有登录的用户)
如果((10000-$total_purchases)>0)
{
wc_添加_通知(sprintf(
' ' .
__(“您需要额外的%s才能获得…,“woocommerce”),
获取永久链接(wc获取页面id(“店铺”),
__(“继续购物”、“商业”),
带标签(wc_价格(10000-$total_购买))
)“通知”);
}
其他的
{
wc_添加_通知(uuu(“…”,“woocommerce”),“通知”);
}
}
}
此代码位于活动子主题(或主题)的function.php文件中。测试和工作


replacement
add\u action('template\u redirect',
into
add\u action('woocommerce\u account\u log-history\u endpoint',
非常感谢您的帮助。@LêNghĩa我不明白…此代码是用于购物车(甚至是结账)的但是没有使用我从未使用过的“woocommerce\u account\u log-history\u endpoint”钩子。我添加了我的自定义帐户菜单元素。
add\u过滤器('woocommerce\u account\u menu\u items','xu',40);函数xu($menu\u links=array\u slice($menu\u links,0,3,true)+数组('xu'=>'xu của bạn')+数组_切片($menu_links,3,NULL,true);返回$menu_links;}add_action('init','add_endpoint');函数add_endpoint(){add_rewrite_endpoint('xu',EP_PAGES);}add_action('woocommerce_账户_____endpoint,'xuxuxu');函数xuxuxu(){//基于用户在woocmerce中购买的总金额的定制购物车通知}
@LêNghĩa你最好问一个新问题,清楚详细地解释事情……注释区中的代码不可读,更不用解释了。
// 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' );
        }
    }
}