Отключение электронных писем о подписках Woocommerce (через php, а не через панель администратора)

Я пытаюсь отключить несколько писем о подписках на WC (чтобы они не отправлялись). Я знаю, что могу сделать это вручную в области настроек администратора, но я пытаюсь сделать это через PHP (в плагине). Причина этого заключается в том, что при перемещении с тестового сайта на действующий соответствующие файлы можно просто скопировать, и это хорошо, без каких-либо изменений ручных настроек.

В качестве примера - удаление нового заказа на продление, который отправляется администратору сайта.

add_action( 'woocommerce_email', 'SA_unhook_unneeded_emails' );
function SA_unhook_unneeded_emails( $email_class ) {
    //remove new_renewal_order email (sent to admin)
    remove_action( 'woocommerce_order_status_pending_to_processing_renewal_notification', array( $this, 'trigger' ) );
    remove_action( 'woocommerce_order_status_pending_to_completed_renewal_notification', array( $this, 'trigger' ) );
    remove_action( 'woocommerce_order_status_pending_to_on-hold_renewal_notification', array( $this, 'trigger' ) );
    remove_action( 'woocommerce_order_status_failed_to_processing_renewal_notification', array( $this, 'trigger' ) );
    remove_action( 'woocommerce_order_status_failed_to_completed_renewal_notification', array( $this, 'trigger' ) );
    remove_action( 'woocommerce_order_status_failed_to_on-hold_renewal_notification', array( $this, 'trigger' ) );
    //remove_action( 'woocommerce_order_status_completed_renewal_notification', array( $this, 'trigger' ) );

}

Раскомментирование последнего remove_action не имеет значения. Электронные письма все еще отправляются. Я попытался изменить woocommerce_email на wp_head, чтобы посмотреть, не изменилось ли что-нибудь, но ничего не изменилось.

Кажется, немного документации (по крайней мере, которую я могу найти) по крючкам подписок WC, поэтому я изо всех сил пытаюсь понять, что именно мне нужно сделать, чтобы это работало.

Любая помощь будет оценена.


person Josh    schedule 09.02.2019    source источник


Ответы (1)


Неважно, нашел - все, что мне нужно, это хороший ночной сон! Для тех, кто столкнется с этим позже, подробности приведены ниже.

Вам нужно использовать 'woocommerce_email_enabled_'.this->id фильтры. Идентификатор (this->id) можно найти в соответствующих файлах классов для этого типа электронной почты. например

  • Новый заказ (отправлен админу) находится в class-wc-email-new-order.php (папка woocommerce/includes) содержит $this->id = 'new_order';
  • Новый заказ на продление (отправлен администратору): new_renewal_order
  • Заказ на продление (отправка клиенту): customer_processing_renewal_order или customer_completed_renewal_order
//stop emails without using the admin dashboard to manually set enabled/disabled status
add_filter( 'woocommerce_email_enabled_new_order', 'SA_stopemails', 10, 2); //new order sent to admin
add_filter( 'woocommerce_email_enabled_customer_on_hold_order', 'SA_stopemails', 10, 2); //order on hold sent to customer
add_filter( 'woocommerce_email_enabled_customer_processing_order', 'SA_stopemails', 10, 2); //order in processing sent to customer
add_filter( 'woocommerce_email_enabled_new_renewal_order', 'SA_stopemails', 10, 2); //new renewal order sent to admin
add_filter( 'woocommerce_email_enabled_customer_processing_renewal_order', 'SA_stopemails', 10, 2); //renewal order processing sent to customer
add_filter( 'woocommerce_email_enabled_customer_completed_renewal_order', 'SA_stopemails', 10, 2); //renewal order completed sent to customer

function SA_stopemails( $active, $order ) {
    return false;
}
person Josh    schedule 11.02.2019