使用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”那部分)。
四、简单的调试技巧
如果你不确定哪里错了,可以用这些方法快速定位:
- 打印查询参数:把
$args数组打印出来,看看参数是不是符合预期:echo '<pre>'; print_r($args); echo '</pre>'; - 检查查询是否有错误:查询执行后,打印错误信息:
var_dump($custom_query->errors); - 确认查询是否返回了文章:用
$custom_query->have_posts()来判断,如果返回false,说明没有匹配到任何文章,那要么是slug和分类项不匹配,要么是参数写错了。
你可以先从调试页面slug是否正确获取开始,再一步步检查查询参数,应该很快就能找到问题所在啦!
内容的提问来源于stack exchange,提问作者user6744245
相关产品推荐
相关产品推荐

