显示所有12个月,无论他们有帖子

时间:2013-06-02 作者:Juanma

我需要显示一年中所有月份的档案页面。无论一个月内是否有帖子发布,都必须显示所有12个月。像这样:

年份:1-2-3-4-5-6-7-8-9-10-11-12

当然,发布帖子的月份是链接。没有发布帖子的月份简直就是一个词

这是我的代码:

<ul>

<?php
    global $wpdb;
    $limit = 0;
    $year_prev = null;
    $months = $wpdb->get_results("SELECT DISTINCT MONTH( post_date ) AS month , YEAR( post_date ) AS year, COUNT( id ) as post_count FROM $wpdb->posts WHERE post_status = \'publish\' and post_date <= now( ) and post_type = \'post\' GROUP BY month , year ORDER BY post_date DESC");
    foreach($months as $month) : $year_current = $month->year;
    if ($year_current != $year_prev){ if ($year_prev != null){ ?>

    <?php } ?>

    <li> <a class="year" href="<?php bloginfo(\'url\') ?>/<?php echo $month->year; ?>/">> <?php echo $month->year; ?></a>

    <?php } ?>

    <a class="month" href="<?php bloginfo(\'url\') ?>/<?php echo $month->year; ?>/<?php echo date("m", mktime(0, 0, 0, $month->month, 1, $month->year)) ?>"><?php echo date_i18n("M", mktime(0, 0, 0, $month->month, 1, $month->year)) ?></a>

    <?php $year_prev = $year_current; if(++$limit >= 10) { break; } endforeach; ?></li>
</ul>
我完成了我假装要做的事情,只是展示了12个月来的一切。

1 个回复
SO网友:s_ha_dum

我认为这是正确的:

$year = 2013;
$month = 0;
$qry = new WP_Query(
  array(
    \'post_type\'=>\'post\',
    \'posts_per_page\'=>-1,
    \'orderby\'=>\'date\',
    \'order\'=>\'ASC\',
    \'ignore_sticky_posts\' => true,
    \'year\' => $year,
  )
);

while ($month < 12) {
  $month++;
  echo date(\'M\',strtotime(\'2000-\'.str_pad($month, 2, \'0\', STR_PAD_LEFT).\'-01 00:00:01\')).\'<br>\';
  if ($qry->have_posts()) {
    while ($qry->have_posts()) {
      if (date(\'n\',strtotime($qry->post->post_date)) == $month) {   
        echo " -- ";
        the_title();
        echo \'<br />\';
        $qry->the_post();
      } else {
        break;
      }
    }
  } 
}
当然,您需要设置$year 到你真正想要的那一年。

这应该贯穿整个12个月,echo检查每一个,检查中匹配的帖子$qry 后果

只打印月份名称和有帖子的月份的链接。

$year = 2013;
$month = 0;
$qry = new WP_Query(
  array(
    \'post_type\'=>\'post\',
    \'posts_per_page\'=>-1,
    \'orderby\'=>\'date\',
    \'order\'=>\'ASC\',
    \'ignore_sticky_posts\' => true,
    \'year\' => $year,
  )
);

$months = array();
if (!empty($qry->posts)) {
  foreach ($qry->posts as $p) { 
    $months[date(\'n\',strtotime($p->post_date))] = $p->post_date;
  }
}

while ($month < 12) {
  $month++;
  $monthname = date(\'M\',mktime(0,0,0,$month,1,$year));
  echo \'<li>\';
    if (isset($months[$month])) {
      echo \'<a class="year" href="\'.get_month_link($year,$month).\'" />\'.$monthname.\'</a>\'.\'<br>\';
    } else {
      echo $monthname.\'<br>\';
    }
  echo \'</li>\';
}

结束

相关推荐

$wpdb在自定义帖子类型上使用SELECT查询不返回结果,在默认帖子类型上工作

编辑:添加更多背景信息。我编写了一个插件,可以在贴子页面中添加一个元框。发布帖子时,插件将为帖子生成一个随机ID,并将随机ID和帖子guid插入到数据库中的自定义表中。发布后或编辑后,插件查询自定义表以根据帖子guid检索帖子的随机ID,并在元框中打印出随机ID。在我将add\\u meta\\u box函数中的帖子类型从“post”更改为“coult”之前,一切都很好。插件将生成随机ID并将其和post guid保存到表中,但在元框中会出现此错误:注意:正在尝试获取/home/qultshow/publ