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能查到数据,那就是代码的循环输出有问题;如果查不到,就是查询参数或者数据关联的问题。
- 确认分类法的slug完全正确:比如你注册的分类法slug是不是真的是
验证文章与术语的关联
可以先写一段简单的代码验证数据是否真的关联正确:$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
相关产品推荐
相关产品推荐

