网站出现Cannot redeclare get_page_by_title()致命错误求助
解决WordPress致命错误:Cannot redeclare get_page_by_title()
问题分析
该错误是因为get_page_by_title()函数在wp-includes/post.php和wp-includes/deprecated.php中被重复定义。正常情况下WordPress核心文件会通过条件判断避免这类冲突,出现问题大概率是核心文件被篡改、版本升级不完整,或是第三方代码干扰导致的。
解决方案
方案1:重新覆盖WordPress核心文件(推荐)
手动修改核心文件并非长久之计,最稳妥的方式是恢复官方原版核心文件:
- 下载与当前网站版本一致的WordPress压缩包(可在后台「仪表盘-更新」查看版本)
- 解压压缩包,删除其中的
wp-content文件夹和wp-config.php文件 - 将剩余的
wp-includes和wp-admin文件夹上传到服务器,覆盖网站根目录下的同名文件夹 - 刷新网站即可修复错误
方案2:临时修复deprecated.php文件
若暂时无法覆盖核心文件,可修改wp-includes/deprecated.php中的函数定义,添加函数存在性判断:
打开deprecated.php找到第4560行的get_page_by_title()函数,修改为:
if ( ! function_exists( 'get_page_by_title' ) ) { function get_page_by_title( $page_title, $output = OBJECT, $post_type = 'page' ) { _deprecated_function( __FUNCTION__, '6.2.0', 'WP_Query' ); global $wpdb; if ( is_array( $post_type ) ) { $post_type = esc_sql( $post_type ); $post_type_in_string = "'" . implode( "','", $post_type ) . "'"; $sql = $wpdb->prepare( " SELECT ID FROM $wpdb->posts WHERE post_title = %s AND post_type IN ($post_type_in_string) ", $page_title ); } else { $sql = $wpdb->prepare( " SELECT ID FROM $wpdb->posts WHERE post_title = %s AND post_type = %s ", $page_title, $post_type ); } $page = $wpdb->get_var( $sql ); if ( $page ) { return get_post( $page, $output ); } return null; } }
通过function_exists()判断,只有当post.php中的函数未被声明时,才会加载deprecated.php里的版本,彻底避免重复定义冲突。
你之前修改无效的原因
直接在deprecated.php中include ('post.php')会导致post.php被重复加载,反而引发更多重复声明错误;同时修改后的函数缺少必要参数,调用时会出现参数不匹配的新问题。
内容的提问来源于stack exchange,提问作者Jasmyin Yeap
相关产品推荐
相关产品推荐

