如何按计划创建状态检查? API Woocommerce 3+
How to create a status check on a schedule? API Woocommerce 3+
为外部配送服务发送订单后,我想检查其状态。如果他的状态发生了变化,那么在 Woocommerce 中进行更改。
我已设置将订单数据发送到外部递送服务。
add_action('woocommerce_thankyou', 'send_order_to_shiping');
function send_order_to_shiping( $order_id ){
$order = wc_get_order( $order_id );
$order_data = $order->get_data();
// Get order details
$parametr['sale_amount'] = $order_data['discount_total'];
$parametr['street'] = $order_data['billing']['address_1'];
$parametr['home'] = $order_data['billing']['address_2'];
$order_id = $order_data['id'];
foreach ($parametr as $key => $value){
$data .= "¶metr[".$key."]=".$value."";
}
// Send data
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://app.example.com/api/index.php?new_order");
curl_setopt($ch, CURLOPT_FAILONERROR, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($ch, CURLOPT_TIMEOUT, 30);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
$result = curl_exec($ch);
curl_close($ch);
echo $result;
}
当我发送订单(示例 ID 555)时,我得到了答复 echo $result;
:
id_order 来自送货服务 - 7273896。
echo $result;
显示:
{"result":"success","order_id":7273896,"order_number":10}
所以我在 Woocommerce 中有订单 ID - 555,在送货服务中有订单 ID 7273896。
从逻辑上讲,我需要将其保存在订单元数据中,并使用该数据单独进行状态检查。
对于你的问题的第一部分,我建议使用一个名为 WP Crontrol 的插件。您可以创建一个 cron 作业来调用您的送货服务 API 的功能。
您需要创建一个规则以允许每 15 分钟执行一次 cron。转到“设置”->“Cron 计划”以添加 15 分钟的间隔规则。在工具->Cron 事件中添加一个 cron 作业。给它一个钩子名称和一个动作。如果需要,您还可以包含用于函数的参数。
在 functions.php 中,将新的 cron 作业的匹配代码添加到 运行。这是一个例子:
add_action( 'check_status_hook', 'checkStatusAction' );
function checkStatusAction ($args) {
//run your code here or call it from here
}
您问题的第 2 部分...我无法提供任何帮助。我没有在 WooCommerce 工作过,甚至不知道订单状态的设置位置,或者您是否可以简单地更改单个状态值而不会打乱其他东西。
更新订单状态
$order = new WC_Order( $parametr['order_id'] );
$order->update_status('wc-cancelled');
可以从以下位置检索订单状态概览
https://docs.woocommerce.com/wc-apidocs/source-function-wc_get_order_statuses.html#88-106
为外部配送服务发送订单后,我想检查其状态。如果他的状态发生了变化,那么在 Woocommerce 中进行更改。
我已设置将订单数据发送到外部递送服务。
add_action('woocommerce_thankyou', 'send_order_to_shiping');
function send_order_to_shiping( $order_id ){
$order = wc_get_order( $order_id );
$order_data = $order->get_data();
// Get order details
$parametr['sale_amount'] = $order_data['discount_total'];
$parametr['street'] = $order_data['billing']['address_1'];
$parametr['home'] = $order_data['billing']['address_2'];
$order_id = $order_data['id'];
foreach ($parametr as $key => $value){
$data .= "¶metr[".$key."]=".$value."";
}
// Send data
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://app.example.com/api/index.php?new_order");
curl_setopt($ch, CURLOPT_FAILONERROR, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($ch, CURLOPT_TIMEOUT, 30);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
$result = curl_exec($ch);
curl_close($ch);
echo $result;
}
当我发送订单(示例 ID 555)时,我得到了答复 echo $result;
:
id_order 来自送货服务 - 7273896。
echo $result;
显示:
{"result":"success","order_id":7273896,"order_number":10}
所以我在 Woocommerce 中有订单 ID - 555,在送货服务中有订单 ID 7273896。
从逻辑上讲,我需要将其保存在订单元数据中,并使用该数据单独进行状态检查。
对于你的问题的第一部分,我建议使用一个名为 WP Crontrol 的插件。您可以创建一个 cron 作业来调用您的送货服务 API 的功能。
您需要创建一个规则以允许每 15 分钟执行一次 cron。转到“设置”->“Cron 计划”以添加 15 分钟的间隔规则。在工具->Cron 事件中添加一个 cron 作业。给它一个钩子名称和一个动作。如果需要,您还可以包含用于函数的参数。
在 functions.php 中,将新的 cron 作业的匹配代码添加到 运行。这是一个例子:
add_action( 'check_status_hook', 'checkStatusAction' );
function checkStatusAction ($args) {
//run your code here or call it from here
}
您问题的第 2 部分...我无法提供任何帮助。我没有在 WooCommerce 工作过,甚至不知道订单状态的设置位置,或者您是否可以简单地更改单个状态值而不会打乱其他东西。
更新订单状态
$order = new WC_Order( $parametr['order_id'] );
$order->update_status('wc-cancelled');
可以从以下位置检索订单状态概览 https://docs.woocommerce.com/wc-apidocs/source-function-wc_get_order_statuses.html#88-106