着陆页插件报错:Call to a member function wp_rewrite_rules() on null
排查与修复PHP致命错误:Call to a member function wp_rewrite_rules() on null
先直接拆解错误根源:你看到的致命错误,本质是调用url_to_postid()时,WordPress的重写规则系统还没初始化。url_to_postid()依赖全局变量$wp_rewrite,而这个变量在plugins_loaded钩子触发时还未完成实例化,导致调用它的方法时出现null错误。
结合你的代码逻辑,给你具体的排查和修复建议:
1. 调整代码加载的钩子时机
你当前用plugins_loaded加载这些函数,这个钩子触发得太早——WordPress的重写规则要等到init钩子之后才会完全初始化。把代码移到更晚的钩子即可解决核心问题:
// 替换原来的plugins_loaded钩子,改用init钩子 add_action( 'init', function() { // 在这里定义你的lsx_landing_page_style_check和lsx_check_landing_page函数 }, 10 );
如果你的逻辑是针对定制器的,也可以用customize_init钩子,它会在定制器初始化时触发,此时WordPress核心组件(包括重写规则)已经准备完毕。
2. 给url_to_postid()加前置检查
如果必须保留当前钩子时机,可以在调用url_to_postid()前,先确认$wp_rewrite是否可用:
function lsx_check_landing_page(){ // ... 你的其他代码 ... if( false !== strpos( $url, '/go/' ) ){ // 先检查重写系统是否就绪 global $wp_rewrite; if ( isset( $wp_rewrite ) && is_object( $wp_rewrite ) ) { $landing_page = url_to_postid( $url ); if( !empty( $landing_page ) ){ return $landing_page; } return true; } else { // 重写未就绪时,直接返回false避免报错 return false; } } return false; }
3. 调试URL处理逻辑
有时候定制器或后台请求中,$_SERVER['REQUEST_URI']或wp_get_referer()可能返回异常值,导致url_to_postid()无法解析。可以临时加日志调试:
function lsx_check_landing_page(){ $url = $_SERVER['REQUEST_URI']; // 输出当前URL到错误日志,方便排查 error_log( '[Landing Page Check] Current URL: ' . $url ); // ... 你的其他代码 ... }
查看服务器错误日志,确认$url是否是预期的前端着陆页URL,避免传递后台定制器的URL给url_to_postid()。
4. 替代方案:不依赖重写规则的查询
如果需要在更早时机判断URL对应着陆页,可以直接用数据库查询替代url_to_postid(),比如假设你的着陆页是自定义文章类型:
function lsx_check_landing_page(){ // ... 你的其他代码 ... if( false !== strpos( $url, '/go/' ) ){ $path = trim( parse_url( $url, PHP_URL_PATH ), '/' ); $path_parts = explode( '/', $path ); // 提取/go/后的部分作为文章别名查询 if ( isset( $path_parts[1] ) && $path_parts[0] === 'go' ) { $query = new WP_Query( array( 'post_type' => 'landing-page', // 替换为你的着陆页文章类型 'post_name' => $path_parts[1], 'posts_per_page' => 1, 'fields' => 'ids' ) ); if ( $query->have_posts() ) { return $query->posts[0]; } return true; } } return false; }
这种方式绕过重写规则,适合在较早的钩子中执行。
内容的提问来源于stack exchange,提问作者viscosho
相关产品推荐
相关产品推荐

