我有几行代码,用于查看订单并在订单包含特定订阅产品(id 12496)且总数超过 0 时执行操作。
function get_product_data( $customer_data, $order ) {
foreach ( $order->get_items() as $item ) {
if ( 12496 === $item->get_product_id() && ($order->get_total() > '0') ) {
$customer_data['journey_sub_variation'] = $item['variation_id'];
}
}
return $customer_data;
}
add_filter( 'wpf_woocommerce_customer_data', 'get_product_data', 10, 2 );
一切正常,但这并不完全是我想要的。我添加“ > '0' ”条件的原因是因为我希望脚本忽略“切换订单”的订单。但并非所有的零指令都一定是切换指令。我们的子系统中的父订单通常为 0(我们使用免费试用),因此这不是正确的解决方案。
我真正想做的是,如果订单包含该订阅产品(id 12496)并且不是 Switch 订单,则执行该操作。 或者,我们可以检查相关订单是否是父订单,因此即使总数为 0,也执行该操作。
希望这是有道理的。
我已经尝试玩了几个小时了,但没有任何效果。
有什么想法吗? 预先感谢。
WC_Order
get_parent_id()
方法来检查订单是否为主根订单(不是子订单)。
/**
* Conditional function: Check if an Order is a child order.
*
* @param object $order The order object.
*
* @return bool
*/
function is_child_order( $order ) {
return $order->get_parent_id() > 0 ? true : false;
}
代码位于子主题的functions.php文件中(或插件中)。
然后你可以尝试在代码中使用它,例如:
function get_product_data( $customer_data, $order ) {
// If is a child order, Exit
if ( is_child_order( $order ) ) {
return $customer_data;
}
foreach ( $order->get_items() as $item ) {
if ( 12496 === $item->get_product_id() ) {
$customer_data['journey_sub_variation'] = $item['variation_id'];
}
}
return $customer_data;
}
add_filter( 'wpf_woocommerce_customer_data', 'get_product_data', 10, 2 );
它可以工作。