列出某个父级内的页面并显示已发布月份

时间:2011-08-08 作者:Rob

如何列出某个父级(ID=917)中的所有页面,并显示它们以这种格式发布的月份和年份:

2011年8月

这是一个页面(链接到页面)

这是另一页(链接)

2011年7月

2011年6月

这是另一个页面(链接)等

更新:还有,以防万一,我怎样才能只显示其中包含页面的月份?所以从上面的例子来看,它不会显示Jul。

Please don\'t tell me to use posts instead of pages as that isn\'t an option on the setup I have.

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

好的,首先,在主题文件夹中创建一个php文件,并给它起一个不会与任何本机主题模板文件archive冲突的名称。php,索引。php等。。。(给它起一个唯一的名字,比如page-list-by-month.php).

将以下代码添加到该文件中。

<?php
/**
 * Template Name: Pages by Month
 */
get_header(); 
?>

<!-- Your opening outer HTML -->

<?php 
$args = array( 
    \'post_type\' => \'page\', 
    \'orderby\' => \'date\', 
    \'order\' => \'asc\', 
    \'nopaging\' => 1, 
    \'post_parent\' => 146 // <--- Adjust this to the appropriate parent
);
$data = array();

query_posts( $args ); 

if( have_posts() ) :
    while( have_posts() ) : the_post();

        $date = explode( \'%\', get_the_date( \'Y%m\' ) );
        $year = $date[0];
        $month = $date[1];
        $data[$year][$month][] = get_the_ID();

    endwhile;
endif;

// testing
// print \'<pre>\';print_r( $data );print \'</pre>\';

foreach( $data as $year => $months ) {
    foreach( $months as $month => $page_ids ) {
        echo date( \'F\', mktime( 0, 0, 0, $month ) ) . \' 2011<br />\';
        foreach( $page_ids as $page_id )
            echo \'<a href="\' . apply_filters( \'the_permalink\', get_permalink( $page_id ) ) . \'">\' . apply_filters( \'the_title\', get_the_title( $page_id ) ) . \'</a><br />\';
    }
}
?>

<!-- Your closing outer HTML -->

<?php //get_sidebar(); ?>
<?php get_footer(); ?>
保存文件。

现在,创建一个页面,并在页面属性元框中选择Pages by Month模板,您为内容和标题输入的内容并不重要,尽管您为该页面提供的标题将决定URL,因此请考虑您希望该特殊页面出现的位置,并使用适合该位置的标题。

示例标题->我的页面存档=http://example.com/my-page-archive

创建页面并附加模板后,即是如此。。

NOTE: 确保调整post_parent 参数数组中的值,并确保在指定的位置添加适当的HTML(标记将根据主题而有所不同,因此我将其排除在示例之外)。

希望有帮助:)(哦,马克就是我——当我不在我的普通电脑旁的时候)。。

结束

相关推荐