Physical Address
304 North Cardinal St.
Dorchester Center, MA 02124
Physical Address
304 North Cardinal St.
Dorchester Center, MA 02124
Contact Form 7 是一款非常多人使用的聯絡表單外掛。安裝後,預設會在所有頁面都載入外掛的 JavaScript 跟 CSS,影響整體效能,因此希望只在有表單的頁面才載入。
其實官方有提供正式解決方案,但是這個做法必須要自行建立頁面範本 (page template),對於無法直接存取目錄的人來說,可能會是個問題。因此找到了另外一種解決方式:偵測 Contact Form 7 的短代碼 (shortcode)。這種做法,可以直接透過 Code Snippets 來進行。
<?php /** * 運作邏輯:取得當前文章,搜尋其中是否包含 "contact-form-7" 的短代碼,如果沒有,則不載入 * Contact Form 7 的資源。 */ function hyc_cf7_scripts() { $load_scripts = false; if( is_singular() ) { $post = get_post(); if( has_shortcode($post->post_content, 'contact-form-7') ) { $load_scripts = true; } } if( ! $load_scripts ) { wp_dequeue_script( 'contact-form-7' ); wp_dequeue_script( 'google-recaptcha' ); wp_dequeue_style( 'contact-form-7' ); } } add_action( 'wp_enqueue_scripts', 'hyc_cf7_scripts', 99 );
這裡使用到了 wp_enqueue_scripts 這個勾點,在 WordPress 載入這些靜態資源時進行判斷。
首先,先建立變數 $load_scripts,用來判斷這個頁面是否有 Contact Form 7 的短代碼。因為一般頁面預設並不會有短代碼,因此預設值是 false。
接著,透過 get_post() 的方法,取得當前頁面,而如果當前頁面的內容 ($post -> post_content) 包含了 contact-form-7 這個短代碼,這時候 $load_scripts 就會回傳 true,表示內文中包含了 Contact Form 的短代碼。
如果判斷完以後,$load_scripts 仍然是 false,那麼透過 wp_dequeue_script 跟 wp_dequeue_style,將 Contact Form 7 的靜態資源移除。