![](/img/trans.png)
[英]Avoid order completed notification for parent orders in WooCommerce Dokan
[英]Avoid repetitive emails notification on some auto completed orders
我在WooCommerce上使用了這段代碼的小巧之處, 從此答案到基於付款網關自動完成已付款的處理訂單:
/**
* AUTO COMPLETE PAID ORDERS IN WOOCOMMERCE
*/
add_action( 'woocommerce_thankyou', 'custom_woocommerce_auto_complete_paid_order', 10, 1 );
function custom_woocommerce_auto_complete_paid_order( $order_id ) {
if ( ! $order_id ) {
return;
}
$order = wc_get_order( $order_id );
// No updated status for orders delivered with Bank wire, Cash on delivery and Cheque payment methods.
if ( ( get_post_meta($order->id, '_payment_method', true) == 'bacs' ) || ( get_post_meta($order->id, '_payment_method', true) == 'cod' ) || ( get_post_meta($order->id, '_payment_method', true) == 'cheque' ) ) {
return;
}
// "completed" updated status for paid Orders with all others payment methods
else {
$order->update_status( 'completed' );
}
}
這基本上是完美的
主要通過SMS使用特殊的支付網關,該API橋接在“鱈魚”付款方法上,並且可以在“ woocommerce_thankyou”之后(前端前端)處理付款。 在這種情況下, ON HOLD狀態命令將隨后傳遞到PROCESSING狀態 。 為了使這些情況下的自動完成行為自動化,我使用此答案中的其他代碼來解決問題,並且可以正常工作:
function auto_update_orders_status_from_processing_to_completed(){
// Get all current "processing" customer orders
$processing_orders = wc_get_orders( $args = array(
'numberposts' => -1,
'post_status' => 'wc-processing',
) );
if(!empty($processing_orders))
foreach($processing_orders as $order)
$order->update_status( 'completed' );
}
add_action( 'init', 'auto_update_orders_status_from_processing_to_completed' );
問題:我收到有關新完成訂單的重復電子郵件通知 。
如何避免這種重復的電子郵件通知情況?
謝謝
更新 (2019)
添加了Woocommerce 3+的版本代碼-添加了Woocommerce版本兼容性。
為避免這種重復電子郵件通知的奇怪現象 ,可以在使用WordPress update_post_meta()
函數將訂單狀態更改為已完成時,為每個已處理訂單創建自定義元鍵/值。 然后,我們將在條件之前進行測試,是否針對每個已處理訂單使用get_post_meta()
函數存在此自定義元數據鍵/值。
因此,您的兩個代碼段現在是:
1) WOOCOMMERCE中的自動完成的已付款訂單 (2019更新)
對於woocommerce 3+:
add_action( 'woocommerce_payment_complete_order_status', 'wc_auto_complete_paid_order', 10, 3 );
function wc_auto_complete_paid_order( $status, $order_id, $order ) {
if ( ! $order->has_status('completed') && $order->get_meta('_order_processed') != 'yes') {
$order->update_meta_data('_order_processed', 'yes');
$status = 'completed';
}
return $status;
}
對於所有woocommerce版本(自2.5+版本以來的兼容性):
add_action( 'woocommerce_payment_complete_order_status', 'wc_auto_complete_paid_order', 10, 3 );
function wc_auto_complete_paid_order( $status, $order_id, $order = null ) {
// Getting the custom meta value regarding this autocomplete status process
$order_processed = get_post_meta( $order_id, '_order_processed', true );
// Getting the WC_Order object from the order ID
$order = wc_get_order( $order_id );
if ( ! $order->has_status( 'completed' ) && $order_processed != 'yes' ) {
$order = wc_get_order( $order_id );
// setting the custom meta data value to yes (order updated)
update_post_meta($order_id, '_order_processed', 'yes');
$order->update_status( 'completed' ); // Update order status to
}
return $status;
}
2) 掃描所有“處理中”的訂單 以自動完成 訂單 (增加了Woocommerce兼容性)
add_action( 'init', 'auto_update_orders_status_from_processing_to_completed' );
function auto_update_orders_status_from_processing_to_completed(){
if( version_compare( WC_VERSION, '3.0', '<' ) {
$args = array('numberposts' => -1, 'post_status' => 'wc-processing'); // Before WooCommerce version 3
} else {
$args = array('limit' => -1, 'status' => 'processing'); // For WooCommerce 3 and above
}
// Get all current "processing" customer orders
$processing_orders = (array) wc_get_orders( $args );
if( sizeof($processing_orders) > 0 ){
foreach($processing_orders as $order ) {
// Woocommerce compatibility
$order_id = method_exists( $order, 'get_id' ) ? $order->get_id() : $order->id;
// Checking if this custom field value is set in the order meta data
$order_processed = get_post_meta( $order_id, '_order_processed', true );
if (! $order->has_status( 'completed' ) && $order_processed != 'yes' ) {
// Setting (updating) custom meta value in the order metadata to avoid repetitions
update_post_meta( $order_id, '_order_processed', 'yes' );
$order->update_status( 'completed' ); // Updating order status
}
}
}
}
代碼進入您的活動子主題(或主題)的function.php文件中。 或在任何插件php文件中。
我已經測試了此代碼,它應該對您有用 (由於您特定的短信橋接付款方式 )
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.