WordPress自定义文章类型按子分类查询无结果的问题求助
WordPress自定义文章类型按子分类查询无结果的问题求助
兄弟,我一眼就瞅出你代码里的问题了!你这个查询无结果的核心原因是WP_Query参数里的cat写法犯了PHP字符串拼接的低级错误,咱们一步步捋清楚:
问题根源
看你get_geo_services函数里的$args数组:
$args = array( 'post_type' => 'geo_service', 'cat' => '.$cat_id.', // 这里是坑! 'post_status' => 'publish', 'posts_per_page' => 20, 'orderby' => 'title', 'order' => 'ASC');
你把变量$cat_id用字符串拼接的方式写在了单引号里,这会导致WP_Query接收到的分类ID是字符串".$cat_id.",而不是实际的分类ID数值,自然查不到对应文章。
修正方案
把cat参数改成直接传递变量就行:
$args = array( 'post_type' => 'geo_service', 'cat' => $cat_id, // 直接用变量,不需要多余的引号和拼接符 'post_status' => 'publish', 'posts_per_page' => 20, 'orderby' => 'title', 'order' => 'ASC');
额外提醒(关于“每次只返回3篇”的问题)
你说去掉cat参数后每次只返回3篇,这大概率是WordPress后台设置→阅读里,把“博客页面最多显示多少篇文章”设成了3。虽然你写了posts_per_page => 20,但全局设置可能会覆盖这个值,先解决分类查询的问题,这个应该也会跟着正常起来。
另外还有个小细节:如果你的自定义文章类型geo_service绑定的是自定义分类法(不是WordPress默认的“分类”),那不能用cat参数,得用tax_query来查询,示例如下:
$args = array( 'post_type' => 'geo_service', 'post_status' => 'publish', 'posts_per_page' => 20, 'orderby' => 'title', 'order' => 'ASC', 'tax_query' => array( array( 'taxonomy' => '你的自定义分类法名称', // 比如你注册的是geo_category就写这个 'field' => 'term_id', 'terms' => $cat_id, ), ), );
不过从你说去掉cat能查到文章来看,应该用的是默认分类,所以第一种修正就够了。
赶紧改完试试,应该就能正常按分类ID查询到对应的自定义文章了!
备注:内容来源于stack exchange,提问作者Barry Poore
相关产品推荐
相关产品推荐

