我已经创建了以下插件,它应该在创建Woocommerce订单时向外部服务器发送POST HTTP请求。然而,这并没有发生:外部服务器上没有收到任何请求,wp-content/debug.log
中没有显示任何内容(我在wp-config.php
中确实有define( 'WP_DEBUG_LOG', true );
)。我做错了什么?
<?php
/**
* Plugin Name: MyPlugin
*/
function my_hook($order_id) {
$url = "https://example.com/do_something";
$data = wp_remote_post($url, array(
'headers' => array(
'Authorization' => "Token my_token",
'Content-Type' => 'application/json; charset=utf-8',
),
'body' => json_encode(array('order_id' => $order_id)),
'method' => 'POST',
'data_format' => 'body',
));
}
add_action(
'woocommerce_new_order',
'my_hook'
);
?>
3条答案
按热度按时间3qpi33ja1#
从WooCommerce 4.3.0开始,要使用的正确钩子是
woocommerce_checkout_order_created
,在创建订单时向外部服务器发送POST HTTP请求。所以你的代码将是:代码放在活动子主题(或活动主题)的functions.php文件中。应该能用
这个钩子位于
WC_Checkout
类的create_order()
方法中。woocommerce_checkout_update_order_meta
,:$order_id
和$data
(发布的数据)。woocommerce_checkout_create_order
: $order * 和$data
(发布的数据)*。woocommerce_checkout_create_order_line_item
:$item*,$cart_item_key
,$values
,$order
*。相关:如何在WooCommerce 3+中调试
5jvtdoz22#
如果你进入class-wc-checkout,你会发现create_order函数在结束之前触发了这些钩子:
也许你只需要使用其中的一个。
ylamdve63#
简短的回答是
woocommerce_checkout_order_processed
。而不是
woocommerce_thankyou
钩子,woocommerce_checkout_order_processed
钩子是相关的钩子。woocommerce_checkout_order_processed
钩子只会被调用一次,你不需要为每个产品添加 meta,也不需要进行额外的调用来检查代码是否只运行一次。因为woocommerce_thankyou
可以在每次thankyou页面加载时被多次调用。来源:https://stackoverflow.com/a/72195252/3261332