Holen Sie sich das Archiv der wordpress-Taxonomie und sortieren Sie nach Jahr

Ich habe einen benutzerdefinierten Post-Typ mit einer benutzerdefinierten Taxonomie.

Ich zeige gerade alle Beiträge nach Datum sortiert mit einem Kopf des Datums über alle Beiträge mit diesem Code:

get_results( "SELECT YEAR(post_date) AS year FROM wp_posts WHERE post_type = 'press' AND post_status = 'publish' GROUP BY year DESC" ); foreach ( $years as $year ) { $posts_this_year = $wpdb->get_results( "SELECT ID, post_title FROM wp_posts WHERE post_type = 'press' AND post_status = 'publish' AND YEAR(post_date) = '" . $year->year . "'" ); echo '
' . $year->year . '
'; foreach ( $posts_this_year as $post ) { echo '
'; $src = wp_get_attachment_image_src( get_post_thumbnail_id($post->ID), thumbnail, false); echo '
'; the_title(); echo '
'; the_field('title'); echo '
'; echo str_replace(' ', '', get_field('sub_heading')); echo '
'; } } ?>

Ich scheine nicht in der Lage zu sein, nur den Post mit einer bestimmten Taxonomie auf den Archivseiten zu bekommen.

Im Idealfall möchte ich den Code, den ich habe, aber einige, wie es mit diesem Code, den ich in der Vergangenheit erfolgreich verwendet habe, kombinieren:

   

Kann mir jemand Einblick geben?

Solutions Collecting From Web of "Holen Sie sich das Archiv der wordpress-Taxonomie und sortieren Sie nach Jahr"

Du verkomplizierst hier alles. Was Sie tun, ist nicht nur teuer ( weil Sie alle Caches verlieren, die Post-, Post-Meta-, Term- und Thumbnail-Caches enthalten ), es ist auch völlig falsch.

  • Sie führen benutzerdefinierte Abfragen aus, die die Hauptabfrage ersetzen. Dies führt dazu, dass Ihre Seite langsamer geladen wird

  • Sie sollten keine eigenen SQL-Abfragen für Sicherheitszwecke und Dynamica ausführen. Wie ich schon sagte, verlieren Sie alle Caches, die Seitenladevorgänge beschleunigen und databaseabfragen reduzieren. Sie verlieren auch alle Filter und Aktionen, die WP_Query bietet

  • Sie führen viele unnötige Abfragen durch. Alles, was Sie tun müssen, ist bereits in der Hauptabfrage, es ist nur ein Fall der Verwendung dieser Informationen, um Ihre Bedürfnisse zu erfüllen

Schauen wir uns an, wie wir das lösen werden. Die Hauptabfrage auf einer Archivseite für Taxonomiebegriffe gibt nur Beiträge aus dem abgefragten Begriff zurück. Diese Posts sind standardmäßig nach dem Datum DESC geordnet. So werden die neuesten Beiträge oben und die Dinosaurier unten sein. Wie Sie sehen, ist bereits alles vorhanden. Sie müssen lediglich die Anzahl der Posts ändern, die pro Seite angezeigt werden sollen. In diesem Fall scheint es sich um alle auf der ersten Seite zu handeln

Da wir hier die Hauptabfrage verwenden, werden alle Post-Caches mit unseren Posts, Post-Meta- und Term-Informationen gefüllt, was später viel bei DB-Abfragen spart. Da wir die Hauptabfrage verwenden, werden unsere Post-Thumbnails ebenfalls zwischengespeichert. Denken Sie daran, dass Vorschaubilder nur für die Hauptabfrage und nicht für benutzerdefinierte Abfragen zwischengespeichert werden.

Lassen pre_get_posts uns zuerst pre_get_posts , um alle Beiträge auf Seite 1 auf unseren Taxonomie-Archivseiten zu erhalten

 add_action( 'pre_get_posts', function ( $q ) { if ( !is_admin() // Only target front end && $q->is_main_query() // Only target the main query && $q->is_tax() // Only target taxonomy term archive pages ) { $q->set( 'posts_per_page', -1 ); // Will return all posts on page one } }); 

Wenn Sie die Haupt-Standardschleife verwenden, hätten Sie alle Posts gesehen, die auf der Taxonomie-Archivseite nach Datum geordnet zurückgegeben werden

Lass uns deine Schleife sortieren. Entfernen Sie zunächst Ihren gesamten Code. Wir wollen und brauchen keine benutzerdefinierten Abfragen. Wir wollen nur die Hauptschleife benutzen. Was das Sortieren betrifft, ist es so einfach wie das Vergleichen von Postdaten und nur das Jahr anzeigen, wenn sich diese zwischen zwei Posts unterscheiden ( HINWEIS: Der gesamte Code ist nicht getestet, und ich habe nur Ihren Code bereinigt, nicht geändert)

 if ( have_posts() ) { // Define a variable which will hold our year value $year_variable = ''; while ( have_posts() ) { the_post(); // Lets get the post date, but only the year value $post_year = get_the_date( 'Y' ); /** * Compare the current post's date with our $year_variable and * display the year value if the two dates differs */ if ( $year_variable !== $post_year ) echo '
' . $post_year . '
'; // Update the $year_variable value $year_variable = $post_year; // Now we can display the rest of the loop echo '
'; $src = wp_get_attachment_image_src( get_post_thumbnail_id(), thumbnail, false); echo '
' . the_title() . '
' . the_field('title') . '
' . str_replace( ' ', '', get_field('sub_heading' ) ) . '
'; echo '
'; } }

Dies sollte Ihnen eine grundlegende Vorstellung davon geben, wie Ihre Taxonomie-Archivseite aussehen sollte