WP_Query orderby post__in не работает в цикле
Я пытаюсь получить пользовательский массив записей для главной страницы, стараясь сохранить порядок, заданный в массиве. В какой-то степени это работает, WordPress находит записи, но в цикле порядок снова перемешивается.
Прежде всего, я использую хук pre_get_posts
для изменения основного запроса на главной странице, который выглядит примерно так:
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' );
}
Порядок на главной странице полностью перемешан! Он не следует ни указанному массиву, ни датам публикации (которые установлены по умолчанию). Вместо этого получается 127, 103, 14, 115.
Я сделал var_dump global $wp_query
на главной странице, чтобы проверить, что произошло, и SQL-запрос действительно был таким:
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
Так что здесь нет проблем! Это именно то, что должно происходить. Однако массив записей в $wp_query->posts
имеет неправильный порядок.
Вы можете заметить, что в запрос включен пользовательский тип записи 'product'
. Может быть, это и есть причина? Есть идеи, где искать проблему?
