删删删…

2015.07.28 | | 45 Comments

删删删……自上次删除日志,这几天又删了好几页,以后估计不会再删了。一不做二不休,顺手把固定链接也修改了,改成了 /%post_id% 形式,用 /%postname%.html 形式虽然更直观,但是一不留神就长得老长老长的……

接着把文章 ID 不连续的问题参照露兜的教程【WordPress完美解决文章ID不连续问题】折腾了一下,目测有效。

因为历史问题,归档页的读者乱七八糟的,看着长长的归档页,狠下心来打开数据库管理后台把 wp_comments 给清空了。不过这样只是把评论全部清空了,文章/页面虽然一条评论都没有了,但是评论总数还是清空之前的数据,有新评论后数据才会更新,这是因为 wp_posts 里面的 comment_count 数据没有清掉,运行一下下面的 SQL 语句就可以了。(操作数据库前记得先备份!!!)

UPDATE wp_posts SET comment_count = 0;

还请原谅我因为偷懒,直接把评论全部给清空了。

最后附上露兜解决文章 ID 不连续的方法,以备不时之需。

1、禁用文章修订版

wp-config.php 文件中添加代码:define('WP_POST_REVISIONS', false);

2、删除文章修订版

在 phpmyadmin 中执行以下 SQL 语句(会影响置顶文章,慎用!并做好备份)即可。

DELETE a,b,c
FROM wp_posts a
LEFT JOIN wp_term_relationships b ON (a.ID = b.object_id)
LEFT JOIN wp_postmeta c ON (a.ID = c.post_id)
WHERE a.post_type = 'revision';

3、禁用自动保存

在当前主题的 functions.php 中添加以下代码:

// 禁用自动保存,编辑长文章前请注意手动保存。
add_action( 'admin_print_scripts', create_function( '$a', "wp_deregister_script('autosave');" ) );

4、重新排列不连续的文章 ID

可在当前主题的 functions.php 中加入以下 PHP 代码,这样如果你只是单纯发文章,不发页面,不添加菜单,不上传媒体的话,基本上此后的文章ID是连续的,而且不改变之前已经发布的文章ID。

// WordPress 4.2.3 目测有效
function keep_id_continuous(){
global $wpdb;

// 删掉自动草稿和修订版
$wpdb->query("DELETE FROM `$wpdb->posts` WHERE `post_status` = 'auto-draft' OR `post_type` = 'revision'");

// 自增值小于现有最大ID,MySQL会自动设置正确的自增值
$wpdb->query("ALTER TABLE `$wpdb->posts` AUTO_INCREMENT = 1");
}

add_filter( 'load-post-new.php', 'keep_id_continuous' );
add_filter( 'load-media-new.php', 'keep_id_continuous' );
add_filter( 'load-nav-menus.php', 'keep_id_continuous' );

5、让以前的文章 ID 重新排序

注意:如果你使用了置顶文章、菜单或者父子页面等功能,下面的方法失效。

把下面的代码保存为 ID_Update.php,根据实际修改数据库信息,然后将该 PHP 文件上传至博客根目录,运行一下(就是打开一下 //cyhour.com/ID_Update.php),看到 OK 就可以了。如果你的数据表前缀不是 wp_ ,请根据实际修改好再上传运行。

特别提醒:开始之前请先备份你的数据库。如果你使用了post id作为固定链接,那么将可能改变所有文章的网址,会影响搜索引擎收录;如果你用的插件建立了新的数据库表,如投票插件等,也将会出现问题;如果你的博客中创建了父子关系的页面,运行了以下脚本将会失去此关系。请慎用!

<?php
/**
* WordPress重新排列不连续的文章ID
* 作者 :Ludou
* Email:zhouzb889@gmail.com
* Blog :http://www.ludou.org/
* 相关文章:http://www.ludou.org/wordpress-post-id-continuous.html
* 最后修改:2010年10月01日
*/

$hostname_blog = "localhost";
$database_blog = "数据库名称";
$username_blog = "数据库用户名";
$password_blog = "数据库密码";
$blog = mysql_pconnect($hostname_blog, $username_blog, $password_blog) or trigger_error(mysql_error(),E_USER_ERROR);

$no = 1;

function change_id($id)
{
global $no;

// 修改post id,并修改分类、标签、自定义字段、评论的对应关系
$sql = 'update wp_posts set ID = ' . $no . ' where ID = ' . $id;
mysql_query($sql);
$sql = 'update wp_term_relationships set object_id = ' . $no . ' where object_id = ' . $id;
mysql_query($sql);
$sql = 'update wp_postmeta set post_id = ' . $no . ' where post_id = ' . $id;
mysql_query($sql);
$sql = 'update wp_comments set comment_post_ID = ' . $no . ' where comment_post_ID = ' . $id;
mysql_query($sql);

$no = $no + 1;
}

mysql_select_db($database_blog, $blog);
$query_postRecord = "SELECT ID FROM wp_posts ORDER BY ID ASC";
$all_postRecord = mysql_query($query_postRecord);
$row_postRecord = mysql_fetch_assoc($all_postRecord);

do {
change_id( $row_postRecord['ID'] );
} while ($row_postRecord = mysql_fetch_assoc($all_postRecord));

// 重新设置post id自增起点
mysql_query('alter table wp_posts AUTO_INCREMENT = ' . $no);

echo 'ok';

?>

6、调整文章/页面 guid 和 postname

因为文章、页面链接变了,根据自己时间情况调整文章/页面的 guid 和文章的 postname。我是让文章/页面的 guid 和文章的 postname 与其 ID 一致,执行下面的 SQL 语句即可。

update wp_posts set guid = concat('http://cyhour.com/?p=',ID) where post_status = 'publish'and post_type = 'post';
update wp_posts set guid = concat('http://cyhour.com/?page_id=',ID) where post_status = 'publish'and post_type = 'page';
update wp_posts SET post_name = REPLACE( post_name, post_name, ID ) WHERE post_type = 'post';

----------后记:2015-08-10----------

可以用张戈大师障眼大法来实现 WordPress 文章 ID 看起来完美连续。

思路:固定链接设置为 /%postname% 的形式;然后写文章时,将文章别名设置为阿拉伯数字形式,并且和上下文保持连续即可

至于以前文章的链接,根据个人实际情况处理,如果不纠结旧文章 ID 是否连续和要考虑 SEO 的话,旧文章 ID 不作处理。如果纠结,可以用前面的方法先把旧文章 ID 处理为连续。然后运行下面的 SQL 语句,将旧文章 postname 更改为文章 ID 即可。

update wp_posts SET post_name = REPLACE( post_name, post_name, ID ) WHERE post_type = 'post';
——最近更新:2015年9月28日
支付宝扫码打赏微信打赏

如果文章对您有帮助,欢迎移至上方按钮打赏老杨

声明: 除非注明,常阳时光文章均为原创,转载请以链接形式标明本文地址
本文地址:https://cyhour.com/198/

Comments:45

  1. 这算强迫症+处女座?

    2015.07.29 05:59 # 回复
    1楼
  2. Fatears18 Safari 8.0 iPad iOS 8.4

    从来都没有注意过文章cid不连贯的问题,懒得去改了。

    2015.07.29 06:44 # 回复
    2楼
  3. Betty18 Google Chrome 26.0.1410.64 Windows 8 x64 Edition

    1,
    我嫌页面里的评论杂七杂八太乱,是干脆删掉评论显示(就是看不到,也无法再留言,但是原有的评论也还是会在)

    2,
    至于日记编号连贯与否……我觉得不连贯挺好,就当是随机数。

    2015.07.29 12:06 # 回复
    3楼
    • 老杨2.16k+ Safari 8.0 iPhone iOS 8.3

      @Betty
      1、我是嫌以前刚开始的评论太乱了,又懒得一个一个清理,干脆以前的评论全部清空了。至于不想有评论的页面直接关掉评论功能或者在模板就把它去掉了。

      2、连不连贯这个纯属强迫症了。

      2015.07.29 13:18 # 回复
  4. 博文公爵3 Google Chrome 44.0.2403.89 Windows 7

    原来强迫症是这么折腾的。请教老杨:折腾博客的前提是不是得懂像HTML5,CSS,JS之类的计算机语言?

    2015.07.29 15:18 # 回复
    4楼
    • 老杨2.16k+ Firefox 39.0 Windows 7

      @博文公爵 得有点计算机语言基础吧,像我折腾博客前就只有点大学时候学的 C 语言基础,不懂的问度娘问 Google,Firebug 调试……折腾多了,有些东西就会了。当然,要想精通那是得认真学了。

      2015.07.29 15:28 # 回复
      • 博文公爵3 Google Chrome 44.0.2403.89 Windows 7

        @老杨 哦!我现在高中刚毕业,还不懂这个,看来真得下工夫啊!感觉老杨人很好,我会常来逛的,多交流,希望做朋友哈!谢谢老杨!

        2015.07.29 15:38 # 回复
        • 老杨2.16k+ Firefox 39.0 Windows 7

          @博文公爵 不客气,有空常来。才高中毕业就会折腾博客了,年轻有为啊,我们那时候高中毕业都还没摸几次电脑呢。慢慢学吧,不过博客最重要的还是内容。

          2015.07.29 15:44 # 回复
  5. 说不定某个宫是处女座

    2015.07.29 19:40 # 回复
    5楼
  6. bigfa5 Firefox 39.0 Mac OS X  10.10

    我手动调成从70000开始了。。

    2015.07.29 20:35 # 回复
    6楼
    • 老杨2.16k+ Firefox 39.0 Windows 7

      @bigfa 不早说呢,要是我想到这个,说不定也会跳到某个数字开始呢,现在不折腾了,下午人肉修改了好多文章引用的链接了。

      2015.07.29 22:19 # 回复
  7. 居然要修改所有文章的ID,这真不是一般的强迫症!其实ID不连续也有好处的

    2015.07.29 22:06 # 回复
    7楼
    • 老杨2.16k+ Firefox 39.0 Windows 7

      @随望淡思 确实强迫症了,有好有坏吧。另外因为页面和菜单关系,现在也只是基本连续而已。

      2015.07.29 22:16 # 回复
  8. Dzing1 Google Chrome 42.0.2311.152 Windows 7

    长也不介意了,用ID虽然简洁但不明

    2015.07.30 13:39 # 回复
    8楼
    • 老杨2.16k+ Safari 8.0 iPhone iOS 8.3

      @Dzing 曾经我就是因为 ID 看起来呆呆的,不能知道大概内容才换成了 postname 形式的,现在又倒回来了!

      2015.07.30 14:43 # 回复
  9. 挺能折腾的,据阿钧说ID间隔大是因为修订版本太多造成的,是这样吗?

    2015.07.30 18:55 # 回复
    9楼
    • 老杨2.16k+ Safari 8.0 iPhone iOS 8.3

      @方室网志 嗯,自动保存的修订版本是造成 ID 不连续的一个原因,另外页面、菜单、多媒体图片附件也会占用 ID。

      2015.07.30 19:40 # 回复
  10. 老虎48 Google Chrome 43.0.2357.132 Mac OS X  10.10.4

    绝对是强迫症哈哈……
    我绝对不会删comments的,多少年的回忆啊!从MSN时代就有的

    2015.07.31 00:23 # 回复
    10楼
    • 老杨2.16k+ Safari 8.0 iPhone iOS 8.3

      @老虎 文章删了,评论也是能删除的,就是有点可惜了。其实可以人工删除的,就是太费时费力了,懒得折腾,一清了之…

      2015.07.31 00:40 # 回复
      • @老杨 博客的生命变幻莫测,好歹给它过生日的时候搞一下年终总结吧(整理归档)!

        2015.07.31 13:38 # 回复
  11. World29 Google Chrome 42.0.2311.152 Windows 7 x64 Edition

    这是疯了吗???

    2015.07.31 11:56 # 回复
    11楼
  12. wys.me3 Google Chrome 44.0.2403.125 Windows XP

    一个数字就行,好直接了。

    2015.08.02 17:03 # 回复
    12楼
    • 老杨2.16k+ Firefox 39.0 Windows 7

      @wys.me 嗯,postname 虽能传义,但是好多时候都会整得老长,直接几个数字短短的也挺好的。

      2015.08.02 17:06 # 回复
  13. leyaep3 Google Chrome 42.0.2311.152 Windows 7

    数字不连续对于一个处女座的来说这就如屏幕上的坏点

    2015.08.04 11:09 # 回复
    13楼
  14. 灵尘子4 Google Chrome 44.0.2403.130 Windows 7 x64 Edition

    真能折腾,我还是用postname吧,不习惯数字ID了。

    2015.08.11 23:26 # 回复
    14楼
  15. 安满18 Google Chrome 36.0.1985.125 Windows 7

    我能不能说你也是能折腾的,哈哈

    2015.08.24 21:00 # 回复
    15楼
  16. zhiwei3 Chromium 44.0.2403.89 Ubuntu x64

    太折腾了,其实我更喜欢那种%postname%形式,在我打开页面之前差不多就知道写的是什么内容了。

    2015.09.01 23:14 # 回复
    16楼
    • 老杨2.16k+ Firefox 40.0 Windows 7

      @zhiwei 我以前也是这么想的,所以从 id 转为 name 了,但是每次发文章都得翻译,很多时候翻译得又不准确,有时候还老长老长的……然后就又转回 id 了,省事!

      2015.09.02 00:16 # 回复
  17. 晨曦16 Google Chrome 42.0.2311.152 Windows 10 x64 Edition

    长了有点不习惯 另外 版权声明:本站原创文章,于1个月前,由老杨发表,共 3555字。 这个好棒

    2015.09.02 12:26 # 回复
    17楼

发表留言