- A+
所属分类:博客日记
使用 WordPress 的朋友很多都使用了文章 ID 作为固定链接形式,但由于草稿、修订版本、附件等的存在,这个ID号增长的是很快的。对于有强迫症的朋友来说,文章的ID号是跳跃式的,并不连续,让人很不舒服。
这几天趁着收拾博客,在网上找到了一个PHP脚本文件,能够很方便的重新排列 WordPress 的 ID 号。对于那些固定链接中没有 ID 的,则大可不必理会,或者你不是个强迫症患者,那么就也无所谓了。
1、备份数据库
这是个永恒的话题。对于数据库的操作,一定要事先进行数据备份并确保备份文件可用。数据无价,谨记!
2、禁用文章修订版本和自动保存功能
在其他文章中已经专门介绍了如何禁用文章修订版本和自动保存,这里就不再重复了。
3、删除冗余的修订版本和自动保存
愿意使用插件的朋友可以用类似 WP Cleaner 这样的插件来清理。
不愿意使用插件的朋友可直接在数据库中操作:
以下是清理文章历史修订版本的语句:
- 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';
以下是你修改文章时产品的一些冗沉数据:
- DELETE FROM wp_postmeta WHERE meta_key = '_edit_lock';
- DELETE FROM wp_postmeta WHERE meta_key = '_edit_last';
4、进入数据库对数据表进行下优化
5、重新排列不连续的文章 ID
下载 id.php 脚本,上传到你主机根目录下,运行此脚本,即可达到从新排序的效果,从1开始,文章太多的话多刷新几次。
下面是代码,自己复制建立一个文件也可以:
- <?php
- /**
- * WordPress重新排列不连续的文章ID
- * post_id作为固定链接或是使用投票等关联文章的插件勿用
- * 5.5版本亲测,理论上其它版本也适用,操作前请备份好数据库,放心去干吧!
- */
- /** 引入网站配置文件,这里主要获得数据库连接信息及常规操作类 */
- 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! ';
- ?>
友情提醒
如果你使用了文章 ID 作为固定链接,那么重新排列文章 ID 的操作将改变所有文章的网址,通过搜索引擎访问时会出现大量的404访问或者文章错乱,这无疑对 SEO 是巨大的不利。而如果你的文章中创建了Tag关系的连接,那么也会因此而失效,所以请权衡好利弊后再使用!