Get list of months with posts

时间:2012-05-16 作者:thedev

我正试图在我的自定义主题上添加一个基于月后的过滤器,类似于归档文件,但有一些不同。

什么是最好的方式来获得一份我们有帖子的月份列表?

谢谢Alex

我使用了以下查询:

 $wpdb->get_results("SELECT DISTINCT YEAR(post_date) AS `year`, MONTH(post_date) AS   `month`, count(ID) as posts 
                     FROM $wpdb->posts 
                     WHERE post_type = \'post\' AND post_status = \'publish\' 
                     GROUP BY YEAR(post_date), MONTH(post_date) ORDER BY post_date DESC"
无法使用wp_get_archives 函数,因为它只返回以下格式:

html - In HTML list (<li>) tags and before and after strings. This is the default.
option - In select (<select>) or dropdown option (<option>) tags.
link - Within link (<link>) tags.
custom - Custom list using the before and after strings.

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

Core在这里帮不了你。你必须做一个&hellip;

自定义查询

这是一个保存查询,我在管理UI屏幕上使用它来获取在自定义分页中使用它们的帖子的月份总数。请注意,我不仅查询已发布的帖子,还考虑到可能存在一些限制集,然后应用它。

$post_status = esc_attr( $_GET[\'post_status\'] );
$post_status = in_array( $post_status, $GLOBALS[\'avail_post_stati\'] )
    ? " AND post_status = {$post_status}"
    : \'all\'
;
\'all\' === $post_status AND $post_status = \'\';

$total_page_dates = $wpdb->get_results( $wpdb->prepare( "
    SELECT
        YEAR( post_date )  AS year,
        MONTH( post_date ) AS month,
        count( ID )        AS posts
    FROM {$wpdb->posts}
    WHERE
        post_type = %s
        %s
    GROUP BY
        YEAR( post_date ),
        MONTH( post_date )
    ORDER BY post_date
    ASC
", get_current_screen()->post_type, $post_status ) );
然后您就可以检查您的结果了

// Inspect the result
var_dump( $total_page_dates );
可能如下所示:

array (size=4)
  0 => 
    object(stdClass)[1847]
      public \'year\' => string \'2013\' (length=4)
      public \'month\' => string \'6\' (length=1)
      public \'posts\' => string \'19\' (length=2)
  1 => 
    object(stdClass)[1846]
      public \'year\' => string \'2013\' (length=4)
      public \'month\' => string \'7\' (length=1)
      public \'posts\' => string \'17\' (length=2)
  2 => 
    object(stdClass)[1845]
      public \'year\' => string \'2013\' (length=4)
      public \'month\' => string \'8\' (length=1)
      public \'posts\' => string \'8\' (length=1)
  3 => 
    object(stdClass)[1844]
      public \'year\' => string \'2013\' (length=4)
      public \'month\' => string \'9\' (length=1)
      public \'posts\' => string \'2\' (length=1)
然后,您可以循环遍历它,或者简单地获取第一个或最后一个数组项以获得范围。计数-count( $total_page_dates ) - 将告诉您得到了多少个月,等等。请记住,每个数组值都是object, 所以你必须这样访问它

$posts_in_first_month = total_page_dates[0]->posts;

SO网友:Michael Ecklund

尝试wp_get_archives()

过去十二个月按月显示存档列表,仅显示最近十二个月的存档列表。

<?php wp_get_archives(\'type=monthly&limit=12\'); ?>
过去十五天按日期显示存档列表,仅显示过去十五天。

<?php wp_get_archives(\'type=daily&limit=15\'); ?>
最近二十篇文章

显示按文章标题列出的最近二十篇文章的存档列表。

<?php wp_get_archives(\'type=postbypost&limit=20&format=custom\'); ?>

For a non-formatted solution, consider using query_posts()

<?php 
    $allPosts = query_posts(\'cat=6&monthnum=04&year=2011\');
    print_r($allPosts); 
?>

SO网友:Rajeev Vyas

这是wp\\u get\\u archive内部用于月份归档的查询

$query = "SELECT YEAR(post_date) AS `year`, MONTH(post_date) AS `month`, count(ID) as posts FROM $wpdb->posts $join $where GROUP BY YEAR(post_date), MONTH(post_date) ORDER BY post_date $order $limit";
除了一起使用distinct和group-by之外,您正在做同样的事情。

结束

相关推荐

使用新的WP-Query()从循环中过滤后期格式;

嗨,我目前正在为我的博客构建一个主题。下面的代码指向最新的帖子(特色帖子)。因为这将有一个不同的风格比所有其他职位。然而我想过滤掉帖子格式:链接使用我在循环中定义的WP查询,因为它给我带来了更多的灵活性。我该怎么做呢? <?php $featured = new WP_Query(); $featured->query(\'showposts=1\'); ?> <?php while ($featured->have_post