2017-08-15 197 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),因爲我們知道我們只是要完全覆蓋它。

記住:當您使用過濾器時,您必須始終返回一些內容。