WooCommerce:运行 某些代码仅在订单状态更改时出现一次
WooCommerce: Run some code only once on order status change
我想在特定订单状态更改时触发操作挂钩(或类似的东西)。从订单状态“处理中”到“已完成”的代码应该只 运行 一次。
这是 m 代码尝试:
function payment_complete( $order_id, $old_status, $new_status ){
if( $new_status == "completed" && $old_status == "processing") {
// $this->generate_order_file($order_id);
echo '<script>alert("Working now, but not once:()")</script>';
}
}
add_action( 'woocommerce_order_status_changed', 'payment_complete', 99, 3 );
但我的代码似乎 运行 多次。例如,我被困住了。任何帮助将不胜感激。
您可以使用以下方法将订单状态从“处理中”更改为“完成”,以便您的代码仅触发一次:
add_action( 'woocommerce_order_status_processing_to_completed', 'order_processing_to_completed', 100, 2 );
function order_processing_to_completed( $order_id, $order ) {
// Avoid hook to be triggered multiple times at once
if ( did_action( 'woocommerce_order_status_processing_to_completed' ) > 1 ) {
return;
}
// Check that this action hook has not been triggered before
if ( ! $order->get_meta( '_processing_to_completed' ) ) {
// Grab the action in WordPress error logs (for testing)
error_log('"processing_to_completed" Run once only.');
// Add a custom meta data to flag the action as triggered
$order->update_meta_data( '_processing_to_completed', 'yes' );
$order->save(); // Save
// Here add your code to be run once
}
}
注意: 你不应该使用 payment_complete
函数名,因为它可能被另一个插件使用。
代码进入活动子主题(或活动主题)的 functions.php 文件。已测试并有效。
if语句中的代码只会被触发一次。
我想在特定订单状态更改时触发操作挂钩(或类似的东西)。从订单状态“处理中”到“已完成”的代码应该只 运行 一次。
这是 m 代码尝试:
function payment_complete( $order_id, $old_status, $new_status ){
if( $new_status == "completed" && $old_status == "processing") {
// $this->generate_order_file($order_id);
echo '<script>alert("Working now, but not once:()")</script>';
}
}
add_action( 'woocommerce_order_status_changed', 'payment_complete', 99, 3 );
但我的代码似乎 运行 多次。例如,我被困住了。任何帮助将不胜感激。
您可以使用以下方法将订单状态从“处理中”更改为“完成”,以便您的代码仅触发一次:
add_action( 'woocommerce_order_status_processing_to_completed', 'order_processing_to_completed', 100, 2 );
function order_processing_to_completed( $order_id, $order ) {
// Avoid hook to be triggered multiple times at once
if ( did_action( 'woocommerce_order_status_processing_to_completed' ) > 1 ) {
return;
}
// Check that this action hook has not been triggered before
if ( ! $order->get_meta( '_processing_to_completed' ) ) {
// Grab the action in WordPress error logs (for testing)
error_log('"processing_to_completed" Run once only.');
// Add a custom meta data to flag the action as triggered
$order->update_meta_data( '_processing_to_completed', 'yes' );
$order->save(); // Save
// Here add your code to be run once
}
}
注意: 你不应该使用 payment_complete
函数名,因为它可能被另一个插件使用。
代码进入活动子主题(或活动主题)的 functions.php 文件。已测试并有效。
if语句中的代码只会被触发一次。