Woocommerce woocommerce_checkout_create_order_line_item 似乎没有开火

Woocommerce woocommerce_checkout_create_order_line_item doesn't appear to be firing

在我的场景中,订阅订单被添加到当前用户的购物车中,附加数据用于计算有关订阅的其他数据,例如下一个续订日期、订阅价格等。这是通过使用很好地工作:

$woocommerce->cart->add_to_cart($product->get_id(), '1', '0', array(), array(
    PVS_META_DATA_KEY_INPUTS => $test_data['result']['inputs'],
    PVS_META_DATA_KEY_MONTHS => $test_data['result']['month-data'],
    PVS_META_DATA_KEY_PRODUCTS => $test_data['result']['product-data']
));

除此之外,我的最后一步是从购物车的自定义数据中获取月份和产品元数据,并将其与订阅一起存储以用于订单履行原因。我的研究表明我可能需要使用 woocommerce_checkout_create_order_line_item 操作。以下是我的代码:

function pvs_woocommerce_checkout_create_order_line_item($item, $cart_item_key, $values, $order)
{
    var_dump($item);
    echo '<br />';
    var_dump($cart_item_key);
    echo '<br />';
    var_dump($values);
    echo '<br />';
    var_dump($order);

    if (isset($values[PVS_META_DATA_KEY_INPUTS]))
    {
        $item->add_meta_data(PVS_META_DATA_KEY_INPUTS, json_encode($values[PVS_META_DATA_KEY_INPUTS]));
    }

    if (isset($values[PVS_META_DATA_KEY_MONTHS]))
    {
        $item->add_meta_data(PVS_META_DATA_KEY_MONTHS, json_encode($values[PVS_META_DATA_KEY_MONTHS]));
    }

    if (isset($values[PVS_META_DATA_KEY_PRODUCTS]))
    {
        $item->add_meta_data(PVS_META_DATA_KEY_PRODUCTS, json_encode($values[PVS_META_DATA_KEY_PRODUCTS]));
    }
}
add_action('woocommerce_checkout_create_order_line_item', 'pvs_woocommerce_checkout_create_order_line_item', 10, 4);

但是,在结帐时,我从未收到此操作的输出。检查 WooCommerce 状态页面,没有返回任何错误 - 所以如果它失败了,它就会默默地失败。作为完整性检查,我还使用了以下 function/action 只是为了查看它是否被调用而另一个失败:

function idk_im_losing_my_mind_tho($item, $cart_item_key, $values, $order)
{
    echo 'Please work ;(';
}
add_action('woocommerce_checkout_create_order_line_item', 'idk_im_losing_my_mind_tho', 10, 4);

关于 a) 启动此操作或 b) 在结帐后将购物车数据存储在订单中,有什么建议吗?

我们使用的是 WordPress 5.3.2 版、WooCommerce 3.9.1 版和 WooCommerce 订阅版 3.0.1。非常感谢任何帮助!

看到我无法判断 woocommerce_checkout_create_order_line_item 操作是否正确触发,我决定尝试另一种调试方法。我发现 WooCommerce 公开了一个记录器,所以我创建了一个允许我写入 WooCommerce 日志的方法。类似于:

function pvs_write_log($message)
{
    $logger = wc_get_logger();
    $logger->debug($message, array('source' => 'PVS Plugin'));
}

然后在 pvs_woocommerce_checkout_create_order_line_item 函数中,我使用了 pvs_write_logvar_export 而不是 echovar_dump。你瞧,我有一个输出到日志,这让我可以调试并找出我剩下的问题。在不深入研究 WooCommerce 插件的情况下,我怀疑此操作必须在页面重定向之前发生,导致页面输出不可见。