基于元数组创建归档列表

时间:2012-01-31 作者:Ryan Palmer

我有一个“事件”自定义帖子类型,其中一个元字段用于事件日期。我已根据上一个问题的答案成功创建了存档页(年和月)(here). 现在,我正在尝试创建一个归档列表,有点像wp\\U get\\U归档文件。示例:

2012

2011年1月、2月、3月等

1月、2月、3月等,我运行的查询从meta\\u键收集所有日期如下:

$query = $wpdb->get_col( "SELECT DISTINCT meta_value FROM $wpdb->postmeta WHERE meta_key = \'event_date\' ORDER BY meta_value DESC" );
但我不知道如何才能像上面的例子那样把这些数据列出来。我知道我可以用foreach循环输出唯一的日期。我的输出如下:

2012-07-152011-06-072011-01-10

我完全不确定是否要按列表格式对其进行排序。非常感谢您的帮助!

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

你看过PHP的吗date function?

一个简单的例子:

 $dates = $wpdb->get_col( /*your sql*/ );

 if( $dates )
 {
      $archive_year = "";

      foreach( $dates as $date )
      {
           $the_date = strtotime( $date );

           $year = date( \'Y\', $the_date ); //4 digit year, ex 1999
           $month = date( \'F\', $the_date ); //Full textual month, ex January

           if( $year != $archive_year  )
           {
                if( !empty( $archive_year ) ) echo "</ul>";

                echo "
                     <h2>$year</h2>
                     <ul>
                          <li>$month</li>
                ";

           }
           else
           {
                echo "<li>$month</li>";

           }

      }
 }

Second example

 $dates = $wpdb->get_col( /*your sql*/ );

 if( $dates )
 {
      $archive_year = date( \'Y\' ); //Get current year

      echo "<h2>$archive_year</h2>";

      echo "<ul>";

      foreach( $dates as $date )
      {
           $the_date = strtotime( $date );

           $year = date( \'Y\', $the_date ); //4 digit year, ex 1999
           $month = date( \'F\', $the_date ); //Full textual month, ex January

           if( $year == $archive_year  )
           {


                echo "<li>$month</li>";

           }

      }

      echo "</ul>";

 }

SO网友:mor7ifer

$query = \'
    SELECT
        YEAR(meta_value) as `year`,
        MONTH(meta_value) as `month`,
        COUNT(DISTINCT post_id) as `posts`
    FROM \'.$wpdb->postmeta.\'
    WHERE
        meta_key = "event_date"
    ORDER BY    meta_value DESC\';
$results = $wpdb->get_results( $query );
这应该是一个非常坚实的开始,你可能需要调整它,你可能想考虑做一个JOIN 获取post\\u状态等,这样您就不需要提交草稿了(虽然如果您愿意,可以在PHP中这样做,但无论哪种方式都可以,但我认为SQL可能会更有效)。我唯一担心的是MySQL可能不喜欢返回YEAR 从非datetime类型。。。如果这不起作用,你就必须使用像@Shane\'s这样的PHP解决方案。

结束

相关推荐

显示Archives.php中的所有自定义帖子类型

我该怎么做?archive.php 只有以下内容:wp_get_archives(\'type=monthly\'); 以及wp_get_archives() 没有显示所有帖子类型的参数。我也认为archive-[post_type].php 不是我要找的,因为我希望所有帖子类型都显示在一个归档页面中。谢谢W