我想在特定订单状态更改时触发动作挂钩(或类似操作)。从订单状态“处理中”到“完成”,该代码只能运行一次。
这是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语句中的代码将仅触发一次。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句