Новый заказ получателя электронной почты заменяется в Woocommerce

Я пытаюсь изменить адрес электронной почты администратора в зависимости от языка сайта, используя следующий код:

if ( !function_exists('my_email_heading_customisation_function_ent') ) { 

  function my_email_heading_customisation_function_ent( $recipient, $order  ) 
  {

    global $woocommerce;


    $page = $_GET['page'] = isset( $_GET['page'] ) ? $_GET['page'] : '';
    if ( 'wc-settings' === $page ) {
      return $recipient; 
    }

    // just in case
    if ( ! $order instanceof WC_Order ) {
      return $recipient; 
    }


    $recipient = "some@email.cz";

    return $recipient;

  }

  add_filter('woocommerce_email_recipient_new_order', 'my_email_heading_customisation_function_ent', 10, 2);

}

Но это не работает.

Есть идеи как решить это?

Там много тем, а некоторые действительно слишком старые. Я проверил документацию, и нет никаких упоминаний о каких-либо изменениях, связанных с этим хуком. Я тянул волосы за это.

2 ответа

Хорошо, спасибо за вашу помощь. Оказалось, что фильтр работает, проблема была вызвана интеграцией HYYAN Woocommerce Polylang. Я собираюсь решить это с автором плагина...

Йосиф

Этот хук находится в исходном коде WC_Emailget_recipient() метод, и вам действительно нужно упростить ваш код. Попробуйте следующее (протестировано и работает на Woocommerce 3.4.4):

add_filter('woocommerce_email_recipient_new_order', 'change_new_order_email_recipient', 10, 2);
function change_new_order_email_recipient( $recipient, $order ){
    ## If $order is used in the code, uncomment the line below
    // if ( ! is_a( $order, 'WC_Order' ) ) return $recipient; // (Optional)

    $recipient = "somename.email.com";

    return $recipient;
}

Код помещается в файл function.php вашей активной дочерней темы (или активной темы).


Вы также можете проверить, правильно ли настроен этот получатель, используя WC_Emailget_recipient() метод так:

// Get all Woocommerce email objects
$emails = WC()->mailer()->get_emails();

// Display the recipient for New Order email notification
echo $emails['WC_Email_New_Order']->get_recipient();

Он отобразит нового получателя, который установлен в вашей функции.

Другие вопросы по тегам