我的网站上有一个产品,允许用户从产品插件列表中选择他们想要包含在订单中的商品。默认值为 0,用户可以输入任何数字以将该插件包含在其订单中。
我使用以下代码成功从购物车和订单确认页面过滤掉所有值为 0 的插件。但我不知道如何从管理区域的订单详细信息或管理和客户电子邮件中过滤掉它们。希望这里有人能给我一些答案/方向。
add_filter( 'woocommerce_order_get_items', 'custom_order_items', 10, 2 );
function custom_order_items( $order_meta ) {
reset($order_meta);
$first_key = key($order_meta);
$search_term = 'Basket Items - ';
$order = reset($order_meta);
if( is_array($order['item_meta']) ) {
foreach ( $order['item_meta'] as $key => $value ) {
if (strpos($key, $search_term) !== false && $value[0] == 0) {
unset($order['item_meta'][$key]);
}
}
$order_meta[$first_key] = $order;
}
return $order_meta;
}
在尝试了数十个 Woocommerce 过滤器后,我终于找到了解决这个问题的方法。通过在将产品添加到购物车时过滤产品数组,我能够成功过滤掉值为 0 的插件。
add_filter( 'woocommerce_add_cart_item', 'custom_function', 10, 2 );
function custom_function( $item ) {
$addons = $item['addons'];
foreach( $addons as $key => $value) {
if( $value['value'] === 0 ) {
unset($addons[$key]);
}
}
$item['addons'] = $addons;
return $item;
}