Front-end web developer——[to be a better man]
文章字体大小Font Size文章字体大小:12px, 14px
18

WP非首页显示文章列表(Wordpress hack)

Update:此方法对WP2.5同样适用。本文写得很文诌诌,很拗口,但我认为很有用,所以打算重写。

有人喜欢把首页做成奇形怪状,不正常地显示新近文章,正如一个CMS。或者有人想专门做一个页面用来像首页那样显示新近文章的列表,如http://guitarbean.com/blog-updates,就不显示文章分类列表,而正如正常的博客首页那样显示最新文章。为了这个效果,这里有一个令人兴奋的解决方案

一个错误的方案:

1、把archive.php或index.php当成页面,在新建页面中把“Page Template”指向它。可惜这样做的结果等同与指向page.php,所建立的页面只会显示单个页面内容。

一些不错的解决方案(均需建立页面):

方法1、alexking.org的articles插件。有了这个插件,你可以显示一个漂亮的article list。这个列表有文章归类,但显示的不是全部文章,因为需要给文章添加一个额外的key=article和value=1。这不是正常的首页效果,算是半个site map吧。

方法2、使用Rob Marsh, SJRecent Posts 插件,类似的还有中文 WordPress 工具箱 。放一个recent post到某个页面中……之后的不说自明了吧,只是所显示的也只是文章标题而已。

方法3、wordpress.org.cn上找到的一个帖子 ,不过得把代码改改:

<?php
/*
Template Name: guid
*/
?>
<?php get_header(); ?>
<div id="content" class="widecolumn">
<?php $posts = get_posts( "numberposts=10" ); ?>
<?php if( $posts ) : ?>
<?php foreach( $posts as $post ) : setup_postdata( $post ); ?>
<div class="post">
<h2><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h2>
<small><?php the_time('F jS, Y'); ?></small>
<div class="entry">
<?php the_content(); ?>
</div>
<p class="postmetadata">Posted in <?php the_category(', '); ?></p>
</div>
<?php endforeach; ?>
<?php endif; ?>
</div>
<?php get_footer(); ?>

然后再把页面指向它(guid)就可以。

不过经我测试发现,使用这个方法得到的文章不是以时间的新到旧排序的,而是以旧到新排序的,这样的结果很不合意。虽然在codex.wordpress.org上查到get_posts,说默认是以时间新到旧排序的,可是我再怎么添加修改参数也实现不了,可能因为我的本地机是wordpress 2.3.3吧。不管怎么说,这个方法离目标只有一步之遥,只要再改正时间排序和能使用像pagebar这样能进行分页就成功了。

一个令人兴奋的解决方案——query_posts & The_Loop

这里,只要在合适地地方添加一句:<?php query_posts(”paged=$paged”); ?>

步骤:

1、拷贝一个index.php(或archieves.php)并改名为其它名,如list_post.php;

2、找到<?php while (have_posts()) : the_post(); ?>,在之前加这行 <?php query_posts(”paged=$paged”); ?>,如
<?php query_posts("paged=$paged"); ?>//取得posts
<?php while (have_posts()) : the_post(); ?>

3、在页面最顶部添加
<?php
/*
Template Name: List Posts
*/
?>

以把这个文件标识为List Posts。注意,这代码最好紧跟<?php get_header(); ?>,不要有空行,最好如:

<?php
/*
Template Name: List Posts
*/
?><?php get_header(); ?>

4、新建一个页面,如blog-updates,把Page Template指向它,什么内容也不用写,就OK了!

原理:为了能显示Wordpress的文章列表,WP推荐使用The Loop ,因为在The Loop中就可以使用像the_title()和the_content()等的Template_Tags,以及像分页信息等其它相关内容。

正常情况下,在index.php和archves.php中,WP有一个默认的魔术变量,这个魔术变量常常变来变去,比如:在首页中,它就是最新文章列表;在存档页archves.php中就是当前分类、日期分类的文章列表;在单个post或者page中就是单个文章。有了这个魔术变量,我们可以容易的使用Template_Tags,但这个变量通常是系统自己的,我们只要改变一下它即可——

使用query_posts即可改主变它。如query_posts(”paged=$paged”)就是把它变为当前页的文章列表。如果没有参数”paged=$paged”,就会一直显示第一页的,无法颁布了。
此方法对WP2.5同样适用。
参考文献:

[1]http://codex.wordpress.org/The_Loop

[2]http://codex.wordpress.org/User:JamesVL/query_posts

[3]http://codex.wordpress.org/Category:Template_Tags

[4]http://wordpress.org.cn/viewthread.php?tid=7143&page=1&fromuid=15469#pid33133

Popularity: 88% [?]

 tags Tags: ,

comments4 Responses to “WP非首页显示文章列表(Wordpress hack)”

  1. mercy Says:

    终于又见到你更新了,工作稳定下来了?

  2. hanfo Says:

    您好,我像你一样设置,可以显示出来的仍然不是列表,而是所有详细文章?

    GOVO的回复:能显示说明已经成功了,而至于是显示全部文章还是缩略,就由你决定了 :roll:
  3. hanfo Says:

    嗯嗯,后面终于研究出来怎么控制了,谢谢你的好文章:)

    GOVO的回复:朋友过奖了。本文章写得仓促,一直说想重写一下还没时间去写呢。即使是像女人乳沟一样的时间偶也挤不出来呀~
  4. luguo Says:

    很高兴你写了这个文章,但是有些问题要请教你一下:
    4、新建一个页面,如blog-updates,把Page Template指向它,什么内容也不用写,就OK了!

    “新建一个页面,如blog-updates”,应该是.html文件呢还是.php文件?

    “把Page Template指向它”,如何把Page Template指向它?

    本人为菜鸟,不会PHP,麻烦了!

    GOVO回复:第4步了,可以直接在wordpress后台中进行,新建页面就是“创建新页面”,与创建新文章的方式相同(不用理会php还是html),不同的是这时可以在页面下方找到“页面模板”,这里选择到第3步准备好的List Posts模板了。:)

respondLeave a Reply

:mrgreen: :| :twisted: :arrow: 8O :) :? 8) :evil: :D :idea: :oops: :P :roll: ;) :cry: :o :lol: :x :( :!: :?:

&| &amp;