我有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
答案 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没有实现它的排序算法,因此编写的任何查询都会很慢。你也会限制自己向前发展。
我猜你正在对网页上的列做些什么,这就是你想要按此顺序排列结果的原因。如果是这种情况,有很多方法可以实现它,而无需以这种方式重新排序结果。
不试图听起来令人反感,这听起来像是一个使问题过于复杂的情况,它可以在此过程中提前解决,而不是修补数据源本身。
如果你可以自己发送你自己的结果(也许在另一个问题上更好?)那么你可能会得到更好的结果。