You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WordPress中Phpunit测试functions.php函数时get_page_template_slug返回false如何解决

问题根因

你遇到的返回false的问题来自两个WordPress函数的特性:

  • is_page() 依赖全局主查询$wp_query的状态判断当前是否为页面请求,测试环境默认没有初始化对应页面的查询状态,因此返回false
  • get_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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 18:15:03