Nachdem ich ein flaches Array von Beitrags-IDs erstellt habe, möchte ich diese Beiträge über eine benutzerdefinierte Abfrage in derselben Reihenfolge wie in meinem Array anzeigen. Der Arzt besagt, dass post__in
wird „Post-ID-Reihenfolge im post__in-Array beibehalten“. In meinem Fall ist dies jedoch nicht der Fall. Warum?
Erstellung meines Arrays von Beitrags-IDs:
if (have_rows('cases')) :
while (have_rows('cases')) : the_row();
$array_cases[] = get_sub_field('case');
endwhile;
endif;
print_r($array_cases);
Ergebnis:
Array
(
[0] => 2959
[1] => 919
[2] => 914
...
)
WP_Query():
$args = array(
'post_type' => 'iw-project',
'post__in' => $array_cases,
'orderby' => 'post__in'
);
$query_cases = new WP_Query($args);
print_r($query_cases);
Ergebnis:
WP_Query Object
(
...
[posts] => Array
(
[0] => WP_Post Object
(
[ID] => 2959
...
)
[1] => WP_Post Object
(
[ID] => 914
...
)
[2] => WP_Post Object
(
[ID] => 1974
...
)
)
)
Die Reihenfolge im resultierenden Abfrageergebnis ist falsch. Der zweite und dritte Beitrag sollten 919 und 914 lauten, nicht 914 und 1974.
Unten ist die Roh-SQL des WP_Query-Objekts:
SELECT SQL_CALC_FOUND_ROWS wp_posts.ID
FROM wp_posts
JOIN wp_icl_translations t ON wp_posts.ID = t.element_id AND t.element_type = CONCAT('post_', wp_posts.post_type)
WHERE 1=1
AND wp_posts.ID IN (2959,919,914,1593,1583,1974,1649,993,675)
AND wp_posts.post_type="iw-project"
AND (wp_posts.post_status="publish" OR wp_posts.post_status="acf-disabled")
AND ((t.language_code="en" AND wp_posts.post_type IN ('post', 'page', 'iw-project', 'iw-contact', 'iw-slide', 'iw-client')) OR wp_posts.post_type NOT IN ('post','page','iw-project','iw-contact','iw-slide','iw-client'))
ORDER BY wp_posts.menu_order, FIELD(wp_posts.ID, 2959, 919, 914, 1593, 1583, 1974, 1649, 993 ,675)
LIMIT 0, 8
Können Sie bestätigen, dass Beitrag 919 überhaupt in Ihrem Ergebnisarray enthalten ist? Hat Beitrag 919 den Beitragstyp „iw-project“ und wird er nicht gelöscht? Ich sehe 919 überhaupt nicht in Ihrem Ergebnis. Vielleicht passt es also einfach nicht zu Ihren Abfragebedingungen.
– Cave Johnson
31. Januar 2018 um 18:03 Uhr
Gute Frage. Aber ja, das ist es, auf Platz 7. Und es gehört tatsächlich zum Beitragstyp „iw-project“.
– drake035
1. Februar 2018 um 12:31 Uhr
Können Sie alle in der akzeptierten Antwort hier veröffentlichten Lösungen ausprobieren und mir mitteilen, ob sie funktionieren? wordpress.stackexchange.com/questions/220014/…
– Cave Johnson
2. Februar 2018 um 3:57
Ich habe gerade versucht, WordPress zu installieren, um Ihr Problem zu reproduzieren, konnte es aber nicht reproduzieren. Meine Abfrage behält die Reihenfolge der Beiträge aus dem korrekt bei
post__in
Array (auch ohne Hinzufügen desorder
Parameter). Können Sie bitte versuchen, das Roh-SQL von Ihrem wp_query-Objekt abzurufen? Sie können dies tun, indem Sie die Anforderungseigenschaft wie folgt ausdrucken:print_r($query_cases->request)
. Das sollte Ihnen das Roh-SQL liefern. Bearbeiten Sie die SQL, die Sie in Ihre Frage einfügen.– Cave Johnson
2. Februar 2018 um 8:39
@KodosJohnson danke, ich habe meine Frage bearbeitet und das Roh-SQL hinzugefügt
– drake035
2. Februar 2018 um 14:28