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

2024-07-03

我正在尝试根据 Woocommerce 中的用户总购买金额显示自定义购物车通知,基于此答案代码:

根据 Woocommerce 中的客户总购买金额添加百分比折扣 https://stackoverflow.com/questions/52141772/add-a-percentage-discount-based-on-customer-total-purchases-sum-in-woocommerce/52141907#52141907

它没有按照我想要的方式工作。

例如,如果客户下了 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 文件中。经过测试并有效。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

基于 Woocommerce 中用户总购买金额的自定义购物车通知 的相关文章

  • 检查您的代码是否在 64 位 PHP 上运行

    有谁知道在 PHP 中检查脚本是否以 32 位或 64 位运行的方法 目前我使用的是 PHP 5 3 5 理想情况下 我想编写一个函数 以便我的代码如下所示 if is 32bit true do 32bit workaround do e
  • 用于 Eclipse 的 PHP 混乱检测器

    我安装了 PTI Eclipse 插件 有改变的可能PDepend CodeSniffer and UnitTest 当我尝试右键单击任何文件时 我会看到Mess Detector选项也是如此 但当我单击它时什么也没有发生 在搜索了所有配置
  • 函数内的函数。?

    此代码生成的结果为 56 function x y function y z return z 2 return y 3 y 4 y x y y y echo y 知道里面发生了什么吗 我很困惑 X 返回 值 3 而 Y 返回 值 2 给定
  • mysql_query("从表 WHERE id-'$id' 中删除");失败[关闭]

    Closed 这个问题是无法重现或由拼写错误引起 help closed questions 目前不接受答案 我正在尝试通过 PHP 从 mySQL 数据库中删除一行 但它不起作用 我已经尝试过以下方法 mysql query DELETE
  • Cakephp:如何将值传递到 JavaScript 文件中?

    我有一些 javascript 包含在视图中 并且我在此线程中使用了 inkedmn 的方法 将页面特定的 javascript 添加到 cakephp 中的每个视图 https stackoverflow com questions 14
  • 在 WooCommerce 的电子邮件和订单页面中保存和显示产品自定义数据

    我正在使用一些代码来添加自定义字段 以使我的客户能够自定义他们的产品 这是我当前的代码 Add meta fields to all products SRC https wisdmlabs com blog add custom data
  • 调整大小然后裁剪 PHP

    好的 基本上我希望所有图像都是 170x170px 的正方形 因此 如果图像不是正方形 我希望调整它的大小 然后在中间裁剪 我花了很多时间玩这个 但一无所获 我已经让它裁剪较大图像的一部分等 但我特别需要调整图像大小 然后裁剪 任何帮助将不
  • 是否可以通过简单地交换一些文件来恢复 Postgres 数据库以提高速度?

    这是一个一般的 Postgres 备份和恢复方法问题 基于以下非生产服务器 即本地测试服务器 的用例 我有一个大约 20gb 的数据库 在测试 php 脚本期间我会破坏它 这将导致需要经常删除它并重新创建它 运行转储的 SQL 来恢复它需要
  • PDO中使用持久连接有什么缺点

    在 PDO 中 可以使用以下方法使连接持久化PDO ATTR PERSISTENT属性 根据 php 手册 持久连接不会在脚本结束时关闭 而是 当另一个脚本请求连接时 会被缓存并重新使用 相同的凭据 持久连接缓存允许您 避免每次建立新连接的
  • 在 PHP 中组合数组

    尝试学习 PHP 中的数组 为简洁起见 发布了片段 HTML 表单在这里 p What are your favorite type of cookies p
  • 使用 Cookie 记住我时的安全性

    我已经在 PHP 中实现了一个登录类 并且想要创建一个记住账号键入功能 这样用户就不必每次访问都登录 我对此进行了一些研究 并准备使用 PHP setcookie 编写它 但后来遇到了这个页面 如何使用 jquery 创建 记住我 并存储
  • 如何循环调用分页函数?

    我正在尝试使用空气桌API https airtable com api从我的数据中检索记录 具体来说 是我在列单元格中的 URL 列表 我写了一个函数 get airtable records 通过以下方式进行 API 调用curl它可以
  • 计算已发布字符串中的行数

    我试过这个 PHP 中计算文本区域中的新行以调整容器大小 https stackoverflow com questions 1743745 count new lines in textarea to resize container i
  • 以限制公共访问同时仍允许父类访问的方式覆盖子类中的公共方法?

    我有一个通用的 Collection 类 具有各种公共 getter 方法 要从 Collection 中获取一项 请调用 get 还有几种返回多个项目的方法 getMany getRange getAll find findAll que
  • PHP 警告:模块“mcrypt”已加载

    当我使用 PHP 运行命令时 它显示一个错误 例如当我跑步时php v查看我的 PHP 版本 它显示一个错误 然后显示有关 PHP 的信息 模块 mcrypt 已加载到第 0 行的 未知 中 zied ubuntu php v PHP Wa
  • 教义:如何从侦听器(preDqlSelect)内的选择查询中删除部分 where 子句?

    我的侦听器是行为的一部分 该行为应该删除任何调用的 select 查询的 where 子句中的所有 is published 检查 在子句中添加一个部分确实很容易 但如何删除一个部分呢 有一些功能 例如Doctrine Query gt r
  • 发送抓取请求以获取 torrent 的种子和同级

    我一直在尝试创建一个 torrent 网站 但我遇到了以下问题 如何发送 torrent 抓取请求以获取其播种者和水蛭 我有一个 PHP 类函数 它为我提供公告列表 public function getTrackers Load trac
  • 我可以通过 Reflection 获取私有财产的价值吗?

    它似乎不起作用 ref new ReflectionObject obj if ref gt hasProperty privateProperty print r ref gt getProperty privateProperty 它进
  • 如何使用call_user_func作为静态类方法?

    下面的代码工作正常 LibraryTests TestGetServer 获取 LibraryTests 中的函数数组并运行它们 methods get class methods LibraryTests foreach methods
  • 从 android 发送数组并使用 Volley 在 PhP 服务器接收

    你好我想发送一个字符串值数组到 PhP 服务器和 PhP 解码并将它们存储在 PhP 变量中 这是我在 android studio 的代码 private void getEventDetailRespond RequestQueue r

随机推荐