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

如何在WordPress中让特定页面与所有文章一同显示

解决WordPress主页同时展示特定页面与博客文章的方案

嘿,这个需求太常见了!我给你几个实用的方法,都是WordPress开发里的常规操作,不用再搞中转文章这么麻烦:

方法1:用pre_get_posts钩子修改主查询(推荐,符合WP最佳实践)

这个方法不用动主页模板,直接在主题的functions.php里加代码,通过钩子修改WordPress的主查询,让它同时包含文章和你指定的页面:

add_action('pre_get_posts', 'include_specific_pages_on_home');
function include_specific_pages_on_home($query) {
    // 只针对主页的主查询生效
    if ($query->is_home() && $query->is_main_query()) {
        // 设置要查询的内容类型:文章(post) + 页面(page)
        $query->set('post_type', array('post', 'page'));
        
        // 如果你只想显示特定页面,用post__in指定页面ID(把下面的ID换成你自己的)
        $query->set('post__in', array(123, 456));
        
        // 可选:如果想让页面和文章按发布/修改时间统一排序,保持默认的日期排序即可
        // 如果你想调整排序规则,可以加下面的代码
        // $query->set('orderby', 'date');
        // $query->set('order', 'DESC');
    }
}

如果不想硬编码页面ID,想更灵活(比如后台编辑页面时直接控制是否显示在主页),可以给页面加个自定义字段:

  1. 编辑需要显示的页面,在「自定义字段」里添加键为show_on_home,值为yes的字段(如果看不到自定义字段,去右上角「选项」里勾选显示)
  2. 修改上面的函数,加上meta_query筛选:
add_action('pre_get_posts', 'include_specific_pages_on_home');
function include_specific_pages_on_home($query) {
    if ($query->is_home() && $query->is_main_query()) {
        $query->set('post_type', array('post', 'page'));
        
        // 筛选出带有show_on_home=yes的页面,同时保留所有文章
        $meta_query = array(
            'relation' => 'OR',
            array(
                'key' => 'show_on_home',
                'value' => 'yes',
                'compare' => '='
            ),
            array(
                'post_type' => 'post',
                'compare' => 'EXISTS'
            )
        );
        $query->set('meta_query', $meta_query);
    }
}

方法2:直接修改主页模板的WP_Query

如果你不想碰functions.php,可以直接在主页模板(比如home.php或者index.php)里修改查询参数:

找到原来的WP_Query代码,把post_type改成数组,同时指定要包含的页面:

$args = array(
    'post_type' => array('post', 'page'), // 同时查询文章和页面
    'post__in' => array(123, 456), // 替换成你的页面ID
    'posts_per_page' => 10, // 保持你原来的每页显示数量
    'orderby' => 'date',
    'order' => 'DESC'
);
$home_query = new WP_Query($args);

同样,也可以用自定义字段的方式来筛选页面,把上面的post__in换成meta_query参数就行,和方法1里的meta_query写法一致。

注意事项

  • 页面的「发布日期」会影响排序,如果你想让页面和文章按时间顺序混排,记得调整页面的发布日期到合适的位置
  • 如果你的主题有自定义的文章卡片模板,要确保它能正确处理页面类型的内容(比如页面没有摘要的话,可以用the_excerpt()或者自定义字段来显示摘要,或者用wp_trim_words(get_the_content(), 50)来截取内容作为摘要)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 07:36:48