Php 有条件地向Woocommerce中的购物车项目和订单项目添加一个类
当相关产品使用插件自定义字段时,我想对Woocommerce购物车和订单项目进行不同的样式设置,因此我需要有条件地添加类(到购物车项目和订单项目) 但我无法使用Php 有条件地向Woocommerce中的购物车项目和订单项目添加一个类,php,wordpress,woocommerce,cart,orders,Php,Wordpress,Woocommerce,Cart,Orders,当相关产品使用插件自定义字段时,我想对Woocommerce购物车和订单项目进行不同的样式设置,因此我需要有条件地添加类(到购物车项目和订单项目) 但我无法使用\u wc\u pao\u addon\u name元键使其工作。这是我的密码: add_filter( 'woocommerce_order_item_class', 'add_product_addon_classes', 10, 4 ); add_filter( 'woocommerce_cart_item_class',
\u wc\u pao\u addon\u 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;
}
我做错了什么
相关:不能使一个函数同时适用于两个钩子,因为它们具有不同的钩子参数:
- 钩子
使用woocommerce\u cart\u item\u class
、$class
和$cart\u item
参数$cart\u item\u key
- 钩子
使用woocommerce\u order\u item\u class
、$class
和$item
参数$order
$values[''u wc\u pao\u addon\u name']
无法在您的代码中工作
1)购物车项目:
要检查并获得Woocommerce产品附加组件插件使用的正确meta_密钥,您将首先使用此答案末尾添加的测试挂钩函数
一旦找到正确的meta\u键
,您将在以下代码中用正确的meta\u键
替换addon\u parent\u id:
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;
}
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文件。它应该适用于购物车和结帐
2)对于订单项目(订单接收、订单查看、订单付款和电子邮件通知): 更复杂的是,您需要知道如何将
\u wc\u pao\u addon\u name
保存在订单项中。为此,您需要查看数据库表wp\u woocommerce\u order\u itemmeta
以搜索与\u wc\u pao\u addon\u name
匹配的meta\u键
一旦找到正确的meta_键
,您将在以下代码中用右边的meta_键
替换加载项名称
:
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;
}
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文件。它应该适用于订单项目
检查并获取正确的购物车自定义元数据(仅限测试): 要在cart对象中找到插件作为Woocommerce产品加载项添加的自定义元数据的正确元数据,您将使用以下内容(将在cart页面中显示cart项目原始数据):
//测试和获取购物车项目原始数据
添加\u操作('woocommerce\u在\u购物车之前',函数(){
//循环浏览购物车项目
foreach(WC()->cart->get_cart()作为$cart_项目){
//输出购物车项目原始数据
回显“”;打印($cart\u项目);回显“”;
}
}, 987 );
代码进入活动子主题(活动主题)的function.php文件。谢谢!对于邮件/订单项目,代码工作正常(我查看了数据库,meta_键正好是_wc_pao_addon_name)。但cart的代码不起作用(不是因为订单还没有创建吗?)。谢谢你,你每次都是天才。)正确的元似乎是附加的家长id。非常感谢!