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

使用page slug作为taxonomy调用custom posts列表时遇PHP问题

解决自定义文章调用时页面slug作为分类法失效的问题

嘿,我来帮你捋捋这个问题!你提到有两种写法能成功把页面slug用作分类法来调用自定义文章列表,但第三种写法却不行,页面显示“Test not working.3”,咱们一步步拆解可能的原因,帮你定位问题:

一、先排查变量获取是否正确

第三种写法里,你用来获取页面slug的方式可能出了问题。比如:

  • 是不是错误使用了变量?比如应该用get_post_field('post_name', get_the_ID())来获取当前页面的slug,却写成了其他不正确的方式?
  • 你可以先在代码里加一句调试代码,确认拿到的slug值是否正确:
    $page_slug = get_post_field('post_name', get_the_ID());
    echo "当前页面slug:" . $page_slug; // 看看输出是不是你预期的december-2017这类值
    

如果这里输出的不是正确的slug,那后续的分类法查询肯定没法正常工作。

二、检查WP_Query的分类法参数格式

调用自定义文章时,tax_query的参数格式要求很严格,写错一点就会失效。正确的格式应该是这样的:

$args = array(
  'post_type' => '你的自定义文章类型名称', // 比如'event'或者'news'
  'tax_query' => array(
    array(
      'taxonomy' => '你的分类法名称', // 比如'month'或者'category'
      'field'    => 'slug', // 这里指定用slug来匹配分类法项
      'terms'    => $page_slug, // 传入页面slug作为匹配值
    ),
  ),
);
$custom_query = new WP_Query($args);

你可以对比一下第三种写法里的tax_query:

  • 是不是少了嵌套的数组?比如直接写'tax_query' => array('taxonomy' => ...)而不是嵌套一层数组?
  • 是不是field的值写错了?比如写成了'name'而不是'slug'?
  • 是不是分类法名称或者自定义文章类型名称拼写错误?比如把'monthly_posts'写成了'month_post'?

三、排查变量作用域或条件判断问题

如果你的代码是写在函数里,那可能存在变量作用域的问题:

  • 比如在函数外面定义了$page_slug,但函数内部没有用global $page_slug来声明,导致函数里拿不到这个变量的值。
    另外,也可能是条件判断逻辑出错:
  • 比如你加了if(is_page())这类判断,但判断条件写得不对,导致代码没有走到正确的查询分支,反而执行了错误提示的代码(也就是“Test not working.3”那部分)。

四、简单的调试技巧

如果你不确定哪里错了,可以用这些方法快速定位:

  1. 打印查询参数:把$args数组打印出来,看看参数是不是符合预期:
    echo '<pre>';
    print_r($args);
    echo '</pre>';
    
  2. 检查查询是否有错误:查询执行后,打印错误信息:
    var_dump($custom_query->errors);
    
  3. 确认查询是否返回了文章:用$custom_query->have_posts()来判断,如果返回false,说明没有匹配到任何文章,那要么是slug和分类项不匹配,要么是参数写错了。

你可以先从调试页面slug是否正确获取开始,再一步步检查查询参数,应该很快就能找到问题所在啦!

内容的提问来源于stack exchange,提问作者user6744245

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 10:35:57