WP_Query orderby post__in rămâne ineficient în Loop
Încerc să interoghez un array personalizat de postări pentru pagina principală, încercând să mențin ordinea dată în array. Într-o anumită măsură funcționează bine, WordPress găsește postările, dar în Loop ordinea este amestecată din nou.
În primul rând, folosesc hook-ul pre_get_posts
pentru a modifica interogarea principală pe pagina de start, care arată cam așa:
if ( is_home() && $query->is_main_query() ) {
$query->set( 'post_type', array( 'post', 'page', 'product' ) );
$query->set( 'post__in', array( 103, 14, 127, 115 ) );
$query->set( 'orderby', 'post__in' );
}
Ordinea pe pagina principală este complet amestecată! Nu urmează nici array-ul specificat, nici datele de publicare (care este implicit). În schimb, este 127, 103, 14, 115.
Am făcut var_dump la global $wp_query
pe pagina principală, doar pentru a verifica ce s-a întâmplat, și SQL-ul interogat era într-adevăr
SELECT SQL_CALC_FOUND_ROWS wp_posts.ID
FROM wp_posts
WHERE
1=1 AND wp_posts.ID IN (103,14,127,115)
AND wp_posts.post_type IN ('post', 'page', 'product')
AND (wp_posts.post_status = 'publish' OR wp_posts.post_author = 1 AND wp_posts.post_status = 'private')
ORDER BY FIELD( wp_posts.ID, 103,14,127,115 )
LIMIT 0, 10
Deci nicio problemă acolo! Exact asta ar trebui să se întâmple. Array-ul de postări din $wp_query->posts
are totuși ordinea greșită.
Poate ați observat că există un tip de postare personalizat 'product'
inclus în interogare. Acesta să fie problema? Aveți vreo idee unde să caut?
