在 Woocommerce 中使用 AJAX 刷新/更新微型购物车

tob*_*asg 3 php ajax wordpress cart woocommerce

我\xe2\x80\x99m 尝试将此代码添加到我的 WooCommerce 设置中,该设置在我放置 PHP 的任何位置添加一个购物车链接,然后在使用 AJAX 更改购物车中的项目时更新它:https: //docs.woocommerce.com/文档/显示购物车内容总计/

\n\n

以下是片段:

\n\n

HTML - PHP:

\n\n
<a class="cart-customlocation" href="<?php echo wc_get_cart_url(); ?>" title="<?php _e( \'View your shopping cart\' ); ?>"><?php echo sprintf ( _n( \'%d item\', \'%d items\', WC()->cart->get_cart_contents_count() ), WC()->cart->get_cart_contents_count() ); ?> - <?php echo WC()->cart->get_cart_total(); ?></a>\n
Run Code Online (Sandbox Code Playgroud)\n\n

functions.php文件中:

\n\n
function woocommerce_header_add_to_cart_fragment( $fragments ) {\n    global $woocommerce;\n\n    ob_start();\n\n    ?>\n    <a class="cart-customlocation" href="<?php echo esc_url(wc_get_cart_url()); ?>" title="<?php _e(\'View your shopping cart\', \'woothemes\'); ?>"><?php echo sprintf(_n(\'%d item\', \'%d items\', $woocommerce->cart->cart_contents_count, \'woothemes\'), $woocommerce->cart->cart_contents_count);?> - <?php echo $woocommerce->cart->get_cart_total(); ?></a>\n    <?php\n    $fragments[\'a.cart-customlocation\'] = ob_get_clean();\n    return $fragments;\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

但 AJAX 不起作用。我需要将第二个片段添加到functions.php 中吗?

\n\n

感觉我应该调用该函数而不仅仅是定义它?

\n\n

或者我是否需要以某种方式激活 AJAX 才能使其正常工作?

\n

Ped*_*ram 6

2022年解决方案

Woocommere 使用 ajax 显示实时计数器和迷你车

首先在您想要的位置显示您的内容,counter如下所示:mini cartheader.php

<div class="basket-item-count">
  <span class="cart-items-count">
  <?php
    echo WC()->cart->get_cart_contents_count();
  ?>
</span>
</div>
Run Code Online (Sandbox Code Playgroud)

这将显示您想要在购物车图标旁边显示的独立计数器。

<div class="widget_shopping_cart_content">
   <?php
     echo woocommerce_mini_cart();
   ?>
</div>
Run Code Online (Sandbox Code Playgroud)

这将显示迷你购物车物品。默认情况下,woocommerce 将在片段中更新您的迷你购物车项目,但您需要将计数器附加到该片段,如下所示,因此将此片段添加到您的functions.php中:

add_filter( 'woocommerce_add_to_cart_fragments', 'cart_count_fragments', 10, 1 );

function cart_count_fragments( $fragments ) {
    $fragments['div.basket-item-count'] = '<div class="basket-item-count"><span class="cart-items-count">' . WC()->cart->get_cart_contents_count() . '</span></div>';
    return $fragments;
}
Run Code Online (Sandbox Code Playgroud)

请注意,类名称很重要,它将随cart-items-count类更新计数器。