有条件地向Woocommerce中的购物车商品和订单商品添加类

时间:2018-11-11 17:19:25

标签: php wordpress woocommerce cart orders

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

但是,我无法使用_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

1 个答案:

答案 0 :(得分:1)

您不能使一个函数对两个钩子都起作用,因为它们具有不同的钩子参数:

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

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

1)购物车项目:

要检查并获得Wo​​ocommerce产品附加插件使用的正确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,以查找与meta_key匹配的_wc_pao_addon_name

一旦找到正确的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文件中。