WP查询-在搜索结果中包含标签的重复帖子

时间:2013-01-29 作者:Iladarsda

我正在运行WordPressIIS & SQL server. 因为一些插件不能与DB ABSTRACTION 我用了很多functions.php 过滤器等。

生成搜索结果的步骤include tags 我已将以下代码添加到functions.php - http://pastebin.com/BZG20McY

我现在的搜索结果include tags, 但我有很多duplicated posts.

Is there any way to filter WP QUERY and remove all duplicated post before going into the WHILE LOOP?

以下是我的基本循环:

<?php

$query_args = explode("&", $query_string);
$search_query = array(\'\');

foreach($query_args as $key => $string) {
     $query_split = explode("=", $string);
     $search_query[$query_split[0]] = urldecode($query_split[1]);
} 
$search = new WP_Query($search_query);

?>


<?php if ($search->have_posts()) : ?>
     <?php while ($search->have_posts()) : $search->the_post(); ?>
          // SOME POSTS
     <?php endwhile; ?>
<?php else : ?>
// NO POSTS
<?php endif; ?>
Any suggestions much appreciated.

2 个回复
SO网友:Iladarsda

将此添加到WHILE LOOP 将解决问题。如果我们的数组中存在此post ID,那么它将跳过循环中的post(这意味着,相同的post之前也经历过循环)。

<?php 

    // MAKE SURE YOU DECLARE $postsIDsArray= array(); outside of the loop, on top of it
    $postID = $search->post->ID;

    // if this ID is present in the array, skip this post
    if (in_array($postID, $postsIDsArray)) continue;

    // if the ID is not present, add this ID to the array
    array_push($postsIDsArray, $postID);

?>

SO网友:kaiser

首先,只需检查是否有搜索查询。在pre_get_posts 筛选以使用条件标记。如果我们进行了搜索,请连接过滤器。

function wpse83602_search_query( $query )
{
    if (
        ! $query->is_search()
        OR $query->is_admin
    )
        return $query;

    add_filter( \'posts_distinct\', \'wpse83602_posts_distinct\' );
    return $query;
}
然后使用posts_distinct 或者posts_clauses 滤器拆下滤清器im。不与其他查询冲突。

function wpse83602_posts_distinct( $clause )
{
    remove_filter( current_filter(), __FUNCTION__ );
    $clause[0] = "DISTINCT";
    return $clause;
}

结束