Ich habe in den letzten Tagen ein Problem behoben und bin im Kreis weitergegangen. Könnte wirklich ein neues Paar Augen gebrauchen, um mir bei der Beantwortung dieser Frage zu helfen ...
Ich arbeite also mit einer WordPress-Site, auf der Posts einige benutzerdefinierte Felder haben, die für die Abfrage relevant sind, die ich ausführen muss: "Post-Expired" und "My-Sort-Order". Wenn ich meine query_posts ausführe, möchte ich, dass die Ergebnisse Posts sind, bei denen "post-expired" NICHT "yes" ist (dieser Teil funktioniert in meinem Code). Ich möchte auch, dass die Ergebnisse nach dem DESC-Nummernwert von "Meine Sortierreihenfolge" sortiert werden (funktioniert auch) UND wenn es einen Zusammenhang mit "Meine Sortierreihenfolge" gibt, möchte ich eine sekundäre Sortierung nach Datum mit den neuesten Beiträgen zuerst.
Bei der sekundären Sortierung nach Datum habe ich Probleme.
Hier ist der Code, den ich gerade habe:
<?php
$args = array(
'paged' => $paged,
'meta_query'=> array(
array(
'key'=>'post-expired',
'value'=> 'yes',
'compare' => '!='
)
),
'meta_key'=>'my-sort-order',
'orderby'=>'meta_value_num',
'order'=>'DESC'
);
$args = array_merge( $args , $wp_query->query );
query_posts( $args );
?>
Mit dem obigen Code erhalte ich die nicht abgelaufenen Beiträge korrekt zurück und sie sind nach absteigender Reihenfolge sortiert (dh 100 werden vor 99 angezeigt usw.). Aber wenn beide Posts den gleichen Wert für die Sortierreihenfolge haben, passiert eine Art sekundäre Sortierung, die ich scheinbar nicht kontrollieren kann (und nicht herausfinden kann, worauf sie tatsächlich sortiert wird).
Meine erste Idee, dies zu lösen, bestand darin, "meine Sortierreihenfolge" nur dann um Werte zu erweitern, wenn ich eine bestimmte Sortierreihenfolge für diesen Beitrag festlegen wollte. Ich dachte, wenn der Wert für dieses Feld für den Rest der Beiträge leer gelassen würde, würden sie einfach in der Standardsortierung nach DESC-Datum zurückgegeben (nach den Beiträgen mit einer festgelegten Sortierreihenfolge). Was jedoch tatsächlich geschah, waren Beiträge, für die kein Wert für die Sortierreihenfolge festgelegt wurde ...
Als Nächstes habe ich versucht, mehrere Werte in das Feld orderby wie folgt hinzuzufügen:
('orderby'=>'meta_value_num date')
Das hat beide Sortierreihenfolgen, die ich anstrebte, völlig in die Luft gesprengt und die Posts auf unerwartete Weise zurückgegeben. Ich hatte den Eindruck, dass mehrere orderby-Werte zulässig waren, aber aus irgendeinem Grund funktioniert es hier nicht.
Zum jetzigen Zeitpunkt bin ich mir nicht sicher, wie eine dieser potenziellen Lösungen funktionieren soll. Weiß jemand, wie ich entweder 1) Beiträge zuerst nach dem Feld "Meine Sortierreihenfolge" sortieren und dann die verbleibenden Beiträge ohne Wert in diesem Feld mit der Standarddatumsortierung zurückgeben kann; oder 2) Finden Sie heraus, wie Sie die sekundäre Reihenfolge nach Sortierung steuern können, damit alle Posts, die mit "Meine Sortierreihenfolge" verknüpft sind, nach Datum sortiert werden (neueste zuerst).
quelle