重新排列wordpress博客网站不连续的文章id

微信公众号:WordPress迷 513 2021-06-15

大家可能遇到过这样的问题,文章id一下飚到三万,文章数量也不够1000篇。

要想解决这个问题,就必须清楚WordPress的id分配机制:wordpress的id不是只用来分配给文章的,即有多少篇文章,ID就为多少。实际上,wordpress网站中的媒体文件、菜单、页面、文章、文章/页面自动保存,甚至修改文章/页面都会被分配到一个ID,而这个ID是共用的一个ID分配机制。

比如:此时的最高ID为1,你用五分钟的时间发布了一篇文章,文章中上传了10张图片。

这一系列的操作之后,你再发布下一篇文章时,文章ID就会变成17了。因为10张图片就占用了10个ID,wordpress默认情况下是 30 秒保存一次,保留最后的 5 个文章版本,这样ID就用掉了15个,再加上文章的一个ID,一共用了16个。(这里只是粗略的算一下)

正因为如此,所以我们的文章ID是不可能连续的。

如果想要ID连续的效果,可以将固定链接设置为/%postname%.html

重新排列wordpress博客网站不连续的文章id

然后在发布文章的时候,手动修改成数字。

重新排列wordpress博客网站不连续的文章id

重新排列wordpress博客网站不连续的文章id

下面WPMI(微信公众号:wordpress迷)给大家介绍一个重新排列文章id的方法。该方法只适合没有收录的新站,如果网站已经被搜索引擎收录了的话,请谨慎使用!谨慎使用!谨慎使用!

1、首先清理文章历史修订版本。

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'; 

2、清理修改文章时产生的冗余数据。

DELETE FROM wp_postmeta WHERE meta_key = '_edit_lock';
DELETE FROM wp_postmeta WHERE meta_key = '_edit_last';

3、新建一个php文件,把以下代码写入php文件,然后上传到wordpress网站根目录,之后通过浏览器访问这个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! ';

当页面上出现 Total: 500, It\'s ok! 时,就说明重新排列文章ID成功了。【注:500 只是虚拟数据,与网站里的数据多少有关】

本文由 微信公众号:WordPress迷 原创发布。

著作权均归用户本人所有。独家文章转载,请联系本站管理员。获得授权后,须注明本文地址! 本文地址:https://www.maosiji.com/sort-postid.html

认识文字就能看懂的
微信公众号

站长微信