Filtern von Beiträgen nach mehreren Taxonomien

Ich habe eine Seite, auf der ich alle Beiträge eines bestimmten benutzerdefinierten Post-Typs anzeigen möchte, nennen wir es “Personen”. Ich möchte dem Benutzer erlauben, alle Personen nach mehreren (!) Taxonomien zu filtern: Alter, Stadt, Beruf, Erfahrungsniveau. Der beste Weg, dies zu tun, wäre über das Anklicken der Checkboxen und die Ergebnisse sofort über Ajax ohne Neuladen der Seite erhalten.

Ich denke, das wollen viele WordPress-Entwickler realisieren. Leider habe ich kein geeignetes Tutorial dafür gefunden. Aber es muss etwas für erfahrene WordPress-Entwickler sein …

Kann jemand eine Codevorlage für das Erstellen einer Filterseite für den oben beschriebenen benutzerdefinierten Posttyp bereitstellen?

Ich weiß bereits, wie man Beiträge durch nur EINE Taxonomie durch jQuery filtert. Dies ist der Code, den ich bisher benutzt habe:

  
All cities <a href="javascript:void(0);" data-target=" slug; ?>"> name; ?>
'persons', 'post_status' => 'publish', 'meta_key' => 'zip', 'orderby' => 'meta_value_num', 'order' => 'ASC', 'posts_per_page' => -1 ); query_posts($args); if ( have_posts() ) : while ( have_posts() ) : the_post(); $post_terms = wp_get_post_terms( $post->ID, $taxonomy, array( "fields" => "slugs" ) ); $post_terms_space_separated = implode(" ", $post_terms); ?> <div class="person ">
jQuery(document).ready(function() { // Click on a city jQuery('a[data-target]').click(function() { jQuery('.person').show().not('.' + this.dataset.target).hide(); }); // Click on "All cities" jQuery('#all').click(function(e) { e.preventDefault(); jQuery('.person').show(); }); });

Dieser Code funktioniert einwandfrei. Aber meine neue Herausforderung besteht darin, Personen nach mehr als einer Taxonomie zu filtern – nicht nur nach der Stadt, sondern auch nach Alter, Beruf und Erfahrung. Wie muss ich meinen Code ändern, um dies zu erreichen? Dies zu erreichen wäre natürlich der bevorzugte Weg von Ajax.

Solutions Collecting From Web of "Filtern von Beiträgen nach mehreren Taxonomien"

Als erstes sollten Sie WP_Query vs query_posts verwenden.

Sehen Sie sich die Taxonomie-Parameter an .

Hauptsächlich tax_query und relation .

 // Repost from link above $args = array( 'post_type' => 'post', 'tax_query' => array( 'relation' => 'AND', array( 'taxonomy' => 'movie_genre', 'field' => 'slug', 'terms' => array( 'action', 'comedy' ) ), array( 'taxonomy' => 'actor', 'field' => 'id', 'terms' => array( 103, 115, 206 ), 'operator' => 'NOT IN' ) ) ); 

ODER, wenn Sie es lieber in der Schleife deklarieren möchten, casting Sie einen Blick auf array_key_exists . Sie könnten die Schleife erneut ausführen, aber dieses Mal überprüfen Sie jeden Beitrag auf die passenden Begriffe.

 // NO LONGER WORKS, WORDPRESS HAS CHANGED THE ARRAY STRUCTURE OF get_the_terms() -- OCT 2015 /* if( array_key_exists( 111, get_the_terms($post->ID,'age') ) && array_key_exists( 222, get_the_terms($post->ID,'city') ) ) { // output the post } */ 

ODER, Sie können einfach alles in jQuery (zum Beispiel) tun, wenn Sie sowieso schon jeden einzelnen Post auf der Seite laden. Sie könnten Datenattribute für jeden Beitrag ausgeben, der die Begriffe enthält, mit denen sie markiert sind.

  

Und dann einfach .hide() diejenigen, die nicht mit den ausgewählten zu filternden Begriffen übereinstimmen.