WP_Query orderby post__in rimane inefficace nel Loop
Sto cercando di eseguire una query per un array personalizzato di post per la homepage, cercando di mantenere l'ordine specificato nell'array. In parte funziona, WordPress trova i post, ma nel Loop l'ordine risulta completamente mescolato.
Innanzitutto, sto usando l'hook pre_get_posts
per modificare la query principale nella homepage, che appare così:
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' );
}
L'ordine nella homepage è completamente mescolato! Non segue né l'array specificato, né le date di pubblicazione (che è l'ordinamento predefinito). Invece, è 127, 103, 14, 115.
Ho fatto un var_dump del global $wp_query
nella homepage, solo per controllare cosa fosse successo, e la query SQL generata era effettivamente
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
Quindi nessun problema lì! È esattamente quello che dovrebbe accadere. L'array di post in $wp_query->posts
tuttavia, ha l'ordine sbagliato.
Potreste notare che c'è un custom post type 'product'
incluso nella query. È questo il colpevole? Qualche idea su dove cercare?
