Deaktivieren Sie die WooCommerce-Bestell-E-Mail-Benachrichtigung für Bestellungen mit benutzerdefiniertem Status

Lesezeit: 4 Minuten

1646255947 489 Deaktivieren Sie die WooCommerce Bestell E Mail Benachrichtigung fur Bestellungen mit benutzerdefiniertem Status
BTB

Ich habe im Netz gesucht und nachgesehen WooCommerce-Dokumente für eine Lösung zum Deaktivieren der “Bestätigungs-E-Mail”, die an den Kunden gesendet wird, wenn er eine Bestellung in WooCoomerce aufgibt.

Ich möchte auch die E-Mail “Neue Bestellung” deaktivieren, die an den Administrator geht.

Aber nur wenn die Bestellung einen benutzerdefinierten Status “mystatus” hat, die einige Bestellungen erhalten, basierend auf dem, was die Kunden bestellen.

Ich habe versucht, es so hinzuzufügen, aber es hat nicht funktioniert:

remove_action( 'woocommerce_order_status_mystatus_notification', array($email_class->emails['WC_Email_New_Order'], 'trigger' ) );?>

Irgendein Rat?


So ändere ich den Bestellstatus für bestimmte Bestellungen:

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' );
  }
}

  • Die standardmäßigen WooCommerce-E-Mails können in WooCommerce >> Einstellungen >> E-Mails ein-/ausgeschaltet oder konfiguriert werden. Danach erfahren Sie auf SO, wie Sie WooCommerce-E-Mails manuell versenden. Das wäre meiner Meinung nach der beste Ansatz.

    – Herr Jo

    1. Juli 2021 um 13:43 Uhr

  • Danke, aber ich möchte die Standard-E-Mails beibehalten, nur wenn die Bestellung meinen benutzerdefinierten Bestellstatus hat, möchte ich ihn deaktivieren (und kann keine Optionen in den Einstellungen -> E-Mails sehen)

    – BTB

    1. Juli 2021 um 13:52 Uhr

  • Aber dieser Weg ist viel einfacher als der andere Weg … Deaktivieren Sie einfach die E-Mail, die Sie nur senden möchten, wenn Ihre Bestellung einen bestimmten Status hat, und senden Sie die E-Mail programmgesteuert. Das ist wirklich keine große Sache…

    – Herr Jo

    1. Juli 2021 um 13:59 Uhr

1646255947 121 Deaktivieren Sie die WooCommerce Bestell E Mail Benachrichtigung fur Bestellungen mit benutzerdefiniertem Status
7uc1f3r

Es ist nicht wirklich notwendig, Änderungen an den WooCommerce-Einstellungen vorzunehmen.

Für einen benutzerdefinierten Bestellstatus werden keine E-Mail-Benachrichtigungen gesendetes sei denn, Sie stellen diese wirksam zur Verfügung.

Es werden jedoch die Standard-E-Mail-Benachrichtigungen gesendet, da die woocommerce_thankyou Haken ist ausgeführt, nachdem die E-Mail-Benachrichtigungen gesendet wurden.

Verwenden Sie also die woocommerce_checkout_order_created Hook (der ausgeführt wird, bevor die E-Mail-Benachrichtigungen gesendet werden) gegenüber woocommerce_thankyou um den Bestellstatus zu ändern, und es werden sowieso keine E-Mails gesendet.

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 );

Hinweis: Wenn Sie E-Mails in einem anderen Fall deaktivieren möchtendu kannst den … benutzen woocommerce_email_recipient_{$email_id} Filter Composite Hook und mit der richtigen E-Mail-ID haben Sie die Möglichkeit, E-Mail-Benachrichtigungen zu deaktivieren.

Zum Beispiel:

// 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 );

  • Vielen Dank für eine sehr ausführliche Antwort. Das ist sehr sinnvoll (und funktioniert natürlich auch).

    – BTB

    5. Juli 2021 um 9:01 Uhr

Deaktivieren Sie die Mail unter WooCommerce >> Settings >> Emails Sie möchten nur senden, wenn Ihre Bestellung einen benutzerdefinierten Status hat.

Jetzt einfach absenden, falls Ihre Bestellung den richtigen Status hat:

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);
    }
}

Sie können einfach jede gewünschte WooCommerce-Mail von PHP aus senden.

  • Ah, jetzt habe ich verstanden, was du vorhin gemeint hast. Scheint eine gute Idee zu sein! Ich habe das versucht, nur das Teil ersetzt, damit die richtige E-Mail gesendet wird: WC_Email_Customer_Processing_Order. Aber das gab Fehler Uncaught Error: Class 'WC_Email_Customer_Processing_Order' not found in ... Irgendein Rat?

    – BTB

    1. Juli 2021 um 14:34 Uhr

  • Vielleicht müssen Sie die Klasse importieren. Was sagt deine IDE? Normalerweise sagt Ihnen Ihre IDE, ob eine Klasse importiert werden muss oder nicht.

    – Herr Jo

    1. Juli 2021 um 14:38 Uhr


916230cookie-checkDeaktivieren Sie die WooCommerce-Bestell-E-Mail-Benachrichtigung für Bestellungen mit benutzerdefiniertem Status

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy