因为需要将一个网站的老数据删除,将个别分类重新拆分作为一个单独的网站。但分类里的文章ID已经为20000起步。
其实多少都无所谓,但我感觉做网站的多多少少有些强迫症,比如想我。
必须要将他的ID重新排列一下。
成为一个全新的站点。
所以我列出几种方法,这些方法都是网络收集,我只使用了其中一个方法。就是PHP文件生成。
所以我们先看我用过的方法。后面的几种自己酌情选用即可。
PHP文件执行法(本人使用过的)
因为是我自己使用并证实的方法,推荐大家使用该方法
先删除批量删除wordpress文章修订版本/自动草稿残留数据 ,点击进入查看删除即可。
注意:该文章中含有禁用方法。禁用后草稿什么的就不在生成ID。
清除了修订版本和草稿的一些残留文件后。
在网站的根目录创建一个PHP文件,假设为:id.php
代码:
<?php
/** 引入网站配置文件,这里主要获得数据库连接信息及常规操作类 */
require_once './wp-config.php';
function change_post_id($id)
{
global $convertedrows, $wpdb;
/** 修改文章ID关联的类别、标签、、评论各表,prefix是您安装时设置的数据库表前缀 */
$wpdb->query('update ' . $wpdb->prefix . 'posts set ID = ' . $convertedrows . ' where ID = ' . $id);
$wpdb->query('update ' . $wpdb->prefix . 'term_relationships set object_id = ' . $convertedrows . ' where object_id = ' . $id);
$wpdb->query('update ' . $wpdb->prefix . 'postmeta set post_id = ' . $convertedrows . ' where post_id = ' . $id);
$wpdb->query('update ' . $wpdb->prefix . 'comments set comment_post_ID = ' . $convertedrows . ' where comment_post_ID = ' . $id);
$convertedrows++;
}
/** ID默认由1开始 */
$convertedrows = 1;
/** 库文章表所有记录 */
$sql_query = 'SELECT ID FROM ' . $table_prefix . 'posts ORDER BY ID ASC';
$all_post_ids = $wpdb->get_results($sql_query);
/** 有返回值时则执行循环 */
if (is_array($all_post_ids)) {
foreach ($all_post_ids as $post_id) {
change_post_id($post_id->ID);
}
}
/** 重新设置文章ID自动增加的起点 */
$wpdb->query('alter table ' . $table_prefix . 'posts AUTO_INCREMENT = ' . $convertedrows);
echo 'Total:' . $convertedrows . ', It\'s ok! ';
?>
保存后, 通过浏览器访问xxx.com/id.php
等待即可。
但这种方法费服务器资源,毕竟要重1开始排列。
当我执行了后,再次访问文章ID确实变了。
之前为21345.html的URL链接现在是800.html。
我一直想不明白命令是对的,为什么前面还有800个ID保留了?
这个其实是因为之前的媒体库也同样占用了ID。
我们使用SQL命令批量删除一些这些数据。
详细请看:WordPress 批量删除媒体库/解除图片文章联系/清空特色图片SQL命令
清空以后,再次运行id.php文件,第一篇文章的ID就成了6。
所以这是成功的方法。
主题的functions.php中加入以下PHP代码
这方法我没有试过。但同样收集起来给大家。
这样如果你只是单纯发文章,不发页面,不添加菜单,不上传媒体的话,基本上此后的文章ID是连续的,而且不改变之前已经发布的文章ID,不影响SEO:
// WordPress 3.8测试有效
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" );
该代码来自网络
SQL清空命令(没测试,使用请备份)
$wpdb->query('update ' . $wpdb->prefix . 'term_relationships set object_id = ' . $convertedrows . ' where object_id = ' . $id);
$wpdb->query('update ' . $wpdb->prefix . 'postmeta set post_id = ' . $convertedrows . ' where post_id = ' . $id);
$wpdb->query('update ' . $wpdb->prefix . 'comments set comment_post_ID = ' . $convertedrows . ' where comment_post_ID = ' . $id);
$convertedrows++;
}
/** ID默认由1开始 */
$convertedrows = 1;
/** 库文章表所有记录 */
$sql_query = 'SELECT ID FROM ' . $table_prefix . 'posts ORDER BY ID ASC';
$all_post_ids = $wpdb->get_results($sql_query);
/** 有返回值时则执行循环 */
if (is_array($all_post_ids)) {
foreach ($all_post_ids as $post_id) {
change_post_id($post_id->ID);
}
}
/** 重新设置文章ID自动增加的起点 */
$wpdb->query('alter table ' . $table_prefix . 'posts AUTO_INCREMENT = ' . $convertedrows);
echo 'Total:' . $convertedrows . ', It\'s ok! ';
?>