禁用 WordPress Embed 引用功能

最近整理博客的时候,发现很多链接突然自己变样了,如果链接的网站也是用的 WordPress 的话,那么博客直接就把标题、摘要、图片全都给贴出来了。刚开始还以为这是模板问题。后来发现不管什么模板都这样。查了下代码,发现引用部分的内容全都带着 wp-embed 的字样。那么这个应该是 WordPress 的内部功能。网上查了一下,原来从 WordPress 4.4 版本后。Wordpress 就开始可以自动引用文章了。不过对于一直用 HTML 文本编辑器的 Forece 来说。这个功能实在是没用。

如果嫌懒的话,那么直接安装插件 Disable Embeds ,如果想折腾代码的话,那么请看下边:

禁用 WordPress Embed 引用功能,将以下代码贴在主题 functions.php 中

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
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;
}

或者贴这个缩小版的也可以。

1
2
3
4
function my_deregister_scripts(){
wp_dequeue_script( 'wp-embed' );
}
add_action( 'wp_footer', 'my_deregister_scripts' );

如果还不管用的话,再加上

1
remove_filter( 'the_content', array( $GLOBALS['wp_embed'], 'autoembed' ), 8 );
1
2
3
4
remove_shortcode( 'embed' );
remove_filter( 'the_content', [ $GLOBALS['wp_embed'], 'autoembed' ], 8 );
remove_filter( 'the_content', [ $GLOBALS['wp_embed'], 'run_shortcode' ], 8 );
remove_action( 'edit_form_advanced', [ $GLOBALS['wp_embed'], 'maybe_run_ajax_cache' ] );