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

WordPress主循环无法显示Portfolio自定义文章类型与普通文章共存问题

解决WordPress自定义文章类型Portfolio不显示在主循环的问题

第一步:检查自定义文章类型注册参数

注册Portfolio时,必须确保核心参数配置正确,尤其是exclude_from_search要设为false,否则会被自动排除在搜索和主查询之外。同时public需设为true,保证该类型对外可见。

正确的注册示例:

function register_portfolio_cpt() {
    $args = array(
        'public' => true,
        'label'  => 'Portfolio',
        'exclude_from_search' => false, // 关键:不排除在搜索及主查询外
        'has_archive' => true,
        'supports' => array('title', 'editor', 'thumbnail'),
        // 其他自定义参数...
    );
    register_post_type( 'portfolio', $args );
}
add_action( 'init', 'register_portfolio_cpt' );

第二步:修正pre_get_posts钩子代码

很多人使用该钩子时容易忽略条件判断,导致修改未作用于目标查询。正确的代码需要仅针对前台主查询、首页/博客页生效,同时保留默认文章类型post,再追加自定义类型portfolio。

示例代码(添加到主题的functions.php中):

function include_portfolio_in_main_loop( $query ) {
    // 仅修改前台主查询,避免影响后台或自定义查询
    if ( $query->is_home() && $query->is_main_query() && ! is_admin() ) {
        $query->set( 'post_type', array( 'post', 'portfolio' ) );
    }
}
add_action( 'pre_get_posts', 'include_portfolio_in_main_loop' );

注意:如果你的首页是静态页面,需将is_home()替换为is_front_page()

第三步:排查常见问题

  • 刷新固定链接:进入后台「设置→固定链接」,直接点击保存按钮,刷新WordPress的重写规则,确保自定义文章类型的规则生效。
  • 检查主题模板:部分主题会在index.php或循环模板中硬编码post_type参数为post,需确认模板中没有强制限制文章类型的代码。
  • 清空缓存:若使用了缓存插件,先清空页面缓存,避免旧的查询结果被缓存展示。

验证方法

可在主循环前添加以下代码,查看当前查询的文章类型参数:

// 放到index.php的循环代码前
echo '<pre>';
print_r( get_query_var('post_type') );
echo '</pre>';

如果输出为Array ( [0] => post [1] => portfolio ),说明参数已生效;若仅显示post,则需检查pre_get_posts的条件判断是否匹配你的页面设置。

内容的提问来源于stack exchange,提问作者Abeera Faizan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 04:46:10