我想按月查询帖子

时间:2016-09-15 作者:Arafat Rahman

我有一个页面,我想每月显示博客帖子。如果本月没有帖子,我想显示上个月的帖子。如下图所示。它显示了8月份的帖子,因为9月份没有帖子。enter image description here

下面是我本月发布的代码:

    <?php 
 $args = array(\'date_query\' => array(
               \'year\' => date( \'Y\' ),
               \'monthnum\' => date( \'m\' ),
                ),
                    \'posts_per_page\' => 10,
                    \'paged\' => $paged,
                    \'order\' => \'ASC\',
                    );
  $query = new WP_Query( $args );
  if ( $query->have_posts() ): while($query->have_posts()): $query->the_post(); ?>

                <h2>
                <a href="<?php the_permalink(); ?>" rel="bookmark" title="Permanent Link to <?php the_title_attribute(); ?>"><?php the_title(); ?></a>
                </h2>

                <p>
                    <?php the_content();?>
               </p>

<?php endwhile; else : ?>
                    <p><?php _e( \'Sorry, no posts matched your criteria.\' ); ?></p>
               <?php endif; // Reset Post Data
              wp_reset_postdata();?>
但是,如果当月没有帖子,我如何显示前一个月的帖子

2 个回复
最合适的回答,由SO网友:cjbj 整理而成

首先,获取当前月份和年份:

$month = int(current_time(\'m\'));
$year = int(current_time(\'Y\'));
接下来,获取本月的帖子:

$query = new WP_Query( \'year=\' . $year . \'&monthnum=\' . $month );
如果查询返回前一个月的空查询,并重复此操作,直到找到非空月份:

while (empty($query)) {
  $month = $month-1;
  if ($month == 0) { $month = 12; $year=$year-1;}
  $query = new WP_Query( \'year=\' . $year . \'&monthnum=\' . $month );
  }

SO网友:sdexp

我有一个类似的代码,但它只是计算帖子。如果您在SQL中获取所需的信息,像这样的东西应该可以工作。。。

global $wpdb;
$searchmonth = sprintf("%02s", absint($monthint));
$searchyear = 2016;

$found_posts = $wpdb -> get_var("SELECT COUNT(*) FROM $wpdb->posts WHERE post_status = \'publish\' AND post_type = \'post\' AND post_date LIKE \'%-$searchmonth-%\' AND post_date LIKE \'$searchyear%\' ");

if($found_posts){
      /* do something */
}else{

      if(1!=$monthint){
         $monthint--;
      }else{
         $monthint=12;
         $searchyear--;
      }
      /* get info for previous month */
}
$wpdb -> flush();

相关推荐

GET_POSTS查询大约需要40秒来执行

我在get\\u帖子中有一个元查询,它需要花很长时间才能完成。它工作得很好,但只是时间太长了。我有一个名为event. 在每个event 发布后,有自定义元数据:post\\U sort\\U日期(事件日期YmdHis 格式,用于排序)我需要做的是获取下一个事件,该事件相对于$year 和$month 变量。所以如果$year = 2021 和$month = 10 (2021 10月)然后应该在2021 11月或之后找到第一个事件。我下面的查询很好,但很慢。执行大约需要40秒,我不知道为什么。$next