王国伟

换个思路解决WordPress的ID不连续
2013 7 31

如果你的WordPress固定链接使用的是%post_id%,那么你应该会为乱七八糟不连续的ID发过愁。当然我看大多数人的固定链接不是拼音就是翻译的一长串字母,这样有利于SEO,但是给人看着总觉得不怎么简洁。不得不承认,很多人都有这样的“洁癖”,包括我也有。

如果你按照以前的方法禁用文章修订版,禁用自动保存什么的,实际上你会发现用的过程中也不是那么完美,而且实现的过程也很复杂。其实换个思路,何必要让ID连续呢,访客又看不见真实的ID,访客看见的是固定链接啊。况且自动保存,修订版本什么的也并不是完全无用的鸡肋,例如写博时停个电,或者不小心改错了什么的,它们就派上大用场了啊。

那么也就是说,直接让固定链接连续就可以了。方法就简单多了,固定链接设置为%postname%,然后一篇篇文章慢慢改去吧,哈哈……

好吧好吧,送上自用的自动连续固定链接的代码。

2016-02-29 update:

2016-03-11 update:Bug修复

  1. function fun_Permalink($slug){  
  2. if ($slugreturn $slug;  
  3. global $wpdb,$post_ID;   
  4. $fun_postdb = $wpdb->get_row("SELECT post_name,ID FROM {$wpdb->posts} WHERE  post_type = 'post' AND post_status <> 'auto-draft' ORDER BY ID DESC");  
  5. $fun_postname = $fun_postdb ->post_name;  
  6. if ($post_ID == $fun_postdb ->ID) return $fun_postname;  
  7. elseif (preg_match("/^\d+$/",$fun_postname)) return $fun_postname + 1;  
  8. else return $slug;  
  9. };  
  10. add_filter('name_save_pre', 'fun_Permalink',0);  

2016-02-29 update:

使用方法:

1.先把全部文章的post_name手动改为正整数,至少最后一篇必须改,确保最后一篇的post_name是最大的。

2.然后把上面的代码放进functions.php就可以了。

原理是在写新文章时,查找上一篇已发布文章的post_name,加1,然后返回给图中黄色字的位置,就是这么简单。

20130730152522

当然了,最新文章的post_name一定要是数字才能开始用。至于使用这个方法之前已发布的文章,那就只能自己想办法改咯,不在本文讨论范围内,哈哈。

ps:本人php渣,如有bug希望及时反馈。

« 已经是最末文章
相关文章随机文章

说点什么

  1. 周周2014/9/2 #1
    这个方法确实好,ID洁癖者的福音。但是我装的是最新的3.9.2。用博主的方法无效,求教。回复
    • 王国伟
      我也是最新的Wordpress,依然有效。 注意固定链接设置为%postname% 而且只对新文章有效,老文章要手动改。回复
    • 王国伟
      还有,最新文章的post_name一定要是数字才能开始用,注意一些小细节就没有问题了。回复
  2. Qa2014/9/29 #2
    为博主点赞,我试试看回复
    • 王国伟
      成功了说一声,不成功我帮你。回复
      • Qa
        @王国伟 , 确实不成功....不知为何。新开的一个网站用的WP4.0回复
        • 王国伟
          我的也是4.0,注意固定链接要含有%postname%
          如果是php报错,可以把主题的functions.php文件给我帮你改。
          如果就是没效果,可以试试发一篇新文章,固定链接改为纯数字,之后再发布文章,固定链接就会自动加1。
          因为这个只对新文章有效,老文章要手动改。回复
  3. disidu2014/10/11 #3
    为什么我的有时候能正确获取上一篇文章的post_name,有时候不能正确获取?回复
    • 王国伟
      @disidu ,可能是你先保存了草稿,草稿占用了一个地址。这种情况手动编辑调整下就好了。具体原因可以截图Email我 :smile:回复
  4. XX2014/11/5 #4
    很好用的方法。我有一个问题,就是如果采用定时发布后,在那篇文章还没发布之前,发布一篇不是定时发布的文章的话,链接会变成www.xx.com/数字-2的形式。还有就是如何让ID按照发布时间来排序呢?回复
    • 王国伟
      最近比较忙,过些时放出更新版。。 思路是修改post_status = 'publish'。回复