WP_QUERY ORDERBY POST__IN在循环中保持无效

时间:2013-08-01 作者:Max

我试图为主页查询一个自定义帖子数组,试图维护数组中给定的顺序。在某种程度上,这很好,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\' 包含在查询中。那是罪魁祸首吗?知道去哪里找吗?

2 个回复
SO网友:Akin Adebowale

将orderby设置为post__in. 这将保留post\\uu in数组中给定的post ID顺序(3.5版可用)。

$args = array (
    \'posts_per_page\' => -1,
    \'post__in\' => $ids,
    \'orderby\' => \'post__in\' 
);

SO网友:Max

完全是我的错,我有一个旧函数the_posts 它自己做了一些分类。我忘记删除旧代码。现在它运行得很好。

结束

相关推荐

按META_KEY查询和ORDER BY META_VALUE_Num返回orderby日期

我正在尝试使用orderby 和自定义WP_Query wordpress的功能。它可以很好地按元数据选择项目并按date.不幸的是,我似乎无法获得由meta_value 数字。以下是查询的参数:$args = array( \'post_status\' => \'publish\', \'post_type\' => \'participant\', \'order\'