我试图为主页查询一个自定义帖子数组,试图维护数组中给定的顺序。在某种程度上,这很好,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\\u把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
但是,顺序错误。
您可能会注意到有一个自定义的post类型\'product\'
包含在查询中。那是罪魁祸首吗?知道去哪里找吗?