WordPress 5.1.1与多个内容块冲突

时间:2019-03-19 10:39:57

标签: php wordpress

当更新到wordpress 5.1.1时,我的网站生成了500个服务器错误。日志告诉我:

http://localhost:3000/home

因此,这似乎与不再受支持的插件(多个内容块)中的代码发生冲突。

新的wordpress版本中的相关代码为:

[19-Mar-2019 10:08:34 UTC] PHP Fatal error:  Cannot redeclare has_block() (previously declared in /home/rideands/public_html/wp-includes/blocks.php:81) in /home/rideands/public_html/wp-content/plugins/multiple-content-blocks/assets/inc/template-tags.php on line 67

在多内容块插件中与此冲突的代码是:

/**
 * Determine whether a $post or a string contains a specific block type.
 *
 * This test optimizes for performance rather than strict accuracy, detecting
 * the block type exists but not validating its structure. For strict accuracy,
 * you should use the block parser on post content.
 *
 * @since 5.0.0
 * @see parse_blocks()
 *
 * @param string                  $block_type Full Block type to look for.
 * @param int|string|WP_Post|null $post Optional. Post content, post ID, or post object. Defaults to global $post.
 * @return bool Whether the post content contains the specified block.
 */
function has_block( $block_type, $post = null ) {
if ( ! has_blocks( $post ) ) {
    return false;
}

if ( ! is_string( $post ) ) {
    $wp_post = get_post( $post );
    if ( $wp_post instanceof WP_Post ) {
        $post = $wp_post->post_content;
    }
}

return false !== strpos( $post, '<!-- wp:' . $block_type . ' ' );
}

有什么想法可以使我正确格式化多个内容块中的代码,以防止引发该服务器错误?

任何帮助将不胜感激,谢谢!

2 个答案:

答案 0 :(得分:1)

由于不再支持“多个内容块”,因此最好的方法是安装“高级自定义字段”,它的功能相同,但效果更好。如果这不是一种选择,则可以覆盖旧插件的代码,因为它可能永远不会更新,因此是安全的。 FTP到wp-content / plugins / multiple-content-blocks / assets / inc / template-tags.php,找到第62行:

function has_block( $name, $args = array() ) {

并替换为:

function has_the_block( $name, $args = array() ) {

该函数的名称并不重要,只要它不是has_block即可。重新加载您的网站,所有问题都应该得到解决。但是,现在认真点,更换那个插件。三年未更新。

答案 1 :(得分:0)

has_block函数是WordPress核心的一部分。插件无法重新定义此功能,因为它已经存在。该插件需要使用其他名称。

https://developer.wordpress.org/reference/functions/has_block/