WP_Query orderby post__in permanece inefectivo en el Loop
Estoy intentando consultar un array personalizado de posts para la página de inicio, tratando de mantener el orden dado en el array. Hasta cierto punto funciona bien, WordPress encuentra los posts, pero en el Loop el orden está todo mezclado de nuevo.
En primer lugar, estoy usando el hook pre_get_posts
para cambiar la consulta principal en la página de inicio, que se ve algo así:
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' );
}
¡El orden en la página de inicio está todo mezclado! No sigue ni el array especificado, ni las fechas de publicación (que es el valor predeterminado). En su lugar, es 127, 103, 14, 115.
Hice un var_dump del global $wp_query
en la página de inicio, solo para verificar qué sucedió, y el SQL que consultó fue efectivamente
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
¡Así que no hay problema ahí! Eso es exactamente lo que debería suceder. Sin embargo, el array de posts en $wp_query->posts
tiene el orden incorrecto.
Podrás notar que hay un tipo de post personalizado 'product'
incluido en la consulta. ¿Es ese el culpable? ¿Alguna idea de dónde buscar?
