Abfrage mehrerer Kategorien

Ist es möglich, eine WordPress-Kategorieseite anzuzeigen, aber Beiträge aus mehreren Kategorien zu ziehen?

Nehmen cat_id zum Beispiel an, dass ich auf diese Weise Params für cat_id

 /category/dining/?location=2&activity=2 

Und die resultierende Seite erstellt eine Liste mit Posts aus den Kategorien, die nach location und activity .

Vielen Dank!

Solutions Collecting From Web of "Abfrage mehrerer Kategorien"

Ja, so ist es.

Sie benötigen eine Vorlagenseite für die Kategorie (z. B. category-30.php, wobei 30 die ID der Kategorie ist, die Sie mit mehreren Unterkategorien anzeigen möchten).

In der Vorlage, durchlaufen Sie die Standardschleife für Post aus der ursprünglichen Kategorie, wenn Sie möchten, wenn nicht, die magische function wird wp_reset_query und query_posts sein.

Das erste wird benötigt, um keine Kopfschmerzen zu haben, das zweite braucht einige Parameter, um die benötigten Beiträge aus den bestimmten Kategorien zu zeigen.

Wenn Sie dies einfach und leicht anpassen möchten, erstellen Sie ein Array mit den benötigten Parametern

 $cats = array('location','activity'); 

Durchlaufen Sie das Array und erstellen Sie eine eigene Schleife im Inneren: (Originalbeispiel aus Query_posts functionsreferenz)

 foreach ($cats as $getparam ) : $query = 'cat=' . $_GET[$getparam] . '&orderby=date&order=ASC'; // concatenate the query query_posts( $query ); // run the query if (have_posts()) : while (have_posts()) : the_post(); [here comes your part] endwhile; endif; endforeach; 

Das ist alles.

EDIT: Durchdenken, Sie wären besser mit einer wirklich einfachen Linie an der Spitze, wenn die Kategorie-xx.php Vorlage:

 query_posts( 'cat=' . $_GET['location'] . ',' . $_GET['activity'] . '&orderby=date&order=ASC' ); 

Dadurch werden alle Posts aus zwei Kategorien erstellt, die durch $ _GET-Parameter definiert werden. Außerdem werden die ursprünglichen Ergebnisse für die Kategorie zurückgesetzt. Die obere Lösung zeigt die Ergebnisse getrennt an, und Sie haben alle Beiträge aus mehreren Kategorien in Frage gestellt.

Ja, bei einer angeforderten URL wie:

 /category/dining/?location=2&activity=2 

Fügen Sie in Ihrer functions.php (oder in einem Plugin) Folgendes hinzu:

 function add_location_activity_query_vars( $query_vars ) { $query_vars[] = 'location'; $query_vars[] = 'activity'; return $query_vars; } add_filter( 'query_vars', 'add_location_activity_query_vars' ); function location_activity_categories_query( &$query ) { if ( $query->get( 'category_name' ) !== 'dining' ) { return; } $category = get_category_by_slug( $query->get( 'category_name' ) ); if ( empty( $category ) ) { return; } $cats = array( $category->term_id ); if ( is_numeric( $query->get( 'location' ) ) { $cats[] = $query->get( 'location' ); } if ( is_numeric( $query->get( 'activity' ) ) { $cats[] = $query->get( 'activity' ); } $query->set( 'category__and', $cats ); } add_action( 'pre_get_posts', 'location_activity_categories_query' ); 

Und das sollte es tun. Ich denke, dass Sie category__and und nicht cat wirklich tun möchten, da Sie möchten, dass die Abfrageparameter die Ergebnisse filtern.