首页 > 解决方案 > Wordpress:调用未定义的函数 wp_embed_register_handler()

问题描述

我有一个仍在开发中的 Wordpress 网站。我一直在这个网站上工作到 2021 年 2 月,并且由于 COVID 危机而持有所有作品。到那时为止,网站正在运行。现在我已经恢复了我的工作,只是在浏览网站。但现在,网站抛出错误“致命错误:未捕获错误:调用未定义函数 wp_embed_register_handler()

我还跨越了该函数存在的文件“wp-includes/embed.php”文件,并且在调用它之前已经定义了函数。您可以看到附加的整个错误跟踪的屏幕截图。

在此处输入图像描述

我不是在所有页面上都收到此错误,而是在几乎所有页面上都收到此错误。即使我在过去 3-4 个月内没有在网站上碰过任何东西,我也无法理解为什么会出现此错误。当我最后一次工作时,它工作得很好。

有人可以帮忙吗?我在 Wordpress 方面不是很有经验,但有中级知识。

提前致谢

标签: wordpress

解决方案


看起来问题在于与 WordPress 文件的主题兼容性。我建议您更新主题和 WordPress 核心文件。

第二个选项是仅在不需要时禁用 Wp-Embed。通过将其放在主题的 function.php 中来使用此代码:

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;
}

推荐阅读