WordPress的页面(page)显示指定分类(category)或者标签(tag)下的文章列表
本站的导航条中现有的几个菜单项:首页、地图、归档、链接、留言簿 和 关于 。(本来还有一个Twitter页面,可最近访问Twitter又受阻,只能先把该页面隐藏)
考虑到本站经常讨论的关于 LinkTalk 的相关问题,所以希望把所有与 LinkTalk 相关的文章(即分类为:LinkTalk)能够集中显示在导航条中所列出的某一个页面中,即在导航的菜单项中增加一个 LinkTalk 页面。
参考了网上的两个方法,知道大致思路是:在相应的主题文件夹中增加一个模版(Template),然后通过 query_posts() 函数来实现,具体要求通过向 query_posts() 传递参数:”cat” 和 “showposts” 来实现。
按照此方法的确可以实现指定分类或者标签的文章的调用,可就是不响应翻页的操作,始终显示的第一页的内容。通过使用 UltraEdit 的“在文件中搜索”功能,找到了此 query_posts() 函数是在 wp-includes/query.php 文件中定义的,原来query_post() 函数的翻页的操作必须通过参数:”paged“传递。
好了,上面的是我的需求的产生过程和解决的思路,下面我按步骤来操作:
1. 新建用于页面使用的模版(Template)文件:linktalk.php
在 wp-content/themes/ 下所对应的主题文件夹(如本站是:iNove)的根目录下直接复制一个 index.php 文件,重命名为 linktalk.php ,以继续下面的操作。
打开 linktalk.php 文件,在开始的第一行插入如下模版名称代码:
1 2 3 4 5 | <?php /* Template Name: LinkTalk */ ?> |
这样就生成了一个可以用于生成页面(page)的模版文件,模版名称就是: LinkTalk
注:文件名称按照习惯是全部用小写(linktalk.php),而模版名称就可以按照正常的大小写书写习惯(LinkTalk)
2. 添加代码以显示指定的分类(category)或者标签(tag)下的文章列表
在 linktalk.php 文件中找到 <?php if (have_posts()) : ?> 代码,在前面添加如下代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | <?php /* BEGIN of PART 1 */ /* Show content of this page */ if (have_posts()) : the_post(); update_post_caches($posts); ?> <div class="post" id="post-<?php the_ID(); ?>"> <?php the_content(); ?> <div class="fixed"></div> </div> <?php endif /* END of PART 1 */?> <?php /* BEGIN of PART 2 */ /* Query the posts by args */ $str_paged = ''; if (isset($_GET['paged']) && !empty($_GET['paged'])){ $str_paged = '&paged=' . $_GET['paged']; } query_posts('category_name=linktalk&posts_per_page=10' . $str_paged); /* END of PART 2 */ ?> |
1) 代码分析:
PART 1:把该页面(page)在后台新建时所填写的内容显示在文章列表的顶部,可以是介绍性的内容,相当于此页面(page)的副标题;
PART 2:这部分的代码的作用是根据相应参数获取相应的文章列表。
2) 部分参数的分析:
$str_paged:是用来传递翻页信息的参数,用来读取url地址中的”paged“参数,然后传递给 query_posts() 函数 ;
category_name: 是传递分类名称的参数,适用于分类名称是 英文 的情况下直接是使用,如果分类名称中有中文,那么就要使用 cat 来传递 分类 所对应的编号,编号可以在 WP 的后台 文章 -> 分类目录 的列表中可以查看到每个分类所对应的 cat_ID ;
posts_per_page: 这个很容易理解,就是每页显示的文章数,这个参数的作用与 showposts 参数作用相同,不过相比之下,posts_per_page 更容易理解和明白,此参数如果没有指定,则直接调用 WP 后台的每页文章数的设置值。
3) 其他需要注意的地方
有些主题(theme)在index.php 文件中有 公告栏(notice),那么需要手动把该部分的代码删除。
至此,代码部分的修改和添加已经搞定。
3. 在后台新建页面(page):LinkTalk
WP 后台页面 -> 新建页面
页面名称: 页面名称将显示在导航栏中,我填写的是 LinkTalk
内容:这里的内容就是对应的显示在页面文章列表顶部的描述性文字(副标题)
模版:在这里需要选择刚才建立的 LinkTalk 的模板
排列:利用该数据(字母或者数字)这个用以对导航栏的菜单项进行排序(这里不加赘述)
最后,“发布”该”页面”(page) 就可以了。
4. 结束语
其实很简单,而且对于在WordPress中用页面显示分类信息的相关文章很多了,都可以参考参考的,只是我个人使用下来的感觉需要对 翻页功能(paged)功能方面需要改进一些而已。
对于文章标题中提及的 用”页面”(page)显示指定”标签”(tag)相关文章的方法与上述方法大体类似,只是参数改为:”tag” 或 “tag_id” 就可以实现了。
更多关于 query_posts() 的用法和参数可以参考 wp-includes/query.php 文件
请问一下,贵站的首页导航是怎么做到的呢?页面设置不是有?page_id=2之类的吗?你的为什么可以显示http://www.paxing.org/linktalk.你这样的链接,是怎么做的,还望多多指教一下,谢谢。有可能的话,麻烦回复邮件。
@aq6100
那个是固定链接格式,在后台设置中有的。linux主机可以直接设置,win主机不支持rewrite。
你好,谢谢的分享。
请教个问题:怎么给tag页面加keyword呢?苦恼中。。。
谢谢。期待回复!!!!!!!!!!!!!