WordPress:为定制函数添加定制的Add_Filter

时间:2017-08-15 作者:Nobody

我正在处理需要过滤自定义函数内容的场景。我的功能用于发送电子邮件,但我需要像wp\\U 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 filter hook.

我已经搜索了很多,请在这方面帮助我。提前非常感谢您。

1 个回复
最合适的回答,由SO网友:Jacob Peattie 整理而成

您可以使用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 = \'[email protected]\';

  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 = \'[email protected]\';
  }

  return $to;
}
add_filter( \'koku_crm_send_to\', \'wpse_276933_send_to\', 10, 3 );
阅读插件手册中的更多内容:https://developer.wordpress.org/plugins/hooks/custom-hooks/

结束

相关推荐

将php动态变量传递给短码

我不确定我的问题是否有一个简单的解决方案。这个要求看起来很简单,但即使在我头破血流了6个小时后也找不到答案。我必须将变量从php函数传递到一个短代码,而这个短代码必须将这个变量传递到另一个短代码。Shortcode-1将打开一个弹出窗口,弹出窗口的内容由Shortcode-2创建,内容必须根据变量进行更改。我怎样才能做到这一点?我的模板中的代码。。 <a href=\"#\" class=\"open-popup-1\" variable= <?php getid(); ?>\">