Wie wird eine bestimmte Kategorie mit einer benutzerdefinierten Abfrage angezeigt?

Hallo ich möchte eine bestimmte Kategorie aus einer benutzerdefinierten Abfrage in WordPress anzeigen. Mein Code funktioniert gut und er bekommt die letzten 4 Posts, aber ich möchte jetzt eine bestimmte Kategorie abrufen. Mein Code ist unten danke:

global $wpdb; $posts = $wpdb->get_results('SELECT ID, post_title AS title, post_excerpt AS excerpt FROM '.$wpdb->posts.' WHERE post_type = "post" AND post_status = "publish" ORDER BY post_date DESC LIMIT 4'); 

Solutions Collecting From Web of "Wie wird eine bestimmte Kategorie mit einer benutzerdefinierten Abfrage angezeigt?"

Zunächst bietet WordPress bessere Möglichkeiten zur Abfrage mit der database. Sie sollten Ihre Abfrage nicht direkt mit $wpdb sei denn, es ist absolut notwendig. Sie sollten stattdessen WP_Query und get_posts() verwenden, um Daten aus der WordPress-database zu erhalten. Wenn Sie mehr darüber lesen möchten, lesen Sie hier . @Rarst lieferte großartige Erklärungen zu besseren Möglichkeiten, um in WordPress zu suchen.

Jetzt verwende ich WP_Query , um die letzten 4 Posts der Kategorie ID 22 anzuzeigen. In den folgenden Parametern können Sie die Kategorie-ID in cat angeben oder stattdessen category_name verwenden, aber dann müssen Sie einen Kategorie-Slug als Wert angeben (nicht den Kategorienamen) ).

 < ?php $args = array( 'post_type' => 'post', 'cat' => '22', 'ignore_sticky_posts' => 1, 'posts_per_page' => 4, ); $my_query = new WP_Query( $args ); if ( $my_query->have_posts() ) : while ( $my_query->have_posts() ) : $my_query->the_post(); get_template_part( 'content', get_post_format() ); endwhile; endif; wp_reset_postdata(); ?> 

Wenn Sie darauf bestehen, diesen Pfad mithilfe von SQL-Abfragen fortzusetzen, sollten Sie zunächst verstehen, wie sich Taxonomiebegriffe mit Posts verbinden:

  • $wpdb->posts.ID < -> $wpdb->term_relationships.object_id
  • $wpdb->term_relationships.term_taxonomy_id < -> $wpdb->term_taxonomy.term_taxonomy_id
  • $wpdb->term_taxonomy.term_id < -> $wpdb->terms.term_id

In Anbetracht dessen und unter der Annahme, dass Sie die Parameter $ taxonomy (string) und $ term_slug (string) für die Kategorie bereitstellen, nach der Sie filtern, stelle ich mir vor, dass Ihr Code wie folgt geschrieben wird:

 function get_top_posts_by_term($taxonomy = 'category', $term_slug = '') { if(empty($term_slug)) { // Can't continue without valid inputs return FALSE; } global $wpdb; $query = $wpdb->prepare(" SELECT p.ID, p.post_title AS title, p.post_excerpt AS excerpt FROM $wpdb->posts p INNER JOIN $wpdb->term_relationships rel ON p.ID = rel.object_id INNER JOIN $wpdb->term_taxonomy tax ON rel.term_taxonomy_id = tax.term_taxonomy_id INNER JOIN $wpdb->terms t ON tax.term_id = t.term_id WHERE p.post_type = 'post' AND p.post_status = 'publish' AND tax.taxonomy = %s AND t.slug = %s ORDER BY p.post_date DESC LIMIT 4;", $taxonomy, // the first %s (tax.taxonomy) $term_slug // the second %s (t.slug) ); $posts = $wpdb->get_results($query); return $posts; } 

Ich bevorzuge die Verwendung von doppelt zitierten PHP-Strings im Umgang mit SQL-Abfragen, weil

  • Ich kann String-Interpolation mit den Variablen $ wpdb -> {table name} verwenden.
  • SQL-Strings, wo sie verwendet werden, neigen dazu, single-quoted Strings zu bevorzugen (ich denke, MySQL ist in dieser Hinsicht ein wenig lax, aber es ist eine gute Übung, darin zu sein). Mit doppelt zitierten PHP-Strings kann ich String-Literale in Anführungszeichen verwenden, ohne meine Zeichenfolge zu verlassen oder Escape-Zeichen einzufügen.

Schreiben Sie Ihre Anfrage so

 < ?php $query = new WP_Query('category_name=your category name &posts_per_page=-1'); if ( $query ->have_posts() ) : while ( $query->have_posts() ) : $query->the_post(); the_content(); endwhile; endif; wp_reset_postdata(); ?> 

Sie möchten den Post für eine Partikelkategorie abfragen. Dazu müssen Sie eine benutzerdefinierte Abfrage definieren. WP_Query() macht das. Einfach Parameter in WP_Query() . Sie können Robert hues Antwort auch folgen. Bist du klar?