WP-Abfrage – doppelte Einträge inklusive Tags in den Suchergebnissen

Ich laufe WordPress auf IIS & SQL server . Da einige der Plugins nicht korrekt mit DB ABSTRACTION functions.php verwende ich viele functions.php Filter als so.

Um meine Suchergebnisse mit Tags zu versehen, habe ich meiner functions.php den folgenden Code hinzugefügt: http://pastebin.com/BZG20McY

Meine Suchergebnisse enthalten jetzt Tags , aber ich erhalte viele doppelte Posts .

Gibt es eine Möglichkeit, WP QUERY zu filtern und alle duplizierten WP QUERY entfernen, bevor Sie in den WHILE LOOP ?

Hier ist meine grundlegende Schleife:

  $string) { $query_split = explode("=", $string); $search_query[$query_split[0]] = urldecode($query_split[1]); } $search = new WP_Query($search_query); ?> have_posts()) : ?> have_posts()) : $search->the_post(); ?> // SOME POSTS   // NO POSTS  

Irgendwelche Vorschläge sehr geschätzt.

Solutions Collecting From Web of "WP-Abfrage – doppelte Einträge inklusive Tags in den Suchergebnissen"

Wenn Sie dies innerhalb von WHILE LOOP wird das Problem getriggers. Es wird den Post in der Schleife überspringen, wenn diese Post-ID in unserem Array vorhanden ist (was bedeutet, dass derselbe Post die Schleife zuvor durchlaufen hat).

 < ?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); ?> 

Prüfen Sie zuerst, ob wir eine Suchanfrage erhalten haben. Tun Sie dies innerhalb des pre_get_posts Filters, um bedingte Tags zu verwenden. Wenn wir eine Suche haben, hängen Sie den Filter an.

 function wpse83602_search_query( $query ) { if ( ! $query->is_search() OR $query->is_admin ) return $query; add_filter( 'posts_distinct', 'wpse83602_posts_distinct' ); return $query; } 

Dann benutze einfach den posts_distinct oder den posts_clauses Filter. Entfernen Sie den Filter im. nicht mit anderen Abfragen in Konflikt stehen.

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