カートの小計、カートの合計、カートのアイテム、および配送の合計が正常に機能していることを示すwoocommerceウィジェットを開発していますが、ajaxを使用して配送方法を切り替えるたびに、配送の合計とカートの合計を更新したい. 現在、ページのリロード後にのみ更新されます。この目的で利用できるフックはありますか?
2 に答える
これは、add_to_cart_fragments
フィルターを使用して行うことができます。
私の実装では、AJAX で表示されるアイテムの数のみを更新しますが、合計などの更新にも使用できます。これは、カートの詳細を表示するテンプレートの通常のコードです。
<a class="cart-contents" href="<?php echo $woocommerce->cart->get_cart_url(); ?>">
(<?php echo sprintf(_n('%d item', '%d items', $woocommerce->cart->cart_contents_count, 'woothemes'), $woocommerce->cart->cart_contents_count); ?>)</a>
これは で追加されたフィルタですfunctions.php
:
// Update items in cart via AJAX
add_filter('add_to_cart_fragments', 'woo_add_to_cart_ajax');
function woo_add_to_cart_ajax( $fragments ) {
global $woocommerce;
ob_start();
?>
<a class="cart-contents" href="<?php echo $woocommerce->cart->get_cart_url(); ?>">(<?php echo sprintf(_n('%d item', '%d items', $woocommerce->cart->cart_contents_count, 'woothemes'), $woocommerce->cart->cart_contents_count); ?>)</a>
<?php
$fragments['a.cart-contents'] = ob_get_clean();
return $fragments;
}
これに関するいくつかのリソース/ドキュメントが間違いなくあります。このコードを書いたときに参照用に使用したことを覚えていますが、グーグルで検索するのは少し難しいです。
これについて疑問に思っている人のために、WooThemes のサイトHEREに公式ドキュメントがあります。これをコメントに投稿できなかったことをお詫びします。評判ポイントが十分ではありません。
ただし、コードは更新されているようです。get_cart_contents_count()
の代わりに を 使用するようになりcart_contents_count
ました。
WooThemes のドキュメントから直接コピーした新しいコード スニペットを次に示します (もちろん、コードを編集して好きなカート情報を表示できますが、両方のスニペットで同じ編集を行うようにしてください)。
テンプレートでカートの内容と合計を表示するには、次のようなものを使用します。
<a class="cart-contents" href="<?php echo WC()->cart->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>
カート ビューアーを ajax 化して、アイテムが (ajax 経由で) 追加されたときに更新されるようにするには、次を使用します。
<?php
// Ensure cart contents update when products are added to the cart via AJAX (place the following in functions.php)
add_filter( 'woocommerce_add_to_cart_fragments', 'woocommerce_header_add_to_cart_fragment' );
function woocommerce_header_add_to_cart_fragment( $fragments ) {
ob_start();
?>
<a class="cart-contents" href="<?php echo WC()->cart->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>
<?php
$fragments['a.cart-contents'] = ob_get_clean();
return $fragments;
}