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_log
和 var_export
而不是 echo
和 var_dump
。你瞧,我有一个输出到日志,这让我可以调试并找出我剩下的问题。在不深入研究 WooCommerce 插件的情况下,我怀疑此操作必须在页面重定向之前发生,导致页面输出不可见。
在我的场景中,订阅订单被添加到当前用户的购物车中,附加数据用于计算有关订阅的其他数据,例如下一个续订日期、订阅价格等。这是通过使用很好地工作:
$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_log
和 var_export
而不是 echo
和 var_dump
。你瞧,我有一个输出到日志,这让我可以调试并找出我剩下的问题。在不深入研究 WooCommerce 插件的情况下,我怀疑此操作必须在页面重定向之前发生,导致页面输出不可见。