2017-08-15 143 views
0

我正在处理需要过滤自定义功能内容的场景。我的函数用于发送邮件,但我需要像wp_mail钩子那样过滤它。WordPress:为自定义功能添加自定义add_filter

这里是我的功能:

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); 

} 

我想发送电子邮件之前变量来过滤“以$”。类似于wp_mail filter hook的东西。

我有很多搜索,请在这方面帮助我。提前谢谢你。

+0

所以你想创建自己的过滤器/钩子,然后其他模块可以挂钩来改变邮件发送给谁?如果是这样,研究如何实现自定义挂钩... https://www.google.com/search?q=wordpress+create+own+filters – CBroe

+0

您的意思是apply_filters();函数https://developer.wordpress.org/reference/functions/apply_filters/ –

+0

嗨@ Mo'menMohamed,我想创建类似[wp_mail filter hook](https://codex.wordpress.org/Plugin_API/Filter_Reference/ wp_mail) –

回答

1

我认为你需要使用apply_filters($tag, $value)将'value'参数传递给每个函数'hooked'(使用add_filter)到指定的过滤器'tag'中。每个函数对该值执行一些处理,并返回一个修改后的值以传递给序列中的下一个函数。

现在让我们看一下Customizr主题中的一个简单示例。让我们来更改链接的URL标识:

// Change url that is linked from logo 
add_filter('tc_logo_link_url', 'change_site_main_link'); 
function change_site_main_link() { 
    return 'http://example.com'; 
} 

里面的Customizr核心代码,在显示的标志(类头-header_main.php)功能,Customizr有:

apply_filters(‘tc_logo_link_url’, esc_url(home_url(‘/’))) 

这是我们的add_filter()挂钩的地方。 esc_url()函数消除了URL中的无效字符等,home_url()函数检索网站的主页URL。所以没有任何过滤,'tc_logo_link_url'过滤器返回主页的地址。

在这个例子中,我们甚至没有注意到传入的参数(home url),因为我们知道我们只是要完全覆盖它。

记住:当您使用过滤器时,您必须始终返回一些内容。