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

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

index.php
<?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';

?>

评论

评论加载中…