显示月份并筛选帖子以仅显示该月的帖子并将帖子显示为子项的菜单

时间:2011-10-11 作者:Corbula

我创建了一个名为news的自定义帖子类型。在显示我所有新闻帖子的页面上,我需要在左侧(侧边栏)有一个菜单,显示月份,即2011年10月、2011年9月等等。当我单击其中一个月时,我希望它能够在菜单中显示该月的帖子作为子项,并过滤页面上显示的帖子,以仅显示该月的帖子。

它还需要自动更新月份,即当我们进入11月时,2011年11月将自动添加到菜单中。

我计划使用一个名为Jquery Accordion Menu的插件,但如果菜单显示子项,则不需要这样做。该插件只是一个小部件,它接受wordpress中创建的菜单,并为其提供jquery手风琴风格来扩展菜单项和显示子项。

任何如何实现这一目标的想法。

谢谢

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

你似乎知道WP,所以我只给你提纲(This recent post 我的博客中包含了所有细节)。最好的方法是使用查询变量。从这些评论中,我想这就是凯撒所说的。

这个链接(比如2011年10月)可能会指出example.com/news/2011/10

首先添加一个“generate\\u rewrite\\u rules”过滤器来添加一个规则,所以WordPress将其读取为example.com/news/?year=2011&monthnum=10,

其他过滤器,例如。post_where, 修改查询,将返回的帖子限制为当年和当月的“新闻”项目。Note, 如果您的新闻页面在其模板页面内使用query\\u posts()或WP\\u query()获取相关帖子,则此方法将不起作用。如果使用该方法,则需要在模板中使用一些If语句来确定是否设置了年/月,然后更改输入到这些函数中的参数。

至于自动生成菜单,您可以使用phpDate() 函数检索当前月份和年份,然后通过while循环查看最近6个月的显示以及相关链接。例如,在<ul> 标记可以放置php代码

$i=0
while ($i<6){
    $yearInt = intva(date("Y", strtotime("-".$i." months")));
    $monInt = intva(date("n",  strtotime("-".$i." months")));
    $monStr = date("F",  strtotime("-".$i." months"));
    $yearStr = date("Y",  strtotime("-".$i." months"));

    echo "<li><a href=\'www.example.com/news/".$yearInt."/".$monInt."\'>".$monStr." ".$yearStr"</a></li>";

    $i = $i +1;
}
希望这有帮助:D

如果您使用的是query\\u posts(),那么您可能有一些参数调用您的“新闻”帖子。您要做的是添加如下内容,检查是否还选择了年份和月份。您需要将月份和年份转换为整数yearInt, monthInt (请参见上文),并使用这些来调整query\\u posts()函数中的参数

global $wp_query;
if (isset( $wp_query->query_vars[\'monthnum\'] ) & isset( $wp_query->query_vars[\'year\'] )){
    //add additional arguments to query_var(): \'&year=yearInt&monthnum=monthInt\'
}else{
    //Normal query_vars() (i.e. what you had before)

}

结束

相关推荐

Menu API not switching menus?

我正在使用菜单API,我想切换到其他菜单,但出于某种原因,它保留了第一个菜单这是我的密码在函数中。php add_action( \'init\', \'register_my_menus\',10 ); function register_my_menus() { register_nav_menu(\'main-navigation\', \'Main Navigation\'); } 下面是我的主题文件(header.ph