当更新到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 . ' ' );
}
有什么想法可以使我正确格式化多个内容块中的代码,以防止引发该服务器错误?
任何帮助将不胜感激,谢谢!
答案 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/