首页 > 解决方案 > 具有多种帖子类型的 WordPress 循环的自定义过滤器

问题描述

我正在构建一个 WordPress 网站,我想在其中显示一些页面以及博客索引中的帖子。棘手的条件是,它WP_Query应该返回所有“帖子”,但是当涉及到“页面”时,它应该只获取具有特定父 ID 的页面,例如父 ID 为 1、2、3 等。

我想知道是否有可能在WP_Query保留 WordPress 循环和功能(例如have_posts(),分页功能previous_posts_link()等)的同时一次性完成此操作。这可能吗?有人能指出我正确的方向吗?请让我知道是否需要更多信息来自我的目的或者是否有任何不清楚的地方。

谢谢。

标签: phpwordpress

解决方案


使用插件 - wp-combine-queries找到更多研究的解决方案

示例代码如下

//------------------------
// Children pages query #1
//------------------------
$pages = [
    'post_type'      => 'page',
    'post_parent__in' => [
        1944,1962,1343,1377,909,952 // Post id's of parents
     ],
    'posts_per_page' => -1
];

//-------------------
// All Posts Query #2
//-------------------
$posts = [
   'post_type'      => 'post',
   'posts_per_page' => -1
];

//---------------------------
// Combined queries #1 + #2:
//---------------------------
$args = [
    'paged'               => get_query_var( 'paged', 1 ),
    'combined_query' => [        
        'args'   => [ $pages, $posts ],
        'union'  => 'UNION',
    ]
];

//---------
// Output:
//---------
$posts_to_display = new WP_Query( $args );

推荐阅读