Электронная почта WooCommerce не отправляется через пользовательский шаблон страницы WordPress за пределами WooCommerce - PullRequest
0 голосов
/ 25 ноября 2018

Я создал новую страницу в WordPress и установил пользовательский шаблон в качестве шаблона для новой страницы.

В моем шаблоне я делаю некоторые вещи, такие как показ содержимого HTML.После того, как все заработало, я решил добавить do_action в свой пользовательский шаблон, чтобы отправить электронное письмо через почтовый клиент / класс WooCommerce.

Итак, я установил новый класс электронной почты и создал в этом классе настраиваемый триггер, который запускает отправку электронной почты:

// Triggers for this email.
add_action( 'trigger_rated_email', array( $this, 'trigger' ), 10, 10 );

/**
     * Trigger the sending of this email.
     *
     * @param int $order_id The order ID.
     * @param WC_Order|false $order Order object.
     */
    public function trigger( $order_id, $order = false ) {
        $this->setup_locale();

        if ( $order_id && ! is_a( $order, 'WC_Order' ) ) {
            $order = wc_get_order( $order_id );
        }

        if ( is_a( $order, 'WC_Order' ) ) {
            $developer_id = get_post_meta( $order_id, 'developer_id', true );
            $developer    = get_userdata( $developer_id );

            $this->object                         = $order;
            $this->recipient                      = $developer->user_email;
            $this->placeholders['{order_date}']   = wc_format_datetime( $this->object->get_date_created() );
            $this->placeholders['{order_number}'] = $this->object->get_order_number();
        }

        if ( $this->is_enabled() && $this->get_recipient() ) {
            $this->send( $this->get_recipient(), $this->get_subject(), $this->get_content(), $this->get_headers(), $this->get_attachments() );
        }

        $this->restore_locale();
    }

Этот add_action вызывает метод trigger() вкласс электронной почты, который отправляет электронную почту.Чтобы инициировать отправку, я сделал это в своем шаблонном PHP-файле:

do_action( 'trigger_rated_email', $order_id );

После сохранения я загрузил его на свой сервер и вызвал страницу, но на мою учетную запись электронной почты не было отправлено письмо,

Итак, я сделал много проверок, чтобы выяснить, есть ли проблема в моем классе электронной почты:

  1. Инициировал письмо с другой страницы (не пользовательский шаблон) ->электронное письмо отправлено
  2. Проверено, есть ли ошибка в моем debug.log -> нет ошибки

Так в чем проблема?Я думаю, что в пользовательском шаблоне должна быть проблема, поэтому я сначала подумал, что do_action не вызывается правильно, потому что он не знает add_action из моего класса.

1 Ответ

0 голосов
/ 25 ноября 2018

После долгих часов и помощи хорошего друга мы нашли проблему.Дело в том, что если вы хотите отправить электронное письмо со страницы, отличной от WooCommerce, вам необходимо сначала инициализировать почтовую программу WooCommerce.

Так что для всех, кто хочет отправлять электронные письма со страницы, не относящейся к WooCommerce, сделайте это здесь:

WC()->mailer();
do_action( 'trigger_your_custom_email', $order_id );

В своем классе электронной почты WooCommerce сделайте это здесь:

add_action( 'trigger_your_custom_email', array( $this, 'trigger' ), 10, 10 );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...