wordpress 将多个WP_Query结果合并到一个没有重复项的数组中

rur96b6h  于 2023-01-01  发布在  WordPress
关注(0)|答案(1)|浏览(165)

我有一个自定义帖子类型,它有自己的自定义模板,我想显示与自定义帖子类型标题相关的博客帖子。但是,我想先显示引用的帖子,然后搜索任何带有标记的帖子,最后查找相关帖子。这些操作中的任何一个都可能导致没有结果或结果很多。我想显示的帖子总数为6。
'

$searchtag = strtolower(get_the_title());

$arg1 = array(
    'post_type'   => 'post',
    'p' => $post_id,
);
$arg2 = array(
    'post_type'   => 'post',
    'tag' => $searchtag,
    'post_status' => 'publish',
    'orderby' => 'post_date',
    'order' => 'desc',
    'posts_per_page' => 6,
);
$arg3 = array(
    'post_type'   => 'post',
    's' => $searchtag,
    'post_status' => 'publish',
    'orderby' => 'relevance',
    'posts_per_page' => 6,
);

// Get the posts
$query1 = new wp_query( $arg1 );
$query2 = new wp_query( $arg2 );
$query3 = new wp_query( $arg3 );
$related_query = new wp_query(); 

// Merge the unique posts
$related_query->posts = array_merge($query1->posts, $query2->posts, $query3->posts);
$related_query->post_count = $query1->post_count + $query2->post_count + $query3->post_count;

if($related_query->have_posts):

'
我读过一篇文章,指出使用post__not_in会给数据库带来负担,我不应该合并它。
1.如果查询-〉post_count = 0,我需要添加逻辑吗?
1.如何维护订单,同时确保不显示重复项?
我在这些结果中得到重复的当前。我想消除他们,同时保持顺序的职位query 1,然后query 2,然后query 3...显示前6个职位。

pcww981p

pcww981p1#

更好的方法是使用参数进行3次查询:

'fields' => 'ids'

在那里:

$postIds1 = get_posts($args1);

合并时获取数据:

$postIds = array_merge(array(0), $postIds1, $postIds2, $postIds3);

当提出请求时

'post__in' => $postIds

相关问题