如何按季度列出作者的WordPress帖子author.php
?
当前相关author.php
代码如下(贴子为自定义类型“press Attentions”,仅供参考)。
这将显示该作者所有帖子的单一列表。但我如何将此列表按季度标题分为多个部分,即“2015年第三季度”、“2015年第四季度”、“2016年第一季度”、“2016年第二季度”?
季度是从1月1日开始的四个三个月周期。
帖子应按与当前帖子相同的顺序出现,但按季度划分。因此,最新季度标题出现在顶部,以此类推。
<!-- Press appearances -->
<?php
// Count press appearances
$post_count = $wpdb->get_var("SELECT COUNT(*) FROM $wpdb->posts WHERE post_author = \'" . $curauth->ID . "\' AND post_type = \'pressmention\' AND post_status = \'publish\'");
?>
<h5><?php echo \'<span class="label label-primary">\'.$post_count.\'</span>\'; ?> Media appearances:</h5>
<table class="table table-striped table-sm">
<tbody>
<?php // Show custom post list - http://wordpress.stackexchange.com/questions/178739/displaying-custom-post-types-in-author-php
$args = array(
\'post_type\' => \'pressmention\' ,
\'author\' => get_queried_object_id(), // this will be the author ID on the author page
\'showposts\' => 200
);
$custom_posts = new WP_Query( $args );
if ( $custom_posts->have_posts() ): while ( $custom_posts->have_posts() ) : $custom_posts->the_post();?>
<tr>
<!-- changed th, removed scope="row", was width="110" and "125" -->
<td class="col-xs-2"><?php the_time(\'M d, Y\'); ?></td>
<td class="col-xs-3"><img src="https://plus.google.com/_/favicon?domain=<?php echo get_post_meta( $post->ID,\'press_mention_information_publication-url\',true); ?>" alt="Publication"> <?php echo get_post_meta( $post->ID,\'press_mention_information_publication-name\',true); ?></td>
<td class="col-xs-7"><a href="<?php the_permalink() ?>" rel="bookmark" title="Permanent Link: <?php the_title(); ?>"><?php the_title(); ?></a></td>
</tr>
<?php endwhile; else: ?>
<!-- changed th, removed scope="row" -->
<tr><td colspan="2">No posts.</td></tr>
<?php endif; ?>
</tbody>
</table>
最合适的回答,由SO网友:birgire 整理而成
让我们定义一个助手函数,将月份映射到季度:
function wpse_get_month2quarter( $month )
{
return ceil( $month / 3 );
}
然后,我们可以考虑如何处理集合中不是整数的输入值
{1, ..., 12}
.
ps:我从这个公式中得到了这个想法Excel blog 作者:Gašper Kamenšek
要获得循环中的四分之一,我们可以使用,例如:
echo wpse_get_month2quarter( get_the_date( \'n\' ) );
Example
这里有一个循环的想法:
if ( $custom_posts->have_posts() ) :
$prev = null;
while ( $custom_posts->have_posts() ) :
$custom_posts->the_post();
$current = sprintf(
\'%d Q%d\',
get_the_date( \'Y\' ),
wpse_get_month2quarter( get_the_date( \'n\' ) )
);
if( $prev !== $current )
{
printf( \'<tr><td colspan="3">%s</td></tr>\', $current );
$prev = $current;
}
// ... etc ...
其中,我们每个季度注入一次部分,并假设查询是按日期排序的。
但有很多方法可以实现这一点。
如果可能,您应该尝试使用和修改主查询,通过pre_get_posts
, 而不是引入另一个辅助查询