禁用WordPress的oEmbed、Embed与Post Embed功能

2020年07月12日 wordpress 55点热度 0人点赞 0条评论

今天在给客户做网站建设的时候细心的发现WordPress主题最底下多出了一个wp-embed.min.js的东西,这个东西是wordpress更新到4.4版本后就多了oEmbed、Embed、Post Embed这功能,一般我们都用不上这个功能(传说中这个东西在国外比较香),所以今天长沙网站建设就教您怎么禁止WordPress的oEmbed、Embed与Post Embed功能。

禁用WordPress的embed

知已知彼

在禁用WordPress的Embed 功能之前,我们需要知道控制该功能的类文件、CSS 文件及 JS 文件有哪些,长沙网站建设在通过不断的查找下,发现如下文件与功能相关:

wp-include 文件夹下的:class-oembed.php、class-wp-embed.php、class-wp-oembed-controller.php。

wp-include/css 文件夹下的:wp-embed-template-ie.css、wp-embed-template-ie.min.css、wp-embed-template.css、wp-embed-template.min.css。

wp-include/js 文件夹下的:wp-embed-template.js、wp-embed-template.min.js、wp-embed.js、wp-embed.min.js。

CSS 与 JS 文件自是不必多说,主要是实现一些效果及前端美化的。禁用 Embed 功能一方面是希望减少这类静态资源的加载,另一方面是因为目前支持 Embed 的网站大部分是国外的,由于国内环境以及国外线路的问题一些网站可能无法正常加载或者加载速度慢,这也就使得我们无法很好地使用这个功能了。主要还是说一下三个 PHP 文件。

class-oembed.php :实现链接卡片式嵌入的核心文件,基本上是定义那些网址可以实现嵌入式卡片功能的,WordPress 的 Embed 功能主要是由该文件驱动,WordPress 2.9 版本开始引入,WordPress 3.5 版本之前需要后台开启,之后默认隐藏自动开启。

class-wp-embed.php :实现 WordPress 链接卡片式嵌入的类文件, 调用 class-oembed.php,不过由于支持的网站大部分是国外的,国内用起来会影响网站速度,WordPress 2.9 版本开始引入该文件。

class-wp-oembed-controller.php :WordPress 4.4 版本新发布的功能,让你可以在任意 WordPress 站点都可以用嵌入的方式插入 WordPress 文章。

怎么禁用

WordPress Embed功能的大致原理应该就是上面的这些,不过这也只是长沙网站建设个人的意见,可能存在错误,如果有错误的话希望各位大神能够指正。大致了解了原理之后,我们下面就开始着手禁用WordPress Embed这个功能,那么怎么禁用呢?长沙网站建设发现有两个办法可以禁用WordPress Embed。禁用办法如下(两种方法二选一即可):

第1种禁用方法:可以直播在 WordPress 官方插件库中搜索插件 Disable Embeds禁用,对于没有网站建设这方面的专业知识的来说,用这种方法比较简单,安装插件后简单的配置一下就可以禁用了。

第2种禁用方法:使用过WordPress的朋友都知道,插件安装得太多的了,对于WordPress运行速度还是有一点影响的,所以我产也可以使用代码禁用这个功能,使用代码禁用的话代码量稍微有点多,代码如下:

/**
 * Disable embeds
 */
if (!function_exists('disable_embeds_init')) {
    function disable_embeds_init()
    {
        global $wp;
        $wp->public_query_vars = array_diff($wp->public_query_vars, array('embed'));
        remove_action('rest_api_init', 'wp_oembed_register_route');
        add_filter('embed_oembed_discover', '__return_false');
        remove_filter('oembed_dataparse', 'wp_filter_oembed_result', 10);
        remove_action('wp_head', 'wp_oembed_add_discovery_links');
        remove_action('wp_head', 'wp_oembed_add_host_js');
        add_filter('tiny_mce_plugins', 'disable_embeds_tiny_mce_plugin');
        add_filter('rewrite_rules_array', 'disable_embeds_rewrites');
    }

    add_action('init', 'disable_embeds_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_remove_rewrite_rules()
    {
        add_filter('rewrite_rules_array', 'disable_embeds_rewrites');
        flush_rewrite_rules();
    }

    register_activation_hook(__FILE__, 'disable_embeds_remove_rewrite_rules');

    function disable_embeds_flush_rewrite_rules()
    {
        remove_filter('rewrite_rules_array', 'disable_embeds_rewrites');
        flush_rewrite_rules();
    }

    register_deactivation_hook(__FILE__, 'disable_embeds_flush_rewrite_rules');
}

复制上面的代码,放到主题的functions.php文件中,即可禁止WordPress的oEmbed、Embed与Post Embed功能了。这篇关于WordPress的教程暂时就写到这里吧,如果您有更多的关于WordPress的优化和主题制作的建议也欢迎给小编留言,如果有觉得教程有问题也欢迎您的指正。

Kratos

保持饥渴的专注,追求最佳的品质

文章评论