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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 03:26:05