0

我在订购循环时遇到了一些麻烦!我想以倒计时样式(5、4、3、2、1)显示帖子,但使用元数据和用户输入的数据。

我有这个数据:

Post A with meta data (score = 2)
Post B with meta data (score = 4)
Post C with meta data (score = 6)
Post D with meta data (score = 8)
Post E with meta data (score = 10)

示例用户想要显示前 3 个倒计时,因此 $user_input = 3。

然后页面应显示:帖子 C、帖子 D、帖子 E。(按元分数排序,最后显示最佳分数)。

我有一个 wp_query 循环:

   $args = array('meta_key' => 'score', 'orderby' => 'meta_value_num', 'order' => 'ASC', 'posts_per_page' => $user_input);
   $qry= new WP_Query( $args );
        $count_posts = $qry->post_count; 
        $offset = $count_post - $user_input
        while ( $qry->have_posts()  ) : $qry->the_post();
              // echo stuff

它可以工作,除了因为它设置为 order=ASC 并且每页帖子现在设置为 3(当类别中有 5 个帖子时)它显示帖子 A、帖子 B、帖子 C。这就是我需要的显示除了它应该是 C,D,E。

我以为我需要抵消 wp_query,但我无法在 args 数组中添加“偏移量”,因为我不知道该类别中有多少帖子。我需要在 WP_Query 之后做一个 post_count 并减去 user_input 以知道我需要抵消多少。所以这就是为什么我把计算放在 $offset 上。

我的问题是。如何以正确的方式更改 WP_query?是一个

 query_posts('offset'.$offset.'&showposts'.$user_input)

在计算偏移量之后是一种不好的方法,因为它正在执行另一个查询?

有没有办法在 wp_query 设置后轻松添加参数?

多谢你们

4

1 回答 1

0

一个快速修复方法是将查询中的顺序更改为“DESC”而不是“ASC”。这将为您提供 3 个最大的分数。然后您可以使用数组中的帖子获取帖子,$qry->get_posts()但它们的顺序仍然错误。只需array_reverse()按您想要的顺序对其进行排序。循环中的唯一区别是您通常循环遍历数组等项目并使用setup_postdata()函数而不是$qry->the_post()

<?php

// Set order to DESC
$args = array('meta_key' => 'score', 'orderby' => 'meta_value_num', 'order' => 'DESC', 'posts_per_page' => $user_input);

$qry = new WP_Query( $args );

// Fetch the posts and reverse it to get the wanted order
$posts = array_reverse( $qry->get_posts() ); 

foreach ( $posts as $post ) : setup_postdata( $post ); // sets up postdata in the same way as $qry->the_post();

    // ... 

endforeach; 

wp_reset_postdata(); // reset postdata after the loop

?>
于 2013-02-21T12:40:25.737 回答