首页 > wordpress, 游走网际 > WordPress的页面(page)显示指定分类(category)或者标签(tag)下的文章列表

WordPress的页面(page)显示指定分类(category)或者标签(tag)下的文章列表

2009年7月13日 阿鸣 1,278 次 发表评论 阅读评论

本站的导航条中现有的几个菜单项:首页、地图、归档、链接、留言簿 和 关于 。(本来还有一个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 文件

原创文章请注明转载自爬行日记,本文地址: http://www.paxing.org/archives/402.html
  1. aq6100
    2010年2月21日12:18 | #1

    请问一下,贵站的首页导航是怎么做到的呢?页面设置不是有?page_id=2之类的吗?你的为什么可以显示http://www.paxing.org/linktalk.你这样的链接,是怎么做的,还望多多指教一下,谢谢。有可能的话,麻烦回复邮件。

  2. 2010年2月21日14:48 | #2

    @aq6100
    那个是固定链接格式,在后台设置中有的。linux主机可以直接设置,win主机不支持rewrite。

  3. 2010年3月26日15:32 | #3

    你好,谢谢的分享。
    请教个问题:怎么给tag页面加keyword呢?苦恼中。。。
    谢谢。期待回复!!!!!!!!!!!!!

  1. 2009年7月31日22:25 | #1
  2. 2009年9月25日18:08 | #2
  3. 2009年9月27日13:30 | #3
注意: 评论者允许使用'@user空格'的方式将自己的评论通知另外评论者。例如, ABC是本文的评论者之一,则使用'@ABC '(不包括单引号)将会自动将您的评论发送给ABC。使用'@all ',将会将评论发送给之前所有其它评论者。请务必注意user必须和评论者名相匹配(大小写一致)。