WordPress中Phpunit测试functions.php函数时get_page_template_slug返回false如何解决
问题根因
你遇到的返回false的问题来自两个WordPress函数的特性:
is_page()依赖全局主查询$wp_query的状态判断当前是否为页面请求,测试环境默认没有初始化对应页面的查询状态,因此返回falseget_page_template_slug()不传参数时默认读取全局$post对象对应的页面模板元字段,你没有将测试创建的页面设置为全局当前文章,因此返回false
解决方法
使用WP_UnitTestCase内置的$this->go_to()方法初始化全局请求状态,修正后的测试代码如下:
public function test_my_scripts(){ // 创建已发布的测试页面 $page_id = $this->factory->post->create( array( 'post_type' => 'page', 'post_status' => 'publish' ) ); // 绑定页面模板 add_post_meta( $page_id , '_wp_page_template', 'page-script.php' ); // 核心:将当前测试环境的请求指向该测试页面,自动初始化全局$wp_query、$post等变量 $this->go_to( get_permalink( $page_id ) ); // 调用业务函数即可进入if判断 my_scripts(); }
验证说明
调用my_scripts()前可以手动验证状态是否符合预期:
var_dump(is_page()); // 输出bool(true) var_dump(get_page_template_slug()); // 输出string(15) "page-script.php"
内容的提问来源于stack exchange,提问作者Carl Rguz
相关产品推荐
相关产品推荐

