类别导航:
通知:目前网站正常哦!
你的位置:首页 >> 建站技术 >> wordpress数据库:表posts清理和整理

wordpress数据库:表posts清理和整理

发表日期:2011-11-14 作者:DH分类:建站技术 标签: wordpress
索引[隐藏]

1 缘起

wordpress的posts表是非常重要的表,所有的文章都放在里面,但是有时候内容很多,仔细检查表发现,还有很多的重复的内容,让人看起来非常不爽,而且数据量的增多会导致维护麻烦,而且会是数据库访问变慢。

2 原因

wp默认的配置会写草稿和修订版,这样会导致文章很多,占用数据空间。

3 方法

1. 清理posts表,清理掉草稿和修订版本 文章wordpress提高速度之一(数据库清理)已经提及了。http://dhblog.org/18.html 2. 禁止草稿、修订,这样就不会生成多余的内容了 3. 重新排序,删除之后会导致序号缺失,洁癖者需要重新整理数据,这样使得文章的序号非常整齐。

4 清理posts表

wordpress的文章有好多:wp_posts表中包括 文章种类:文章、修订版本、页面、文章的附件、菜单。 其中每种文章又会有很多状态:继承、发布、私有、草稿、自动草稿、回收站中。 冗余原因: (1)在博主写文章的时候,系统会保存很多的中间状态,在文章发布之后其很多的中间状态没有被删除。 解决办法: (1)使用插件:WP Cleaner,使用插件的好处就是有保护机制,无论怎么操作都无法影响已发布的贴子,请放心使用^^ (2)自己动手删除,数据库中的标志删除文章,注意备份。 说明:wp_posts的重要字段含义: post_type:文章类型,post表示为文章,revision表示为修订版本,page为页面,attachment是文章的附件信息,nav_menu_item是菜单。这里我们需要的是文章、页面、和菜单。 post_status:文章状态,inherit是继承的附件和文章的附带信息,publish是已经发布、private是私有的,draft是草稿,auto-draft是自动草稿,trash是在回收站。这里我们需要的是publish的状态的。 这里我们主要是要 已经发布的文章、页面和菜单,除此之外的都可以删除,当然可以根据自己的需求选择删除哪些
DELETE FROM  wp_posts 
WHERE NOT(post_status = 'publish' AND post_type IN('post','nav_menu_item','page'));

5 禁止草稿、修订

在 网站根目录下的 wp-config.php中添加:
/** 不会生成历史版本 */
#define('WP_POST_REVISIONS',false);

/** 不会自动保存 */
#define('AUTOSAVE_INTERVAL', false);
或者在function.php中添加
/* 移除自动保存和修订版本 */
remove_action('pre_post_update', 'wp_save_post_revision' );
add_action( 'wp_print_scripts', 'disable_autosave' );
function disable_autosave() {
	wp_deregister_script('autosave');
}
这样就不会保存草稿和自动修订版了。

6 重新排序

清理之后,还有很多重要的问题没有解决: 1. 就是新文章的序号很大,还不能设置过小,因为已经有很大的文章号出现了。 2. 旧文章的序号空缺很大,让人很不舒服。 下面就是解决这个问题的,这是Lee的代码,我使用了一下,没有问题。 将一下代码保存为config.php,放在网站的根目录。执行即可。注意: 1. 在执行之前需要备份好数据库 2. 需要将http://dhblog.org/archives/修改为你需要的固定文章的地址。 3. 推荐方法,建议在本机安装php环境和数据库,把网站数据导入到本地数据库之后,用执行完之后的数据恢复网上的数据。
query( 'update ' . $wpdb->prefix .'posts set ID = ' . $convertedrows . ' where ID = ' . $id );
 $wpdb->query( 'update ' . $wpdb->prefix .'posts set guid = "http://dhblog.org/archives/' . $id . '.html" 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! ';
?>
但是这样很危险:如果执行了"重新排序"之后,后果还是很严重的,主要有: 1. 会导致搜索引擎的不友好,不收录新的网页,被认为是抄袭。 2. 会导致你以前网页的链接没有了,应为改名字了。 3. 会让收藏你以前网页的网友不知道新的地址了。 总之要慎重。不管你们慎重不慎重,反正我是做了,而且收录下降了,但是我的主要流量不是搜索引擎,而且我不出名,所以删了就删了,无所谓。呵呵。

除非注明,文章均为灯火部落原创,转载请注明出处:wordpress数据库:表posts清理和整理-灯火部落
相关文章:
  • 经验总结:丢失的百度收录回来了
  • wordpress主题:纯静态文件文章归档
  • 网络赚钱:91问问调查网(1000积分换10元)
  • wordpress数据库:定期备份邮寄数据库
  • 友情推荐:BOX国外高速免费网盘服务
  • wordpress安全:处理垃圾评论(续)-前台管理评论
  • ∧回到顶部∧