WordPress手动修改文章排列顺序

Ludou
文章目录

     我们常见的WordPress站点文章排序,通常情况下是按发布时间的升序或降序方式排列,这种排序方式几乎可以满足大多数站点的需求了,但是有些另类的站点可能会有一些另类的需求:我想手动修改文章的排列方式,可以随意更改文章的排列位置。其实WordPress的query_posts就可以轻松解决这个问题,不过你得自己动手改一些代码。

修改方法:

1、打开WordPress当前主题目录,打开index.php,搜索代码:

1
while (have_posts())

将其替换成:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
/**
 * 名称:WordPress手动修改文章排列顺序
 * 作者:露兜
 * 博客:http://www.ludou.org/
 * 最后修改:2010年11月14日
 */


$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
$args=array(
    'meta_key' => 'sort',
    'orderby'   => meta_value,
    'paged' => $paged,
    'order' => DESC
);
query_posts($args);
while (have_posts())

接着搜索:

1
endwhile;

将其改成:

1
endwhile;wp_reset_query();

2、给之前发表的所有文章添加自定义字段(或者称作自定义栏目,在文章编辑页底部可以看到),名称为 sort ,值填数字。这样在首页,文章的排列顺序就按照sort字段的值,从大到小排列了。通过修改sort字段的值,可以达到自定义文章排列顺序的目的。

3、需要注意的是,通过以上修改后,你必须给所有文章添加自定义字段sort,否则没有添加sort字段的文章将无法在首页显示。这也许就是手动排序需要付出的代价吧,要不然何谓手动?

4、如果你同时想手动修改标签页、分类页等存档页面的文章排列顺序,同样可以按照第一步介绍的方法来操作,修改主题目录下的archive.php等。

参考文档:

Function Reference/query posts

本文版权归露兜博客所有,转载引用请完整注明以下信息:
本文作者:Ludou
本文标题:WordPress手动修改文章排列顺序
本文地址:http://www.ludou.org/wordpress-customize-posts-order.html

露兜博客博主,男生,业余Web程序员,儒家思想受益者。文采不佳,不喜欢聚光灯,不喜欢吹牛,不喜欢无序的做事方式。闲时喜欢写些代码自娱自乐,并在博客中分享一些个人技术经验。

标签:

35 条评论

我来说两句
  1. 荣斌

    你真应该在首页的位置上,给每一篇文章都加上一个日期,这样看的人估计会更有兴趣点。

    否则这么好的文章,多浪费啊。

    • Ludou

      我是故意去掉首页文章发布日期的,这样读者就不会因为文章的新旧而偏向新文章或旧文章,而更加注重他需要的内容。其实我是剥夺了读者对新旧文章选择权利,同时隐去博客文章发布的频率。

      这应该算是值得探讨的问题,你为什么觉得加上日期,读者就愿意点呢?很希望听到你的意见。

  2. 山中蒙面人

    好不容易遇到个专业人士,问个与此方不相干的wp问题:
    wp开启多站点后,如果在主域名的首页聚合分站的内容呢?我搜索了很久,没找到相关的资料,如果告知,感激不尽!

    • Ludou

      很抱歉,目前没有研究过WordPress的多站点。提供个思路吧,如果主站和分站是在同一台服务器上,可以采取直接读数据库的方式。

  3. Ray Chow

    可以在文章保存的时候自动补上meta,就不怕没有写入了
    save_post 这个action是个好选择

  4. 荣斌

    我也说不上来具体为什么,这应该是一个大众的心理,都是想追求最新的。我认为有些东西相当于是一个潜移默化的东西,虽然被证实有些步骤是多余的,可这一步还是有很多人要走。

    所以有些东西建立在日期上,有它自身的优势在,一来很直观,它可以让我知道,就这么短短的时间里头,我错过了几篇文章,同时也让我知道你的更新频率。

    当然也许你是对的,你要让访客更加注重你的内容,这点在具体的文章里头是很明显,而访客买不买单的这个问题,你可要好好统计下了,至少就我个人来说,加上时间之后,可以提高我的浏览效率。

  5. 荣斌

    而且,我觉得你的就连评论回复修改下也好,至少我在邮箱里头就能知道你回了什么样的讯息,觉得我能答上,同时觉得有必要,我就回头来评价。

  6. ShopEDHardyOnline

    博主的见解的确跟别人不太一样哦,呵呵,各有道理吧

  7. 棺材中的尘埃

    我觉得取消日期跟你说的一样,是个好方法:)但是会不会再搜索引擎上有问题呢?还是说一如既往的,只是不显示,但是实际上对搜索引擎无干扰:)比较迷茫!哈哈啊

    • Ludou

      搜索引擎有自己的一套时间机制,而不会因为你在首页添加/删除日期就会错误判断你的文章发布时间,如果是这样子,那么搜索引擎太傻了。

  8. 广寒宫论坛

    以前玩过WordPress,感觉是越搞越复杂了,性能不太好。不过蛮好折腾的,前后台分离做得比较好。

  9. 博客之家

    学习了,这个比较特殊啊

  10. 布客空间

    个人来说还是比较喜欢升序的排列顺序!呵呵

  11. 请教

    楼主,请教一个问题。如何用query_posts提取符合如下条件的posts
    1、post含有自建的meta,如sort等等。
    2、提取的posts结果为随机排列,而非按照meta排列。
    比如说,一个WP站点有50篇博客,其中30篇带有sort,如何实现从这30篇中随机抽取5篇出来?
    另一个与之类似的问题。
    用query_posts('showposts=10&cat=10&orderby=date')函数提取10篇posts,但是我现在只需要其中的的第2-9篇,并保持orderby顺序。因为第一篇需要做一些较为特殊的展示处理。问:如何实现?
    望回复,非常感谢

    • Ludou

      1、上文中第二段代码:'orderby' => meta_value,
      改成:
      'orderby' => rand,
      'showposts' => 5,

      2、
      query_posts('showposts=10&cat=10&orderby=date')
      改成:
      query_posts('showposts=10&cat=10&orderby=date'); $i=0;

      while (have_posts()) :
      改成:
      while (have_posts()) :
      $i++;
      if ( $i==1 || $i==10 ) continue;

  12. Jiefeng

    不错。可是这样一改,为什么用在文章页面中进行调用却无法出现翻页的循环呢?

  13. 雨安

    博主人很好,很热心!

  14. kaku

    博主:我在你网站上下了Aurelius主题,archive.php中的“随机阅读”、“评论最多”、“标题排序”。第一次进入分类页,然后点“随机阅读”地址为:…./category/businessreview?rand=true,没有问题。再点评论最多时,地址栏就变成了…./category/businessreview?rand=true&commented=true这样。怎样才能变成…/category/businessreview?commented=true呢?本地测试没法发地址!谢谢!

  15. lionshuang

    代码的描述似乎有点问题,应该在整个循环前面增加query_posts,而不是在while ( have_posts() )前面吧?官方的描述是这样的。害我菜鸟琢磨了好久才搞定。

    //The Query
    query_posts('posts_per_page=5');

    //The Loop
    if ( have_posts() ) : while ( have_posts() ) : the_post();

    • Ludou

      首先if ( have_posts() )是判断是否有文章,不是循环的开始;
      其次while ( have_posts() )才是循环的开始。

      本文描述的功能,不管是放在if ( have_posts() )前面还是放在while ( have_posts() )的前面,都不影响正常使用。

      不过按照官方文档的说明的写法更严谨。

  16. UPS电源

    解决了排序的问题,不过出现了,调用文章摘要的时候显示图片的问题,不知为何?

发表评论

订阅评论