当相关产品使用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
答案 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)购物车项目:
要检查并获得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
,以查找与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文件中。