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

WordPress中如何显示指定自定义分类法术语下的自定义文章类型内容?

WordPress中如何显示指定自定义分类法术语下的自定义文章类型内容?

看起来你已经把查询代码写得八九不离十了,但拿不到结果确实挺闹心的,我之前做自定义主题的时候也踩过类似的坑,给你几个排查和解决的方向:

  • 先刷新重写规则(必做!)
    注册完自定义文章类型和分类法后,WordPress的重写规则不会自动更新,这是最容易被忽略的点。你只需要登录后台,进入「设置」→「固定链接」,不用修改任何设置,直接点击底部的「保存更改」按钮,系统就会自动刷新重写规则了,很多时候这一步就能解决查询无结果的问题。

  • 检查分类法的注册关联
    确保你在注册project-type分类法时,已经正确关联了portfolio这个自定义文章类型。你的注册代码应该类似这样:

    register_taxonomy(
        'project-type',
        'portfolio', // 这里必须指定要关联的自定义文章类型slug
        array(
            'label' => '项目类型',
            'rewrite' => array('slug' => 'project-type'),
            'hierarchical' => true,
            'show_in_rest' => true, // WP 6.x建议开启,确保后台&前端关联正常
            // 其他自定义参数...
        )
    );
    

    如果这里没把分类法和portfolio绑定,两者之间就没有关联关系,自然查不到对应内容。

  • 细化查询的细节检查

    • 确认分类法的slug完全正确:比如你注册的分类法slug是不是真的是project-type?有没有不小心写成了project_type(下划线代替横杠)?拼写错误是这类问题的高频原因。
    • 明确指定文章状态:可以在查询参数里加上'post_status' => 'publish',虽然WP_Query默认会查询已发布的文章,但有时候如果文章状态有异常(比如不小心设成了私有),加上这个参数能确保只获取公开的内容。
    • 调试查询语句:在$query = new WP_Query( $args );之后,加上var_dump($query->request);,这样就能看到WordPress生成的原生SQL语句,把这个语句复制到数据库管理工具(比如phpMyAdmin)里执行,看看能不能拿到结果——如果SQL能查到数据,那就是代码的循环输出有问题;如果查不到,就是查询参数或者数据关联的问题。
  • 验证文章与术语的关联
    可以先写一段简单的代码验证数据是否真的关联正确:

    $all_portfolio = get_posts(array('post_type' => 'portfolio', 'posts_per_page' => -1));
    foreach($all_portfolio as $post) {
        $terms = wp_get_post_terms($post->ID, 'project-type');
        echo $post->post_title . ' 关联的术语:';
        foreach($terms as $term) {
            echo $term->slug . ' ';
        }
        echo '<br>';
    }
    

    运行这段代码,看看有没有文章确实关联了web-design这个术语的slug,避免后台显示的术语名称和实际slug不一致的情况。

如果以上都排查过还是没解决,可以暂时切换到WordPress默认主题(比如Twenty Twenty-Three)测试你的查询代码,如果在默认主题下能正常显示结果,那说明你的自定义主题里有其他代码(比如pre_get_posts钩子)修改了查询逻辑,需要进一步排查主题的其他功能代码。

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.07 08:59:31