WordPress: добавьте пользовательский add_filter для пользовательских функций

Я справляюсь со сценарием, где мне нужно фильтровать содержимое моей пользовательской функции. Моя функция используется для отправки электронных писем, но мне нужно отфильтровать ее так же, как и wp_mail hook.

Вот моя функция:

function koku_crm_send_sendgrid($sendgrid_api_key, $to, $subject, $text, $html) { $sendgrid = new \SendGrid($sendgrid_api_key); $mail = new KCSendGrid\Mail(); $from = new KCSendGrid\Email(get_bloginfo( 'name' ), get_bloginfo( 'admin_email' )); $mail->setFrom($from); $mail->setSubject(html_entity_decode($subject, ENT_QUOTES, 'UTF-8')); $content = new KCSendGrid\Content("text/plain", $text); $mail->addContent($content); $content = new KCSendGrid\Content("text/html", $html); $mail->addContent($content); $personalization = new KCSendGrid\Personalization(); $to = new KCSendGrid\Email(null, $to); $personalization->addTo($to); $mail->addPersonalization($personalization); $sendgrid->client->mail()->send()->post($mail); } 

Я хочу отфильтровать переменную «$ to» перед отправкой электронной почты. Нечто похожее на крючок фильтра wp_mail .

Я много искал, пожалуйста, помогите мне в этом отношении. Огромное спасибо заранее.

Solutions Collecting From Web of "WordPress: добавьте пользовательский add_filter для пользовательских функций"

Вы можете использовать функцию apply_filters :

 function koku_crm_send_sendgrid($sendgrid_api_key, $to, $subject, $text, $html) { $to = apply_filters( 'koku_crm_send_to', $to ); $sendgrid = new \SendGrid($sendgrid_api_key); $mail = new KCSendGrid\Mail(); $from = new KCSendGrid\Email(get_bloginfo( 'name' ), get_bloginfo( 'admin_email' )); $mail->setFrom($from); $mail->setSubject(html_entity_decode($subject, ENT_QUOTES, 'UTF-8')); $content = new KCSendGrid\Content("text/plain", $text); $mail->addContent($content); $content = new KCSendGrid\Content("text/html", $html); $mail->addContent($content); $personalization = new KCSendGrid\Personalization(); $to = new KCSendGrid\Email(null, $to); $personalization->addTo($to); $mail->addPersonalization($personalization); $sendgrid->client->mail()->send()->post($mail); } 

Первый аргумент apply_filters() – это имя фильтра. Это то, что вы будете использовать при вызове add_filter() . Второй аргумент – это значение, подлежащее фильтрации.

Теперь вы можете фильтровать $to так:

 function wpse_276933_send_to( $to ) { $to = 'new@example.com'; return $to; } add_filter( 'koku_crm_send_to', 'wpse_276933_send_to' ); 

Вы можете передать больше значений в функцию обратного вызова фильтра, добавив аргументы в apply_filters() . Они ничего не сделают сами по себе, но это означает, что они будут доступны при добавлении фильтра. Поэтому, если ваш фильтр был:

$to = apply_filters( 'koku_crm_send_to', $to, $subject, $text );

Вы можете получить доступ к $subject и $text в своей функции фильтра, включив аргументы в функцию обратного вызова и установив четвертый аргумент add_filter() в 3 , чтобы функция знала, чтобы принять 3 аргумента:

 function wpse_276933_send_to( $to, $subject, $text ) { if ( $subject === 'Subject One' ) { $to = 'new@example.com'; } return $to; } add_filter( 'koku_crm_send_to', 'wpse_276933_send_to', 10, 3 ); 

Подробнее в Справочнике плагинов: https://developer.wordpress.org/plugins/hooks/custom-hooks/