wordpress - 在单个 WP 查询中合并两个帖子类型

标签 wordpress

我想在单个查询中从两种不同的帖子类型中获取数据,这两种帖子类型具有不同的参数。我正在使用以下代码,但如何在单个查询中合并两个结果?

    $args = array(
        'post_type' => 'post', 
        'posts_per_page'=> '1',
    );
    $args1 = array(
        'post_type' => 'page',
        'posts_per_page'=> '3', 
    );
    $post_query = new WP_Query( $args );
    $page_query = new WP_Query( $args1 );

最佳答案

您有两个选择,要么合并结果,要么运行第三个查询。我总是喜欢后者,因为这样你就可以将查询对象保留在适当的位置,这对邮政计数器和分页非常有帮助。

我们在这里需要聪明一点,因为这确实会不必要地减慢事情的速度,而且会变得非常昂贵,所以这就是我们要做的

  • 使用 get_posts 运行两个非常精简、非常智能的查询(比普通 WP_Query 更优化,因为它打破了分页,从而使其更快).我们还将只查询帖子 ID 而不是完整的对象。这将使这些查询非常快速且非常精简。这几乎就像您从未进行过这些查询;-)

  • 一旦我们获得了这些查询的结果,我们就可以合并 ID 并运行最终查询以返回完整的帖子对象,我们可以使用这些对象来运行适当的循环

让我们看一下代码

// Set our defaults to keep our code DRY
$defaults = [
    'fields'                 => 'ids',
    'update_post_term_cache' => false,
    'update_post_meta_cache' => false,
    'cache_results'          => false
];
// Set query args for query 1
$args = [
    'post_type'      => 'post', 
    'posts_per_page' => '1',
];
// Set query args for query 2
$args1 = [
    'post_type'      => 'page',
    'posts_per_page' => '3',
];
$post_query = get_posts( array_merge( $defaults, $args  ) );
$page_query = get_posts( array_merge( $defaults, $args1 ) );

// Merge the two results
$post_ids = array_merge ( $post_query, $page_query ); //. You can swop around here

// We can now run our final query, but first mke sure that we have a valid array
if ( $post_ids ) {
    $final_args = [
        'post_type' => ['post', 'page'],
        'post__in'  => $post_ids,
        'orderby'   => 'post__in', // If you need to keep the order from $post_ids
        'order'     => 'ASC' // If you need to keep the order from $post_ids
    ];
    $loop = new WP_Query( $final_args );

    // Run your loop as normal
}

关于wordpress - 在单个 WP 查询中合并两个帖子类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35309058/

相关文章:

mysql - Bitnami WordPress 安装无法找到 WordPress DB

javascript - 返回到该父菜单时,保持选项卡菜单 li 子项处于事件状态

php - 在 Woocommerce 3+ 中检查产品价格是否含税

javascript - 每次在 Safari 和移动浏览器上询问地理位置权限

wordpress - 自定义帖子类型 wp_dropdown_categories

mysql - 在 mysql 中复制 wordpress 密码哈希

javascript - 在特定页面上显示内容 javascript

wordpress - 如何将 WordPress 的博客部分放在子目录中,同时将 Pages 保留在根目录中?

php - 如何按分类术语从自定义 WordPress MySQL 查询中排除结果

php - 保持 WordPress(本地和远程)同步