【问题标题】:Woocommerce : Add Body class to product page if the current product is in the cartWoocommerce:如果当前产品在购物车中,则将 Body 类添加到产品页面
【发布时间】:2021-01-24 05:39:57
【问题描述】:

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

如果购物车包含任何产品,以下是向 Woocomerce 产品页面添加 body 类的函数。

    <?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
}

有谁知道当购物车包含当前产品时,如何修改上面的代码sn-p在产品页面的正文中添加一个类?

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

任何帮助将不胜感激。

【问题讨论】:

    标签: php wordpress woocommerce


    【解决方案1】:

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

    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。经过测试并且可以工作。

    【讨论】:

    • 谢谢,但这会破坏显示空白页面的网站。在源代码中,我可以看到有一个打开的正文标签“
    • 不客气。请删除您的代码并以完全相同的方式复制/粘贴我的代码。该代码已经过测试并且可以工作。
    • 是的,我已删除我的代码并复制/粘贴您的代码。结果是一样的。空白的白页,只有一个开始的正文标签。我可以在此处粘贴网页 URL 吗?
    • 请分享您使用的代码的屏幕截图。谢谢
    猜你喜欢
    • 2014-02-06
    • 1970-01-01
    • 2014-11-21
    • 1970-01-01
    • 2021-08-22
    • 1970-01-01
    • 2015-03-31
    • 2018-06-03
    • 2022-10-04
    相关资源
    最近更新 更多