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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.21 09:04:34