TypeCodes

PHP程序解决WordPress重新排列不连续的文章ID

wordpress有个缺点,那就是在后天发表文章的时候,系统会自动等时间地帮你备份。虽然出发点是好的,但是却导致了发表的文章的ID不连续。比如,前一篇文章的网站是27.html,很可能在你发表下一篇文章的时候网站会变成45.html。至此为止,博客中总共18篇文章,在我没进行重新排序之前,文章的ID已经达到了300多了。所以趁文章还不多的,赶紧采取一些措施解决下。废话少说,贴出代码(代码中已注释)。其中数据库表的前缀默认为wp_,应该根据自己的表进行修改。(温馨提示:在任何数据库的操作前,最好先备份数据库!!!)

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
<?php
    /**
     * WordPress重新排列不连续的文章ID
     */

    $hostname_blog = "localhost";//服务器名称
    $database_blog = "dbname";//数据库名称
    $username_blog = "username";//数据库账户
    $password_blog = "password";//数据库密码
    $blog = mysql_pconnect($hostname_blog, $username_blog, $password_blog) 
    or trigger_error(mysql_error(),E_USER_ERROR); //打开一个到 MySQL 服务器的持久连接

    $no = 1;//初始化变量

    function change_id($id)//定义change_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);//设置活动的 MySQL 数据库
    $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));//不断调用change_id()函数来修改ID

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

    echo 'ResetID Succeed';

?>
打赏支持

Comments »