繁体   English   中英

Woocommerce:如果当前产品在购物车中,则将主体 class 添加到产品页面

[英]Woocommerce : Add Body class to product page if the current product is in the cart

我从这里找到了这个很棒的片段https://gist.github.com/michaelbourne/a2fbebbc839a41c4204524fcd020061e

如果购物车包含任何产品,以下是 function 将主体 class 添加到 Woocomerce 产品页面。

    <?php

// Add a body class via the body_class filter in WP
// =============================================================================
add_filter( 'body_class', 'mb_body_class_for_cart_items' );
function mb_body_class_for_cart_items( $classes ) {
    if( ! WC()->cart->is_empty() ){
        $classes[] = 'cart-has-items';
    }
    return $classes;
}

// Add a body class via javascript for AJAX enabled sites
// =============================================================================
add_action( 'wp_footer', 'mb_body_class_for_ajax_add_to_cart' );
function mb_body_class_for_ajax_add_to_cart() {
?>
  <script type="text/javascript">
    (function($){
      $('body').on( 'added_to_cart', function(){
        if( ! $(this).hasClass('cart-has-items') ){
          $(this).addClass('cart-has-items');
        }
      });
    })(jQuery);
  </script>
<?php
}

当购物车包含当前产品时,有谁知道如何修改上述代码片段以将 class 添加到产品页面的正文中?

例如,如果“商品 A”在购物车中,当访问者浏览“商品 A”产品页面时,它应该包含正文 class “已添加”

任何帮助,将不胜感激。

您需要一个可以多次使用的 function。 此 function 可用于可变产品和简单产品:

function ywp_check_product_is_in_cart( $product_id ) {
    if ( ! WC()->cart->is_empty() ) {
        foreach( WC()->cart->get_cart() as $cart_item ) {
            $cart_item_ids = array( $cart_item['product_id'], $cart_item['variation_id'] );

            if( in_array( $product_id, $cart_item_ids ) ) {
                return true;
            }
        }

        return false;
    }

    return false;
}

用法

add_filter( 'body_class', 'ywp_body_class_for_cart_items' );
function ywp_body_class_for_cart_items( $classes ) {
    // Check user currently is in product page
    if( ! is_singular( 'product' ) ) {
        return $classes;
    }

    if( ywp_check_product_is_in_cart( get_the_id() ) ) {
        $classes[] = 'already-added';
    }

    return $classes;
}

代码进入您的活动主题/子主题的functions.php 测试和工作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM