Ich arbeite an einer benutzerdefinierten Taxonomiebegriffseitenvorlage, in der die mit dem Begriff verknüpften Elemente nach Veröffentlichungsdatum sortiert werden sollen (benutzerdefiniertes Datumsfeld) - und wenn mehrere Elemente am selben Tag vorhanden sind (Formatierung wie JJJJ-MM). DD), um diese nach Titel und schließlich nach Titel zu sortieren, wenn das benutzerdefinierte Feld nicht ausgefüllt wurde (ältere Elemente).
Also habe ich es auf hundert verschiedene Arten mit einer WP_query versucht und es gibt die meisten Ergebnisse so zurück, wie ich sie haben möchte - aber in diesem Fall gibt es nur die Elemente zurück, die den meta_key von publication_date haben. Alle anderen Elemente werden ignoriert und nicht angezeigt. Ich habe eine meta_query mit der Beziehung "oder" ausprobiert und das publication_date als EXISTS und NOT EXISTS verglichen, aber das ergab 0 Ergebnisse für mich.
Außerdem wird auf der Site noch 3.5.2 ausgeführt, und sie möchten kein Upgrade durchführen.
Hier ist meine letzte Abfrage, mit der ich die Posts erhalte, bei denen das benutzerdefinierte Feld publication_date in der richtigen Reihenfolge angezeigt wird:
$term = get_queried_object(); // find the term of the taxonomy page we are on
$wp_query = new WP_Query( array(
'post_type' => 'resource',
'tax_query' => array(
array(
'taxonomy' => 'resource_types',
'field' => 'slug',
'terms' => $term->name,
)),
'meta_key' => 'publication_date',
'orderby' => 'meta_value_num',
'order' => 'DESC',
'paged' => $paged,
'posts_per_page' => '10',
));
Ich habe auch versucht, wpdb zu verwenden und eine SQL-Abfrage auszuführen, bin mir aber nicht sicher, wie ich das erreichen soll. Wenn mir jemand helfen könnte, wäre das großartig!
Danke im Voraus.
quelle
'meta_query' => array( 'relation' => 'OR', array( //check to see if date has been filled out 'key' => 'publication_date', 'compare' => '!=', 'value' => date('Y-m-d'), ), array( //if no date has been added show these posts too 'key' => 'publication_date', 'value' => date('Y-m-d'), 'compare' => 'NOT EXISTS' ) ),
aber die Bestellung funktioniert nicht: \Antworten:
Vielen Dank für Ihre Hilfe!
Am Ende brachte mir die folgende Abfrage die gewünschten Ergebnisse - die Beiträge sollten zuerst in einem benutzerdefinierten Feld von "publication_date" angezeigt und sortiert werden - sortiert nach dem Datum und wenn mehrere vom selben Datum vorhanden waren (z. B. 4 markiert) Juni 2013), würde es diese nach Titel sortieren. Nachdem alle Posts mit ausgefülltem Veröffentlichungsdatum durchlaufen wurden, werden die verbleibenden Posts in alphabetischer Reihenfolge nach Titel durchlaufen.
Dadurch erhalte ich die in derselben Abfrage festgelegten Ergebnisse und behalte meine Paginierung bei:
quelle
meta_query
auf dem gleichen Schlüssel laufen zu lassen!meta_key
es automatisch einstelle, wird es nicht einmal mit einbezogenNOT EXISTS
. Ich hoffe wirklich, dass ich etwas falsch mache.'meta_key' => 'publication_date',
.Einige Jahre später funktionierte der von CSSGirl gepostete Code nicht für mich, da es einige Posts gab, bei denen der Metaschlüssel nicht vorhanden war oder der Metaschlüssel leer war. Deshalb musste ich dies tun, um alle Posts nach Datum zu ordnen und zeigen Sie zuerst diejenigen mit einer Metaschlüsselwertanzeige an:
quelle
Ich denke, Sie müssten 2 separate Loops machen. Sie können alle in der ersten Schleife gefundenen Beiträge erfassen und sie einfach genug aus der sekundären Schleife ausschließen:
Führen Sie dann Ihre zweite Schleife aus.
quelle
echo paginate_links( array( 'base' => str_replace( $big, '%#%', esc_url( get_pagenum_link( $big ) ) ), 'format' => '?page=%#%', 'current' => max( 1, get_query_var('paged') ), 'total' => $publication_query->max_num_pages, 'prev_text' => __('Previous |'), 'next_text' => __('| Next'), ) );
Gibt es einen Grund, warum Sie den Metaschlüssel publication_date nicht für jeden Beitrag nur mit einem leeren Wert erzwingen können?
In Ihrer
save_post
Aktion würden Sie also den Metaschlüssel hinzufügen / aktualisieren, unabhängig davon, ob der$_POST
Wert leer ist oder nicht.Sie müssten ein Update-Skript ausführen, um Ihre älteren Beiträge zu durchlaufen und den Schlüssel mit einem leeren Wert hinzuzufügen. Beispiel:
Führen Sie es aus, indem Sie zu http://example.com/wp-admin/?update_old_posts navigieren
Dann können Sie die gleiche Abfrage verwenden, die Sie haben. Wenn Sie einen zusätzlichen Filter hinzufügen möchten, damit Sie nach verschiedenen Spalten in verschiedene Richtungen sortieren können, ist es für mich sinnvoll, nach Datum in absteigender Reihenfolge und nach Titel in aufsteigender Reihenfolge zu sortieren.
quelle
Ich habe eine benutzerdefinierte where-Klausel erstellt. Ich habe es mit
$wp_query->request
direkt vor meiner Hauptschleife getestet , ich kenne SQL nicht so gut, aber das schien die Dinge zum Laufen zu bringen.Alternativ könnten Sie setzen
compare
auf'EXISTS'
und die Linie in add_trending_where ändern$where .= " OR ($wpdb->postmeta.post_id IS NULL)";
. Dann müssten Sie nur den Wert des Schlüssels an einer Stelle ändern. Nochmals, hören Sie zu$wp_query->request
und spielen Sie herum, wenn Sie dies besser verstehen oder optimieren möchten.BEARBEITEN: Mir ist gerade aufgefallen, dass dies nicht funktioniert, wenn
meta_key
in der Abfrage festgelegt ist. Sie könnten verwenden,$query->set('meta_key', NULL);
wenn Sie müssen.EDIT 2: Ich habe dies mit der obigen Methode funktioniert. Aus irgendeinem Grund war es zuerst nicht (vielleicht wurde meta_key gesetzt ... ich weiß es nicht).
quelle