利用$wpdb自定义查询可以调用某年下的月份归档, 例如调用2013年月份归档的代码如下所示。

// Get archive by year
global $wpdb, $wp_locale;
$year = 2013;
$query = "SELECT DISTINCT MONTH(post_date) AS `month` FROM $wpdb->posts WHERE `post_type` = 'post' AND `post_status` = 'publish' AND YEAR(post_date) = $year ORDER BY `month` DESC";
$months = $wpdb->get_results($query);

echo '<ul>';
echo '<li><a href="'.get_year_link( $year ).'">'.sprintf('%d', $year).'</a>';
echo '<ul class="month-list">';
foreach( $months as $month ) {			
	$text = sprintf(__('%1$s'), $wp_locale->get_month($month->month));
	echo '<li><a href="'.get_month_link( $year, $month->month).'">'.$text.'</a></li>';
}
echo '</ul></li></ul>';

输出如下:

<ul>
	<li><a href="http://yourdomain.com/2013/">2013</a>
		<ul class="month-list">
			<li><a href="http://yourdomain.com/2013/11/">十一月</a></li>
			<li><a href="http://yourdomain.com/2013/09/">九月</a></li>
			<li><a href="http://yourdomain.com/2013/08/">八月</a></li>
			<li><a href="http://yourdomain.com/2013/06/">六月</a></li>
			<li><a href="http://yourdomain.com/2013/02/">二月</a></li>
		</ul>
	</li>
</ul>

6条留言

  1. 问一下,这种直接写 MySQL 语句然后来查询,跟使用 WP_Query 类构造的查询,实现相同的需求,有什么差别?会有性能和效率方面的吗?

    1. 我对WP Query没有很详细的研究,以下是我目前的理解。
      WP Query有固定的参数,要不要用最直接的判断方式就是通过它的参数能否查到你要的数据。
      其次,WP Query查询返回的内容比较多,如果你的查询很简单且只需返回一两个字段,那用WP Query会有点杀鸡焉用宰牛刀的感觉。sql查询的信息越多,占用的资源就越多。但WP Query是经过优化的WordPress sql查询,如果是WP Query的经典用法,最好不要自己写。

  2. 这个月份是在哪里修改让他格式变成11月 10月这样的数字格式,后台修改时间格式没反应

    1. 输出月份名称的代码$text = sprintf(__(‘%1$s’), $wp_locale->get_month($month->month));
      你改成$text= $month->month . ‘月’;就行了,硬编码简单。

  3. 谢谢谢谢,搞定了

评论功能已关闭