重新排序GET_POSTS查询结果

时间:2014-10-28 作者:hml

我有一个查询,它从最近的3篇轮播帖子中提取字段:

get_posts(\'posts_per_page=3\')
我需要重新排序结果

1、2、3

是的

3、1、2。

有什么办法吗?

3 个回复
SO网友:s_ha_dum

按照您想要的方式重新排序真的很简单。概念验证:

$p = array(1,2,3);
var_dump($p);

array_push($p,array_shift($p));
var_dump($p);
使用WordPress代码:

$p = get_posts(\'posts_per_page=3\');
array_push($p,array_shift($p));
var_dump($p);
为了让它更有趣,您可以对过滤器执行同样的操作。自从get_posts() 使用wp_query() 您可以使用post_results 钩子以对结果重新排序。

function post_shift_wpse_166761($p) {
  remove_filter(\'posts_results\',\'post_shift_wpse_166761\');
  array_push($p,array_shift($p));
  return $p;
}
add_filter(\'posts_results\',\'post_shift_wpse_166761\');

$p = get_posts(
  array(
    \'suppress_filters\' => false,
    \'posts_per_page\' => 3
  )
);
var_dump(wp_list_pluck($p,\'ID\'));
请注意,您还必须通过suppress_filters 参数到get_posts().

SO网友:Robert hue

我认为WordPress没有提供任何方式来订购您喜欢的帖子。它有ASCDESC 列出帖子的顺序。

但您可以为每个旋转木马帖子创建一个自定义字段,以定义旋转木马项目订单。假设您创建了名为carousel-order 并为每个帖子添加数值。

然后您可以像这样添加自定义订单。

get_posts(
    array(
        \'posts_per_page\' => \'3\',
        \'meta_key\' => \'carousel-order\',
        \'orderby\' => \'meta_value_num\'
    )
);

SO网友:hml

谢谢你的想法。最后,我使用偏移量为旋转木马重新订购创建了两个不同的查询:

第一个查询显示第三个最近的帖子:

$args = array( \'posts_per_page\' => 1, \'offset\'=> 2 );
$thirdPost = get_posts( $args );
然后将所需字段放入第一个转盘滑动分区。

下一个查询获取第一个和第二个最近的帖子:

$args2 = array( \'posts_per_page\' => 2, \'offset\'=> 0 );
$firstPosts = get_posts( $args2 );
然后使用“for each”将所需字段放入第二个和第三个旋转木马幻灯片分区。

结束

相关推荐

Ajax wp_Query条件标记不起作用

我在尝试ajaxwp_query, 我用以下代码成功地获得了主页帖子。然后我补充道conditional tags 修改其他页面的查询,如Category page 问题是conditional tags 没有在这个功能内工作,它一直给我相同的主页帖子。我在中使用此代码function.php 文件:add_action( \'wp_ajax_wp_ajax_posts\', \'wp_ajax_posts_init\' ); function wp_ajax_posts_init() {