【问题标题】:Woocommerce woocommerce_checkout_create_order_line_item doesn't appear to be firingWoocommerce woocommerce_checkout_create_order_line_item 似乎没有被解雇
【发布时间】:2020-05-28 12:11:09
【问题描述】:

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

$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 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 版。非常感谢任何帮助!

【问题讨论】:

  • 这能回答你的问题吗? Add extra meta for orders in Woocommerce
  • @caiovisk 最佳答案建议使用woocommerce_checkout_update_order_meta 操作。这可能有效,但问题是购物车当前包含我的所有自定义数据。您能否建议一种将购物车中的数据获取到此操作的方法?

标签: php wordpress woocommerce action woocommerce-subscriptions


【解决方案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 插件的情况下,此操作必须在页面重定向之前发生,从而导致页面输出不可见。

【讨论】:

    猜你喜欢
    • 2015-01-14
    • 2020-03-28
    • 2015-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-16
    相关资源
    最近更新 更多