如何查看当前订单是切换订单还是订阅中的父订单?

问题描述 投票:0回答:1

我有几行代码,用于查看订单并在订单包含特定订阅产品(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,也执行该操作。

希望这是有道理的。

我已经尝试玩了几个小时了,但没有任何效果。

有什么想法吗? 预先感谢。

woocommerce woocommerce-subscriptions
1个回答
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 );

它可以工作。

© www.soinside.com 2019 - 2024. All rights reserved.