Change COD default order status to “On Hold” instead of “Processing” in Woocommerce

蓝咒 提交于 2019-11-27 07:31:51

问题


I need help with a problem-related to plugin "WooCommerce Pay for Payment" which counting some extra fee in shipping. Problem is, that this plugin sets automatically "processing" status in order which causes thanking email for payment (in case of local payment) and don't send email notification about a new order, so customer is confused (I didn't send any money and I received email "thanks for your payment").

I tried this solution: Set WooCommerce order status when order is created from processing to pending

But it only changes order status back to "on-hold" but sends email thank for payment anyway.

Only one thing that I need is to send to the customer in every new order email about a new order, nothing more (I would like to change status to "processing" manually).

Thank you for help, I have no idea how to resolve because I couldn't find PHP file causing a change of status in the plugin.

EDIT: Sorry to all. This was problem of COD in woocommerce plugin. Not Pay for payment as I mentioned. Woocommerce COD automatically set "processing" status.

I found solution for this on github:here

Its the first code.

Based on the answer to this question, this code worked fine for me:

function sv_wc_cod_order_status( $status ) {
    return 'on-hold';
}
add_filter( 'woocommerce_cod_process_payment_order_status', 'sv_wc_cod_order_status', 15 ); 

回答1:


The code that you found in Github is outdated, clumsy and complicated, since there is a dedicated filter hook now. You should better try this lightweight and effective code, that will set the default order status for "Cash on delivery" payment gateway (COD) to "On Hold":

add_filter( 'woocommerce_cod_process_payment_order_status', 'change_cod_payment_order_status', 10 );
function change_cod_payment_order_status( $order_status, $order ) {
    return 'on-hold';
}

Code goes in function.php file of your active child theme (active theme). Tested and works.



So the default order status set by the payment gateway is now "On Hold" instead of "Processing"




回答2:


two solution above are same except:

  • the solution by @LoicTheAztek has 2 arguments in the core function and have a '10' hook priority
  • the solution by @Jiří-Prek has an arguments in the core function and have a '15' hook priority

but for my WP5.1.1 and WC3.5.7

function change_cod_payment_order_status( $order_status, $order ) {
return 'on-hold';

}

generating an error

PHP Fatal error: Uncaught ArgumentCountError: Too few arguments to function change_cod_payment_order_status()

so I prefer use the code with only one argument in a main function



来源:https://stackoverflow.com/questions/53280800/change-cod-default-order-status-to-on-hold-instead-of-processing-in-woocomme

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!