在一年中获取所有月份的WordPress档案

时间:2012-01-22 作者:Louis Stephens

好的,我今天刚开始写博客的代码,突然遇到了一个小问题。然而,在我提出问题之前,如果我真的解释一下我希望实现的功能,那将对我有所帮助。(您也可以在以下位置查看我的页眉薪酬http://louisstephens.cc/comps/blog.png )

在我的标题中,我将列出一年中所有月份。将选择当前月份,显示该月份的所有职位。但是,其他月份也可以选择,这样做将淡出当前月份的帖子,以显示新选定月份的帖子(以及更改选定月份的“活动”状态)。当新的一年来临时,您只需单击侧箭头(该箭头将位于该年的旁边),它就会将标题滑动到该年和月份集。

也许这不可能,但我有个问题。就我的一生而言,我不知道如何显示所有的月份,无论它们是否包含任何帖子。我知道我可以使用:

<ul>
<?php wp_get_archives(\'type=monthly\'); ?>
</ul>
但如果没有职位,就不会有月份出现。有没有人想出了解决这个问题的办法,或者有没有人知道如何才能达到我想要的效果?

2 个回复
SO网友:djb

做一个月的数组,然后每个月得到帖子怎么样?虽然我怀疑这比贾里德的效率要低一些。。。

function get_posts_grouped_by_month( $year = null ) {

    if ( $year == null ) {
        $year = date(\'Y\');
    }

    $months = range(1,12);
    $posts = array();

    foreach ( $months as $month ) {
        $posts_for_month = get_posts(array(
            \'year\' => $year,
            \'monthnum\' => $month ));
        $posts[$month] = $posts_for_month;
    }

    return $posts;
}
然后,在模板中:

<?php $monthly_posts = get_posts_grouped_by_month(2011); ?>

<?php foreach ( $monthly_posts as $month => $posts ) { 
    echo "<ul><strong>" . $month . "</strong>\\n";   
    foreach ( $posts as $post ) {
        echo "<li>" . get_permalink($post->ID) . "</li>";
    }
    echo "</ul>";
} ?>

SO网友:Jared

如果你坚持展示所有的月份,我会做的是使用wp_get_archives 以自定义格式返回字符串,然后使用PHP DOMDocument 要解析它,请创建一个月数组,并添加那些还不存在的月份。

我认为这可能比你希望的要复杂一些,但这里有一个非常基本的例子:

$archives = wp_get_archives( array(
    \'type\' => \'monthly\',
    \'echo\' => 0,
    \'format\' => \'custom\',
    \'before\' => \'\',
    \'after\' => \'\'
) );

$dom = new DOMDocument();
@$dom->loadHTML( "<?xml encoding=\'" . get_bloginfo( \'charset\' ) . "\'>" . $archives );

$xpath = new DOMXPath( $dom );
$months = $xpath->query( \'//a\' );

$months_array = array();
foreach( $months as $month ) {

    $name_year = $month->nodeValue;
    $link = $month->getAttribute( \'href\' );
    $months_array[] = array( \'title\' => $name_year, \'url\' => $link );

}

unset( $xpath, $dom ); // Clean up

// Do something to add the months that don\'t exist to $months_array
// Possibly give them the \'#\' or \'javascript:;\' URL?

// Echo accordingly

结束

相关推荐

Adding goodies to themes

如何在主题更新时向Arjuna-X等主题添加内容而不丢失?儿童主题是一种很好的方式,还是有其他选择?如果新版本的主题对我添加的功能具有本机支持,该怎么办?