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

如何用单模板动态获取Portfolio自定义文章类型的指定分类文章?

解决方法:动态获取分类别名,用单一模板展示自定义文章类型的分类文章

很简单,我们可以利用WordPress内置的函数获取当前分类的别名(slug),然后动态传入查询参数里,这样就不用为每个分类单独创建模板了。下面分两种常见场景给出解决方案:

场景1:你的Portfolio使用WordPress默认分类(Category)

如果你的自定义文章类型portfolio关联的是WordPress默认的分类系统,那可以按以下步骤操作:

方法1:在模板中构建动态查询

比如你可以用category.php作为通用模板,在里面添加以下代码:

// 获取当前分类的对象
$current_category = get_queried_object();
// 提取分类别名
$current_cat_slug = $current_category->slug;

// 构建动态查询参数
$args = array(
    'post_type' => 'portfolio',
    'posts_per_page' => -1,
    'category_name' => $current_cat_slug // 动态传入当前分类别名
);

// 执行查询
$portfolio_query = new WP_Query( $args );

// 循环输出文章
if ( $portfolio_query->have_posts() ) :
    while ( $portfolio_query->have_posts() ) : $portfolio_query->the_post();
        // 你的文章内容模板,比如标题、缩略图等
        the_title( '<h2>', '</h2>' );
        the_excerpt();
    endwhile;
    wp_reset_postdata(); // 重置查询,避免后续逻辑出错
endif;

方法2:修改主查询(更推荐)

这种方法不用写自定义查询,直接让WordPress的主查询自动加载portfolio类型的文章,更符合WordPress的规范。在你的主题functions.php中添加以下代码:

function custom_portfolio_category_archive( $query ) {
    // 只在前台、主查询、分类归档页生效
    if ( ! is_admin() && $query->is_main_query() && is_category() ) {
        $query->set( 'post_type', 'portfolio' ); // 替换为你的自定义文章类型
        $query->set( 'posts_per_page', -1 ); // 显示所有文章
    }
}
add_action( 'pre_get_posts', 'custom_portfolio_category_archive' );

之后你只需要用category.php模板,正常写主循环即可,它会自动显示当前分类下的所有Portfolio文章。


场景2:你的Portfolio使用自定义分类法(比如portfolio_category)

如果当初你给portfolio注册了专属的自定义分类法(比如叫portfolio_category),那需要用tax_query来替代category_name,具体操作如下:

方法1:模板中的动态查询

// 获取当前自定义分类的对象
$current_term = get_queried_object();
// 构建查询参数
$args = array(
    'post_type' => 'portfolio',
    'posts_per_page' => -1,
    'tax_query' => array(
        array(
            'taxonomy' => 'portfolio_category', // 替换为你的自定义分类法名称
            'field'    => 'slug',
            'terms'    => $current_term->slug // 动态传入当前分类别名
        )
    )
);

$portfolio_query = new WP_Query( $args );

// 循环输出(和上面逻辑一致)
if ( $portfolio_query->have_posts() ) :
    while ( $portfolio_query->have_posts() ) : $portfolio_query->the_post();
        the_title( '<h2>', '</h2>' );
        the_excerpt();
    endwhile;
    wp_reset_postdata();
endif;

方法2:修改主查询(推荐)

在functions.php中添加:

function custom_portfolio_taxonomy_archive( $query ) {
    // 只在前台、主查询、自定义分类归档页生效
    if ( ! is_admin() && $query->is_main_query() && is_tax( 'portfolio_category' ) ) {
        $query->set( 'posts_per_page', -1 ); // 显示所有文章
        // 因为当前已经是自定义分类归档,主查询默认会加载portfolio类型,所以不用额外设置post_type
    }
}
add_action( 'pre_get_posts', 'custom_portfolio_taxonomy_archive' );

然后用tax-portfolio_category.php作为通用模板即可,它会自动展示当前自定义分类下的所有Portfolio文章。


注意事项

  • 如果你不确定自己用的是默认分类还是自定义分类法,可以去后台查看Portfolio文章的分类界面,或者查看主题/插件中注册自定义文章类型的代码,找到taxonomies参数对应的名称。
  • 记得在自定义查询循环结束后调用wp_reset_postdata(),避免后续的查询逻辑出现冲突。

内容的提问来源于stack exchange,提问作者Golam Kibria

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 06:28:44