【问题标题】:Add conditionally a class to cart items and order items in Woocommerce在 Woocommerce 中有条件地向购物车项目和订购项目添加一个类
【发布时间】:2019-04-14 12:41:46
【问题描述】:

当相关产品使用 Woocommerce Product add-ons 3+ 插件自定义字段时,我想以不同的方式设置 Woocommerce 购物车和订购商品的样式,因此我需要有条件地添加类(到购物车商品和订购商品)。 p>

但我无法让它工作,使用 _wc_pao_addon_name 元键来工作。这是我的代码:

  add_filter( 'woocommerce_order_item_class', 'add_product_addon_classes', 10, 4 );
  add_filter( 'woocommerce_cart_item_class', 'add_cart_addon_classes', 10, 4 );

  function add_cart_addon_classes ( $class, $cart_item, $values  ) {

    if ( isset( $values['_wc_pao_addon_name'] ) ) {
        $class = $class . ' fl-addon-item';
    }

    return $class;
}

我做错了什么?

相关:Pricing options, image swatches, and more have arrived in Product Add-Ons 3.0

【问题讨论】:

    标签: php wordpress woocommerce cart orders


    【解决方案1】:

    你不能为这两个钩子创建一个函数,因为它们有不同的钩子参数:

    • 钩子woocommerce_cart_item_class 使用$class$cart_item$cart_item_key 参数
    • 钩子woocommerce_order_item_class 使用$class$item$order 参数

    如您所见,您的 $values['_wc_pao_addon_name'] 无法在您的代码中工作。

    1) 购物车商品:

    要检查并获取 Woocommerce 产品插件插件使用的正确 meta_key,您将首先使用此答案末尾添加的测试挂钩功能......

    一旦您找到正确的meta_key,您将在以下代码中将addon_parent_id 替换为正确的meta_key

    add_filter( 'woocommerce_cart_item_class', 'additional_class_to_cart_item_classes', 10, 3 );
    function additional_class_to_cart_item_classes ( $class, $cart_item, $cart_item_key ) {
        if ( isset( $cart_item['addon_parent_id'] ) ) {
            $class .= ' fl-addon-item';
        }
    
        return $class;
    }
    

    代码进入您的活动子主题(活动主题)的 function.php 文件中。它应该适用于购物车和结帐。


    2) 对于订单项目 (收到订单、查看订单、订单付款和电子邮件通知)

    这更复杂,因为您需要知道_wc_pao_addon_name 是如何保存在订单项中的。为此,您需要查看您的数据库表wp_woocommerce_order_itemmeta,搜索与_wc_pao_addon_name 匹配的meta_key

    一旦您找到正确的meta_key,您将在以下代码中将_wc_pao_addon_name 替换为正确的meta_key

    add_filter( 'woocommerce_order_item_class', 'additional_class_to_order_item_classes', 10, 3 );
    function additional_class_to_order_item_classes ( $class, $item, $order ) {
        if ( $item->get_meta('_wc_pao_addon_name') ) {
            $class .= ' fl-addon-item';
        }
    
        return $class;
    }
    

    代码进入您的活动子主题(活动主题)的 function.php 文件中。它应该适用于订购商品。


    检查并获取正确的购物车自定义元数据(仅限测试)

    要在购物车对象中找出插件作为 Woocommerce 产品插件添加的自定义元数据的正确元键是什么,您将使用以下 (将在购物车页面中显示购物车项目的原始数据)

    // Testing and getting cart item raw data
    add_action( 'woocommerce_before_cart', function(){
        // Loop through cart items
        foreach(WC()->cart->get_cart() as $cart_item) {
            // Output cart item raw data
            echo '<pre>'; print_r($cart_item); echo '</pre>';
        }
    }, 987 );
    

    代码进入您的活动子主题(活动主题)的 function.php 文件中。

    【讨论】:

    • 谢谢!对于邮件/订单项目代码工作正常(我查看了数据库和 meta_key 正是 _wc_pao_addon_name)。但是购物车的代码不起作用(不是因为尚未创建订单吗?)。谢谢你
    • 你每次都是天才。)正确的元数据似乎是 addon_parent_id。非常感谢!
    猜你喜欢
    • 2020-02-29
    • 2016-11-18
    • 2017-04-21
    • 2017-12-20
    • 2017-07-23
    • 1970-01-01
    • 1970-01-01
    • 2011-03-26
    • 2017-08-29
    相关资源
    最近更新 更多