为具有自定义状态的订单禁用 WooCommerce 订单电子邮件通知
Disable WooCommerce order email notification for orders with custom status
我已经在网上搜索并查看了 WooCommerce docs 的解决方案,以禁用在客户在 WooCoomerce 中下订单时发送给客户的“确认电子邮件”。
我还想禁用发给管理员的“新订单”邮件。
但仅当订单具有自定义状态“mystatus”时,某些订单会根据客户的订单获得。
试过这样添加,但没有成功:
remove_action( 'woocommerce_order_status_mystatus_notification', array($email_class->emails['WC_Email_New_Order'], 'trigger' ) );?>
有什么建议吗?
这是我更改特定订单的订单状态的方式:
add_action( 'woocommerce_thankyou','woocommerce_thankyou_change_order_status', 10, 1 );
function woocommerce_thankyou_change_order_status( $order_id ){
if( ! $order_id ) return;
$order = wc_get_order( $order_id );
$user_id = $order->get_user_id();
if( ($order->get_status() == 'processing' || $order->get_status() == 'pending' || $order->get_status() == 'on-hold' ) && dokan_is_user_seller( $user_id ) && is_user_logged_in()) {
$order->update_status( 'mystatus' );
}
}
在 WooCommerce >> Settings >> Emails
下禁用您希望仅在您的订单具有自定义状态时才发送的邮件。
现在发送它以防您的订单状态正确:
add_action( 'woocommerce_thankyou', 'woocommerce_thankyou_change_order_status', 10, 1 );
function woocommerce_thankyou_change_order_status( $order_id ) {
if ( ! $order_id ) {
return;
}
$order = wc_get_order( $order_id );
$user_id = $order->get_user_id();
if ( ( $order->get_status() == 'processing' || $order->get_status() == 'pending' || $order->get_status() == 'on-hold' ) && dokan_is_user_seller( $user_id ) && is_user_logged_in() ) {
$order->update_status( 'mystatus' );
$email_oc = new WC_Email_Customer_Completed_Order();
$email_oc->trigger($order_id);
}
}
您可以根据需要从 PHP 发送每封 WooCommerce 邮件。
无需对 WooCommerce 设置进行任何更改。
不会针对自定义订单状态发送电子邮件通知,除非您有效地提供此信息。
但是,会发送默认的电子邮件通知,因为 woocommerce_thankyou
挂钩是在电子邮件通知发送后 执行的。
所以使用 woocommerce_checkout_order_created
挂钩(即在发送电子邮件通知之前执行)对面 woocommerce_thankyou
来更改订单状态,无论如何都不会发送电子邮件。
function action_woocommerce_checkout_order_created( $order ) {
// Get user ID
$user_id = $order->get_user_id();
// Compare
if ( ( $order->get_status() == 'processing' || $order->get_status() == 'pending' || $order->get_status() == 'on-hold' ) && dokan_is_user_seller( $user_id ) && is_user_logged_in() ) {
// Update status
$order->update_status( 'mystatus' );
}
}
add_action( 'woocommerce_checkout_order_created', 'action_woocommerce_checkout_order_created', 10, 1 );
注意:如果您想在任何其他情况下禁用电子邮件,您可以使用woocommerce_email_recipient_{$email_id}
过滤器复合钩子并设置正确的电子邮件 ID,您有禁用电子邮件通知的选项。
例如:
// Admin - new order email notification
// Customer - on hold
// Customer - processing
// Customer - pending
function filter_woocommerce_email_recipient( $recipient, $order, $email ) {
if ( ! $order || ! is_a( $order, 'WC_Order' ) ) return $recipient;
// Has order status
if ( $order->has_status( 'your-order-status' ) ) {
$recipient = '';
}
return $recipient;
}
add_filter( 'woocommerce_email_recipient_new_order', 'filter_woocommerce_email_recipient', 10, 3 );
add_filter( 'woocommerce_email_recipient_customer_on_hold_order', 'filter_woocommerce_email_recipient', 10, 3 );
add_filter( 'woocommerce_email_recipient_customer_processing_order', 'filter_woocommerce_email_recipient', 10, 3 );
add_filter( 'woocommerce_email_recipient_customer_pending_order', 'filter_woocommerce_email_recipient', 10, 3 );
我已经在网上搜索并查看了 WooCommerce docs 的解决方案,以禁用在客户在 WooCoomerce 中下订单时发送给客户的“确认电子邮件”。
我还想禁用发给管理员的“新订单”邮件。
但仅当订单具有自定义状态“mystatus”时,某些订单会根据客户的订单获得。
试过这样添加,但没有成功:
remove_action( 'woocommerce_order_status_mystatus_notification', array($email_class->emails['WC_Email_New_Order'], 'trigger' ) );?>
有什么建议吗?
这是我更改特定订单的订单状态的方式:
add_action( 'woocommerce_thankyou','woocommerce_thankyou_change_order_status', 10, 1 );
function woocommerce_thankyou_change_order_status( $order_id ){
if( ! $order_id ) return;
$order = wc_get_order( $order_id );
$user_id = $order->get_user_id();
if( ($order->get_status() == 'processing' || $order->get_status() == 'pending' || $order->get_status() == 'on-hold' ) && dokan_is_user_seller( $user_id ) && is_user_logged_in()) {
$order->update_status( 'mystatus' );
}
}
在 WooCommerce >> Settings >> Emails
下禁用您希望仅在您的订单具有自定义状态时才发送的邮件。
现在发送它以防您的订单状态正确:
add_action( 'woocommerce_thankyou', 'woocommerce_thankyou_change_order_status', 10, 1 );
function woocommerce_thankyou_change_order_status( $order_id ) {
if ( ! $order_id ) {
return;
}
$order = wc_get_order( $order_id );
$user_id = $order->get_user_id();
if ( ( $order->get_status() == 'processing' || $order->get_status() == 'pending' || $order->get_status() == 'on-hold' ) && dokan_is_user_seller( $user_id ) && is_user_logged_in() ) {
$order->update_status( 'mystatus' );
$email_oc = new WC_Email_Customer_Completed_Order();
$email_oc->trigger($order_id);
}
}
您可以根据需要从 PHP 发送每封 WooCommerce 邮件。
无需对 WooCommerce 设置进行任何更改。
不会针对自定义订单状态发送电子邮件通知,除非您有效地提供此信息。
但是,会发送默认的电子邮件通知,因为 woocommerce_thankyou
挂钩是在电子邮件通知发送后 执行的。
所以使用 woocommerce_checkout_order_created
挂钩(即在发送电子邮件通知之前执行)对面 woocommerce_thankyou
来更改订单状态,无论如何都不会发送电子邮件。
function action_woocommerce_checkout_order_created( $order ) {
// Get user ID
$user_id = $order->get_user_id();
// Compare
if ( ( $order->get_status() == 'processing' || $order->get_status() == 'pending' || $order->get_status() == 'on-hold' ) && dokan_is_user_seller( $user_id ) && is_user_logged_in() ) {
// Update status
$order->update_status( 'mystatus' );
}
}
add_action( 'woocommerce_checkout_order_created', 'action_woocommerce_checkout_order_created', 10, 1 );
注意:如果您想在任何其他情况下禁用电子邮件,您可以使用woocommerce_email_recipient_{$email_id}
过滤器复合钩子并设置正确的电子邮件 ID,您有禁用电子邮件通知的选项。
例如:
// Admin - new order email notification
// Customer - on hold
// Customer - processing
// Customer - pending
function filter_woocommerce_email_recipient( $recipient, $order, $email ) {
if ( ! $order || ! is_a( $order, 'WC_Order' ) ) return $recipient;
// Has order status
if ( $order->has_status( 'your-order-status' ) ) {
$recipient = '';
}
return $recipient;
}
add_filter( 'woocommerce_email_recipient_new_order', 'filter_woocommerce_email_recipient', 10, 3 );
add_filter( 'woocommerce_email_recipient_customer_on_hold_order', 'filter_woocommerce_email_recipient', 10, 3 );
add_filter( 'woocommerce_email_recipient_customer_processing_order', 'filter_woocommerce_email_recipient', 10, 3 );
add_filter( 'woocommerce_email_recipient_customer_pending_order', 'filter_woocommerce_email_recipient', 10, 3 );