我正在试图弄清楚如何构建一个按日期获取帖子的WordPress查询。
我的意思是,我想要一种输出我的WordPress帖子的方法:
<div class="day-posts">
<div class="day">
<div class="title">Monday 1st January 2014</div>
<div class="posts">
<div class="post">
<div class="title">Post for this day</div>
<div class="content">Lorum ipsum dolar sit amet</div>
</div>
</div>
</div>
<div class="day">
<div class="title">Tuesday 2nd January 2014</div>
<div class="posts">
<div class="post">
<div class="title">Post for this day</div>
<div class="content">Lorum ipsum dolar sit amet</div>
</div>
</div>
</div>
</div>
这需要使用“post_status = future”查询选项来处理尚未发布的帖子。
我花了大约一个小时在网上搜索,看看有人之前做过这样的事情,但不幸的是我没有找到任何可行的东西。
我自己也做了一些尝试,但不幸的是,我无法想出任何有用的东西。
有没有人对如何做到这一点有一些建议或见解?
由于
答案 0 :(得分:1)
<?php
$query = new WP_Query(array('orderby' => 'post_date', 'order' => 'DESC')); //Orders posts by post_date in descending order
// The Loop
if ($query->have_posts()) {
echo '<div class="day-posts">';
while ($query->have_posts()) {
$query->the_post();
echo '<div class="day">';
the_date('l jS F Y', '<div class="title">', '</div>'); //Formats date, before echo, after echo
echo '<div class="posts">';
echo '<div class="post">';
the_title('<div class="title">', '</div>'); //echo title
echo '<div class="content">';
the_content(); //echo content
echo '</div></div></div></div>';
}
echo '</div>';
}
?>
我在几分钟内把它放在一起,抱歉我没有连接并且一切都很好,但你可以做到。
答案 1 :(得分:0)
虽然乍一看它看起来像一个简单的任务,但用单个查询构建一个嵌套循环是很棘手的。
第一步是构建一个查询,为了演示,我将以升序(posts_per_page=-1
)的所有帖子(order=asc
)发布任何帖子状态(post_status=any
)。可以使用'post_status' => array( 'publish', 'future' )
(documentation)等参数数组来更改帖子状态。
下一步是构建多维数组的帖子:
$posts_by_day = array_reduce( $query->posts, function( $r, $v ) {
$r[ date( 'Y-m-d', strtotime( $v->post_date ) ) ][] = $v;
return $r;
});
一个看起来像这样的数组:
Array ( [2014-03-17] => Array ( [0] => WP_Post Object ( ... ) [1] => WP_Post Object ( ... ) ) [2014-03-24] => Array ( [0] => WP_Post Object ( ... ) [1] => WP_Post Object ( ... ) [2] => WP_Post Object ( ... ) ) ... )
最后循环遍历一个数组,在外循环中按日期循环,并在内循环中循环该日期的帖子。 setup postdata()用于设置全局发布数据,以便模板标记可以在当前发布上下文中使用。
<?php
$query = new wp_query( 'post_status=any&order=asc&posts_per_page=-1' );
$posts_by_day = array_reduce( $query->posts, function( $r, $v ) {
$r[ date( 'Y-m-d', strtotime( $v->post_date ) ) ][] = $v;
return $r;
});
?>
<?php if ( $posts_by_day ) : ?>
<div class="day-posts">
<?php foreach( $posts_by_day as $day => $day_posts ) : ?>
<div class="day">
<div class="title"><?php echo date( 'l jS F Y', strtotime( $day ) ); ?></div>
<div class="posts">
<?php foreach( $day_posts as $post ) : setup_postdata( $post ); ?>
<div class="post">
<div class="title"><?php the_title(); ?></div>
<div class="content"><?php the_content(); ?></div>
</div>
<?php endforeach; ?>
</div>
</div>
<?php endforeach; wp_reset_postdata(); ?>
</div>
<?php endif; ?>