以特定顺序显示WP_Query结果

时间:2014-09-12 11:20:14

标签: wordpress wp-query

我有WP_Query

<?php $query = new WP_Query(
    array( "post_type" => "post",
           "showposts" => "12"
    ) );
while ($query->have_posts()) : $query->the_post(); ?>

...

我的目标是使用此功能按此顺序显示帖子:

1 3 5 7 9 11 2 4 6 8 10 12

这样就会显示6行,每行2列,如下所示:

1    2

3    4

5    6

7    8

9    10

11   12

我所拥有的页面逻辑需要此特定订单。

目前我使用短代码实现了这一目标,但这意味着有12个mySQL查询而不是1个,并且结果会以此自定义顺序显示。

我知道如果我设置一个自定义字段来指定我想要提供结果的顺序,我就可以这样做。

但是,我不想让编辑的生活复杂化,所以我希望通过在某个地方说明我希望显示WP_Query结果的顺序来实现这一目标。

我查看了post__in,但这会涉及手动提供帖子ID,所以这不是一个选项,因为这是主页,帖子号码总是不同。

基本上,无论哪个是最新的帖子(他们有什么ID),我都想这样显示:

1,3,5,7,9,11,2,4,6,8,10,12

而不是默认顺序,即:

1,2,3,4,5,6,7,8,9,10,11,12

3 个答案:

答案 0 :(得分:1)

实际上这很简单。

安装一个名为Simple Page Ordering的插件:https://wordpress.org/plugins/simple-page-ordering/

在查询中添加'oderby' => 'menu_order'参数。

此外,请使用"showposts"

,而不是使用posts_per_page

感谢。

答案 1 :(得分:1)

有一种非常简单易行的方法来实现这一目标。您可以利用内置循环计数器$wp_query->current_post。不需要自定义查询等。在你的循环中,做这样的事情

<?php if ( have_posts() ) : ?>

<?php while ( have_posts() ) : the_post();  ?>
        <?php /* Start the Loop */ ?>

        <div class="entry-content <?php if( $wp_query->current_post%2 == 1 ) echo ' left-post'; ?>">
        <?php get_template_part( 'content', get_post_format() ); ?>
        </div>

<?php endwhile; ?>

这将为每一个帖子添加一个left-post类。您现在可以相应地设置样式(浮动entry-content left并将width设置为约48%)。要避免古怪的样式问题,只需将.left-post { clear: left; }添加到样式表

即可

答案 2 :(得分:0)

我很遗憾地说,您不太可能使用WP_Query来实现这一目标。我相信你很可能以错误的方式接近这一点。

您的结果需要以结构化和统一的方式返回,并且您必须适当地处理它们,无论返回它们的方法如何。按照你提议的方式进行操作很容易引起分页问题,​​并且MySQL没有实现它的排序算法,因此编写的任何查询都会很慢。你也会限制自己向前发展。

我猜你正在对网页上的列做些什么,这就是你想要按此顺序排列结果的原因。如果是这种情况,有很多方法可以实现它,而无需以这种方式重新排序结果。

不试图听起来令人反感,这听起来像是一个使问题过于复杂的情况,它可以在此过程中提前解决,而不是修补数据源本身。

如果你可以自己发送你自己的结果(也许在另一个问题上更好?)那么你可能会得到更好的结果。

相关问题