Zeigen Sie Beiträge mit bestimmten Kategorien an

Ich verwende diesen Code, um zuerst jeden Kategorienbegriff als Überschriften anzuzeigen und dann einen Beitrag anzuzeigen, dem jeder Kategoriebegriff unter der Überschrift zugewiesen ist.

Wenn ich eine benutzerdefinierte Taxonomie erstelle, funktioniert sie wie beabsichtigt, aber wenn ich versuche, die standardmäßige Kategorietaxonomie zu verwenden, werden die Überschriften wie beabsichtigt angezeigt, aber unter jeder Überschrift werden alle Artikel ohne Rücksicht auf den zugewiesenen Begriff angezeigt. Ich verstehe nicht, warum es für meine benutzerdefinierte Taxonomie funktionieren würde, aber nicht für die Standardkategorie Taxonomie.

 'name', 'order' => 'ASC', 'hide_empty' => true, ); $terms = get_terms( 'category', $args ); foreach ( $terms as $term ) { echo $term->name; $post_args = array ( 'category' => $term->name, 'posts_per_page' => '1', 'no_found_rows' => true ); $query = new WP_Query( $post_args ); while ( $query->have_posts() ) { $query->the_post(); ?>   <?php } } 

Wenn ich es so ändere, dass es in diesem Beispiel meine benutzerdefinierte Taxonomie “article_subjects” verwendet, funktioniert alles wie beabsichtigt.

  'name', 'order' => 'ASC', 'hide_empty' => true, ); $terms = get_terms( 'article_subjects', $args ); foreach ( $terms as $term ) { echo $term->name; $post_args = array ( 'article_subjects' => $term->name, 'posts_per_page' => '1', 'no_found_rows' => true ); $query = new WP_Query( $post_args ); while ( $query->have_posts() ) { $query->the_post(); ?>   <?php } } 

Und nur für den Fall, dass es wichtig ist, hier ist der Code, den ich verwendet habe, um die benutzerdefinierte Taxonomie zu generieren.

 function article_subjects() { $labels = array( 'name' => _x( 'Subjects', 'Taxonomy General Name', 'dc' ), 'singular_name' => _x( 'Subject', 'Taxonomy Singular Name', 'dc' ), 'menu_name' => __( 'Subjects', 'dc' ), 'all_items' => __( 'All Items', 'dc' ), 'parent_item' => __( 'Parent Item', 'dc' ), 'parent_item_colon' => __( 'Parent Item:', 'dc' ), 'new_item_name' => __( 'New Subject', 'dc' ), 'add_new_item' => __( 'Add New Item', 'dc' ), 'edit_item' => __( 'Edit Item', 'dc' ), 'update_item' => __( 'Update Item', 'dc' ), 'separate_items_with_commas' => __( 'Separate items with commas', 'dc' ), 'search_items' => __( 'Search Items', 'dc' ), 'add_or_remove_items' => __( 'Add or remove items', 'dc' ), 'choose_from_most_used' => __( 'Choose from the most used items', 'dc' ), 'not_found' => __( 'Not Found', 'dc' ), ); $args = array( 'labels' => $labels, 'hierarchical' => false, 'public' => true, 'show_ui' => true, 'show_admin_column' => true, 'show_in_nav_menus' => true, 'show_tagcloud' => true, 'has_archive' => true, 'can_export' => true ); register_taxonomy( 'article_subjects', array( 'post' ), $args ); } add_action( 'init', 'article_subjects', 0 ); 

Solutions Collecting From Web of "Zeigen Sie Beiträge mit bestimmten Kategorien an"

Ihr Problem liegt in dieser Codezeile in Ihrem ersten Code

 'category' => $term->name, 

Es gibt hier zwei Probleme. Erstens ist die category kein gültiger Parameter für WP_Query . Sie sollten category_name , da Sie mit get_terms . get_terms gibt die ID nicht wie get_categories , was eine Alternative für den ersten Teil des Codes ist. Zweitens, wenn Sie category_name , denken Sie daran, dies ist der Slug der Kategorie, nicht der Kategoriename

Also ersetzen

 'category' => $term->name, 

mit

 'category_name' => $term->slug, 

Wie gesagt, Sie können auch get_categories , damit Sie auch so etwas tun können

 < ?php $args = array ( 'orderby' => 'name', 'order' => 'ASC', 'hide_empty' => true, ); $categories = get_categories( $args ); foreach ( $categories as $category ) { echo $category->name; $post_args = array ( 'cat' => $category->cat_ID, 'posts_per_page' => '1', ); $query = new WP_Query( $post_args ); while ( $query->have_posts() ) { $query->the_post(); ?> < ?php the_title(); ?> < ?php the_excerpt(); ?> < ?php } wp_reset_postdata(); } ?> 

Um nur darauf hinzuweisen, übergeben Sie einige ungültige Argumente an register_taxonomy . Bitte gehen Sie und prüfen Sie den Codex für gültige Argumente

BEARBEITEN

Von Ihren Kommentaren denke ich, dass Sie das abschließende Ende endif; Um the_post_thumbnail anzuzeigen, wird Ihr Code wie folgt aussehen

 if ( has_post_thumbnail() ) : the_post_thumbnail(); endif; 

Nur noch eine Sache, die ich gestern vergessen habe zu erwähnen: Sie sollten die Postdata ( wp_reset_postdata ) immer zurücksetzen, wenn Sie eine benutzerdefinierte Abfrage verwenden