禁用WordPress嵌入功能以提升WordPress效能

如何禁用WordPress嵌入功能

在Web效能方面,任何優化都不會太小。隨著時間的推移,許多這些小技巧和優化可以開始減少相當多的整體載入時間。在此前,我們分享瞭如何在WordPress中禁用表情符號。今天我們想與您分享如何在WordPress中禁用嵌入。

當他們釋出WordPress 4.4時,他們將oEmbed功能合併到核心中。您之前可能已經看到或使用過它。這允許使用者只需貼上URL即可在其網站上嵌入YouTube視訊、推文和許多其他資源,WordPress會自動將其轉換為嵌入內容,並在視覺化編輯器中提供實時預覽。例如,我們從Twitter貼上了這個URL:https://twitter.com/kinsta/status/760489262127120385,它被轉換成你在下面看到的。您可以檢視官方支援的嵌入型別列表。

嵌入Tweet推文

嵌入Tweet推文

WordPress長期以來一直是oEmbed消費者,但隨著更新,WordPress 本身成為oEmbed提供者。此功能對很多人都很有用,您可能希望保持啟用狀態。但是,這意味著它現在還會在您的WordPress站點上生成一個額外的HTTP請求來載入wp-embed.min.js檔案。這會載入到每個頁面上。雖然這個檔案只有1.7KB,但這些東西會隨著時間的推移而增加。請求本身有時比內容下載大小更重要。

wp-embed.min.js

wp-embed.min.js

在WordPress中禁用嵌入

有幾種不同的方法可以在WordPress中禁用嵌入。您可以使用免費外掛、程式碼或內聯縮小的JS來實現。

1. 使用外掛禁用WordPress嵌入

禁用嵌入的第一種方法是簡單地使用一個名為Disable Embeds的免費外掛,該外掛由Pascal Birchler開發,  他實際上是WordPress的核心貢獻者之一。

Disable embeds外掛

Disable embeds外掛

這個外掛超級輕量級​​,準確地說只有3KB。在撰寫本文時,它目前有超過20,000 次活躍安裝。您可以從WordPress外掛庫下載它 ,也可以在WordPress儀表盤中的“外掛-安裝外掛”下搜尋它。無需配置,只需安裝、啟用,額外的JavaScript檔案就會消失。具有以下特點:

  • 防止其他人嵌入您的網站。
  • 防止您嵌入其他未列入白名單的網站。
  • 禁止在您的WordPress網站上載入JavaScript檔案。

您仍然可以使用YouTube和Twitter的嵌入iframe指令碼嵌入內容。您還可以使用像perfmatters這樣的高階外掛,它允許您禁用嵌入以及對WordPress網站的其他優化。

使用perfmatters外掛禁用嵌入

使用perfmatters外掛禁用嵌入

2. 使用程式碼禁用WordPress嵌入

如果您不想安裝其他外掛,您也可以使用程式碼禁用嵌入。首先建立網站備份,然後,將以下內容新增到您的主題的functions.php檔案中。注意:程式碼來自上面的Disable Embeds外掛。

重要的!如果操作不當,編輯WordPress主題的原始碼可能會破壞您的網站。也就是為什麼要先備份後改程式碼!

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
function disable_embeds_code_init() {
// Remove the REST API endpoint.
remove_action( 'rest_api_init', 'wp_oembed_register_route' );
// Turn off oEmbed auto discovery.
add_filter( 'embed_oembed_discover', '__return_false' );
// Don't filter oEmbed results.
remove_filter( 'oembed_dataparse', 'wp_filter_oembed_result', 10 );
// Remove oEmbed discovery links.
remove_action( 'wp_head', 'wp_oembed_add_discovery_links' );
// Remove oEmbed-specific JavaScript from the front-end and back-end.
remove_action( 'wp_head', 'wp_oembed_add_host_js' );
add_filter( 'tiny_mce_plugins', 'disable_embeds_tiny_mce_plugin' );
// Remove all embeds rewrite rules.
add_filter( 'rewrite_rules_array', 'disable_embeds_rewrites' );
// Remove filter of the oEmbed result before any HTTP requests are made.
remove_filter( 'pre_oembed_result', 'wp_filter_pre_oembed_result', 10 );
}
add_action( 'init', 'disable_embeds_code_init', 9999 );
function disable_embeds_tiny_mce_plugin($plugins) {
return array_diff($plugins, array('wpembed'));
}
function disable_embeds_rewrites($rules) {
foreach($rules as $rule => $rewrite) {
if(false !== strpos($rewrite, 'embed=true')) {
unset($rules[$rule]);
}
}
return $rules;
}
function disable_embeds_code_init() { // Remove the REST API endpoint. remove_action( 'rest_api_init', 'wp_oembed_register_route' ); // Turn off oEmbed auto discovery. add_filter( 'embed_oembed_discover', '__return_false' ); // Don't filter oEmbed results. remove_filter( 'oembed_dataparse', 'wp_filter_oembed_result', 10 ); // Remove oEmbed discovery links. remove_action( 'wp_head', 'wp_oembed_add_discovery_links' ); // Remove oEmbed-specific JavaScript from the front-end and back-end. remove_action( 'wp_head', 'wp_oembed_add_host_js' ); add_filter( 'tiny_mce_plugins', 'disable_embeds_tiny_mce_plugin' ); // Remove all embeds rewrite rules. add_filter( 'rewrite_rules_array', 'disable_embeds_rewrites' ); // Remove filter of the oEmbed result before any HTTP requests are made. remove_filter( 'pre_oembed_result', 'wp_filter_pre_oembed_result', 10 ); } add_action( 'init', 'disable_embeds_code_init', 9999 ); function disable_embeds_tiny_mce_plugin($plugins) { return array_diff($plugins, array('wpembed')); } function disable_embeds_rewrites($rules) { foreach($rules as $rule => $rewrite) { if(false !== strpos($rewrite, 'embed=true')) { unset($rules[$rule]); } } return $rules; }
function disable_embeds_code_init() {

 // Remove the REST API endpoint.
 remove_action( 'rest_api_init', 'wp_oembed_register_route' );

 // Turn off oEmbed auto discovery.
 add_filter( 'embed_oembed_discover', '__return_false' );

 // Don't filter oEmbed results.
 remove_filter( 'oembed_dataparse', 'wp_filter_oembed_result', 10 );

 // Remove oEmbed discovery links.
 remove_action( 'wp_head', 'wp_oembed_add_discovery_links' );

 // Remove oEmbed-specific JavaScript from the front-end and back-end.
 remove_action( 'wp_head', 'wp_oembed_add_host_js' );
 add_filter( 'tiny_mce_plugins', 'disable_embeds_tiny_mce_plugin' );

 // Remove all embeds rewrite rules.
 add_filter( 'rewrite_rules_array', 'disable_embeds_rewrites' );

 // Remove filter of the oEmbed result before any HTTP requests are made.
 remove_filter( 'pre_oembed_result', 'wp_filter_pre_oembed_result', 10 );
}

add_action( 'init', 'disable_embeds_code_init', 9999 );

function disable_embeds_tiny_mce_plugin($plugins) {
    return array_diff($plugins, array('wpembed'));
}

function disable_embeds_rewrites($rules) {
    foreach($rules as $rule => $rewrite) {
        if(false !== strpos($rewrite, 'embed=true')) {
            unset($rules[$rule]);
        }
    }
    return $rules;
}

或者您也可以使用wp_dequeue_script函式。

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
function my_deregister_scripts(){
wp_dequeue_script( 'wp-embed' );
}
add_action( 'wp_footer', 'my_deregister_scripts' );
function my_deregister_scripts(){ wp_dequeue_script( 'wp-embed' ); } add_action( 'wp_footer', 'my_deregister_scripts' );
function my_deregister_scripts(){
 wp_dequeue_script( 'wp-embed' );
}
add_action( 'wp_footer', 'my_deregister_scripts' );

3. 內聯縮小的JS

第三種選擇是獲取wp-embed.min.js檔案的內容並將其嵌入內聯。這應該只在小檔案或不涉及太多程式碼的情況下完成。如果您只是想擺脫HTTP請求,但仍保留對嵌入的支援,那就是這種情況。

評論留言