我正在运行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.
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;
}