【问题标题】:Show WooCommerce cart count outside of Wordpress在 Wordpress 之外显示 WooCommerce 购物车数量
【发布时间】:2018-06-20 19:16:44
【问题描述】:

我已经建立了一个完整的网站。我现在已经在子目录 (/shop) 中安装了 Wordpress,并且我正在使用 WooCommerce 来推动产品的销售。

在商店页面的顶部菜单栏中,我有一个购物车图标,显示购物车中的产品数量。

我希望当用户点击返回到网站的非 Wordpress 页面以继续显示购物车中的商品数量时。有人可以指出我正确的方向吗?我试图包含主要的 class-woocommerce.php 类,但它不起作用。

这是我在 index.php 文件中用来测试的内容:

include 'shop/wp-content/plugins/woocommerce/includes/class-woocommerce.php';
global $woocommerce;
var_dump($woocommerce->cart);

编辑:

我现在包含 wp-load.php 而不是 class-woocommerce.php,当我转储 WooCommerce 购物车时,我可以看到它,但它完全是空的,即即使我在购物车中放置了物品,也有 0 件物品。

【问题讨论】:

    标签: php jquery wordpress woocommerce session-storage


    【解决方案1】:

    更新:

    这也可以通过这种方式设置自定义 cookie 或更好地使用 javascript 会话存储来完成:

    add_action('wp_footer', 'custom_cart_item_count_script');
    function custom_cart_item_count_script(){
        if( WC()->cart->is_empty() )
            $cart_count = 0;
        else
            $cart_count = WC()->cart->get_cart_contents_count();
    
        if(isset($cart_count)){
        ?>
            <script type="text/javascript">
                jQuery(function($){
                    var cartCount = <?php echo $cart_count; ?>,
                        csName = 'CARTCOUNT',
                        csStorage = sessionStorage.getItem(csName);
    
                    if(csStorage == null || csStorage == 'undefined'){
                        sessionStorage.setItem(csName, cartCount);
                        console.log(sessionStorage.getItem(csName));
                    }
                });
            </script>
        <?php
        }
    }
    

    此代码位于您的活动子主题(或活动主题)的 function.php 文件中。

    经过测试并且有效。


    在您的非 Wordpress 页面上:

    您将需要获取此浏览器会话存储值。因此,您将在非 Wordpress 页面中添加类似以下内容:

    ?>
        <script type="text/javascript">
            jQuery(function($){
                var caName = 'CARTCOUNT',
                    caStorage = sessionStorage.getItem(caName);
    
                if(caStorage == null || caStorage == 'undefined')
                    $('span.cart-count').html('0');
                else
                    $('span.cart-count').html(caStorage);
    
                console.log('css-read: '+caStorage);
            });
        </script>
        <p>Cart count: <span class="cart-count"></span></p>
    <?php
    

    经过测试和工作:

    【讨论】:

    • 您好,感谢您的帮助。那行得通!对于其他搜索相同内容的人,我还必须添加:define('ADMIN_COOKIE_PATH', '/');定义('COOKIEPATH','/');定义('SITECOOKIEPATH','/');之前:require_once(ABSPATH .'wp-settings.php');在 config.php 文件中,使 cookie 在父目录中可访问。我仍然有一个问题。似乎 cookie 仅存储单个项目的数量,而不是同一项目的倍数。例如,如果购物车中有 4 个相同的商品,它仍然只在 cookie 中显示 1。知道如何获得所有项目的总数吗?谢谢
    • @Sio 我为你感到高兴……我认为这也可以用 cookie 完成,但它更反复无常。也许你可以删除那些旧的不必要的 cmets,拜托。谢谢
    猜你喜欢
    • 1970-01-01
    • 2016-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多