WordPress短代码问题:无法显示自定义文章类型子分类下的文章
解决自定义文章类型无法按分类加载的问题
我需要列出主分类「Referenzliste」的所有子分类,并展示这些子分类下自定义文章类型(referenzen)的文章链接。现有短代码能正常输出子分类,但加载不出对应的已发布文章。短代码代码如下:
function verlinkte_artikel_referenzen($atts) { // Attributsbehandlung $atts = shortcode_atts(array( 'parent_cat' => 'Referenzliste', 'cpt' => 'referenzen' ), $atts, 'verlinkte_artikel_referenzen'); // Hole die übergeordnete Kategorie $parent_category = get_term_by('name', $atts['parent_cat'], 'category'); if (!$parent_category) { return 'Kategorie nicht gefunden.'; } // Hole die Unterkategorien der übergeordneten Kategorie $unterkategorien = get_terms(array( 'taxonomy' => 'category', 'child_of' => $parent_category->term_id, 'hide_empty' => false )); if (empty($unterkategorien)) { return 'Keine Unterkategorien gefunden.'; } $output = '<div class="referenzen-list">'; foreach ($unterkategorien as $unterkategorie) { $output .= '<h2>' . esc_html($unterkategorie->name) . '</h2>'; $output .= '<ul>'; $query = new WP_Query(array( 'post_type' => $atts['cpt'], 'tax_query' => array( array( 'taxonomy' => 'category', 'field' => 'term_id', 'terms' => $unterkategorie->term_id ) ) )); if ($query->have_posts()) { while ($query->have_posts()) { $query->the_post(); $output .= '<li><a href="' . get_permalink() . '">' . get_the_title() . '</a></li>'; } wp_reset_postdata(); } else { $output .= '<li>Keine Artikel gefunden.</li>'; } $output .= '</ul>'; } $output .= '</div>'; return $output; } add_shortcode('verlinkte_artikel_referenzen', 'verlinkte_artikel_referenzen');
附截图说明:
- 自定义文章类型列表视图:显示已发布的
referenzen类型文章 - 分类视图:显示
Referenzliste下的子分类,且有文章关联记录
核心问题:自定义文章类型未关联默认分类法
WordPress默认不会给自定义文章类型(CPT)启用category(默认分类)分类法。你的短代码用tax_query查询category分类,但如果referenzen这个CPT没和category关联,查询必然返回空结果。
修复步骤:
1. 关联自定义文章类型与默认分类
找到注册referenzen自定义文章类型的代码,在register_post_type参数中添加taxonomies字段:
register_post_type( 'referenzen', array( // 其他原有参数... 'taxonomies' => array( 'category' ), // 新增此行,关联默认分类 // 其他原有参数... ) );
如果是事后补关联,可在主题functions.php或自定义插件中添加:
add_action( 'init', function() { register_taxonomy_for_object_type( 'category', 'referenzen' ); } );
2. 验证文章分类关联
进入后台编辑任意referenzen类型文章,确认右侧「分类」 metabox存在,且文章已正确分配到Referenzliste的子分类下。
3. 优化短代码查询参数(可选)
在WP_Query中明确查询已发布文章,并取消数量限制:
$query = new WP_Query(array( 'post_type' => $atts['cpt'], 'post_status' => 'publish', // 仅查已发布文章 'posts_per_page' => -1, // 显示所有关联文章 'tax_query' => array( array( 'taxonomy' => 'category', 'field' => 'term_id', 'terms' => $unterkategorie->term_id ) ) ));
测试
修改后刷新页面,短代码即可正常加载对应子分类下的referenzen文章。
内容的提问来源于stack exchange,提问作者Chris Wiese
相关产品推荐
相关产品推荐

