如何id变动自动保存html软件,Wordpress折腾小记:彻底解决ID不连续的问题-自动保存、自动修订 | 地瓜哥博客网...
使用Wordpress,尤其从3.0走入Wordpress世界的朋友,也许都遇到过一个问题:自动保存(Auto-Save)和文章修订(Post-Revisioning)功能导致文章ID不连续的问题。有时还特别夸张。例如,我的“‘地瓜哥’博客网”,第一篇文章是1,第二篇文章已经一下子跳到了19。这样对于像D瓜哥这样的“ID洁癖”的人来说,实在很不爽!经过D瓜哥的多次尝试后,终于很彻底地解决了这个问题。并且,还可以把以前被自动备份的ID重新利用起来!
去掉自动草稿的功能
造成发布文章ID不连续的原因有三:
自动保存功能 Auto-Save;
历史版本 Post Revisions;
自动草稿功能 Auto-Draft!
针对WordPress 3.4.x,这里给大家介绍一个解决ID不连续发方法:
打开%WP%/wp-config.php文件,在 “$table_prefix = ‘wp_’;” 前面添加如下代码(注意,一定是”$table_prefix = ‘wp_’;”这行的前面):
define('WP_POST_REVISIONS', false);
define('AUTOSAVE_INTERVAL', false);
找到并打开%WP%/wp-admin/post-new.php 和%WP%/wp-admin/post.php 这两个文件,将其 “wp_enqueue_script(‘autosave’);” 注释或删除掉。如下:
//wp_enqueue_script('autosave');
经过上面的修改后,文章的自动保存和历史版本都关闭了。不过,这里也带来了一个副作用:预览不能使用了,需要手动保存草稿后才行。美中不足吧。
另外,还有个自动草稿功能,我们下面会介绍如何处理。
在这里D瓜哥要纠正一个曾经犯的错误。D瓜哥在“关闭WordPress自动保存和文章修订功能”中提到了一种方法,但是经过D瓜哥的使用经验来看,这种方式不好使!请大家停止使用。
删除无用的草稿
在“删除草稿”方面,有一些相应的插件,比如Delete-Revision,但是给Wordpress安装过多的插件会降低她的速度。所以,D瓜哥尽量少安装插件,如果通过简单的代码修改就能解决问题,就尽量修改代码。另外,由于“删除草稿”这样的操作,也许只需要操作一次,而且只需要简单的SQL。所以,D瓜哥认为必要安装插件。这次,我们就通过编码来完成我们的工作。
注意,请在进行如下工作前,备份数据库!防止把数据搞坏。
我们先来看一下冗余数据(无用的自动修订、草稿等)。登陆phpMyAdmin(一般虚拟主机都会提供的),然后选中相应的数据库,然后在里面执行如下SQL:
-- 查看自动修订产生的冗余数据
-- 注意,请根据自己的情况,修改表名(主要是表前缀)
SELECT * FROM `wp_posts` WHERE `post_type` = 'revision';
这里显示内容都是一些冗余的数据,可以直接删除。删除SQL如下:
-- 删除冗余数据
DELETE FROM `wp_posts` WHERE `post_type` = 'revision';
另外,需要给大家提醒一点。在D瓜哥查找删除冗余数据的资料中,见到过如下的写法:
DELETE FROM `wp_posts` WHERE `post_status` != 'publish' OR `post_type` = 'revision';
经过D瓜哥对实际数据的观察发现,这个SQL是不对的。它会把上传的图片等信息删除掉。所以,请大家注意!!
经过这次清理后,数据库干净了许多。同时,也在表中的ID不再连续,还空出来好多没被用掉的ID数。那么,我们该如何重用这些被空出来的ID呢?
重用被浪费掉的ID
根据D瓜哥的个人经验,Wordpress会每隔一段时间,自动在wp_posts表中添加一条草稿记录。并且,对于用户来说是不可见的。这也是一种浪费。浪费的还有上一节被删掉后空出来的ID。所以,有必要想办法重新这些被浪费掉的ID。
重用自动草稿产生的ID
既然,Wordpress能产生不可见的草稿记录。那么,我们修改一下代码,在添加文章的时候,把自动产生的草稿记录读取出来,重新添加文章内容即可。下面,D瓜哥给大家介绍一下方法:
打开%WP%/wp-admin/includes/post.php文件,将如下内容(Wordpress 3.4.2):
// 原始Wordpress代码
if ( $create_in_db ) {
$post_id = wp_insert_post( array( 'post_title' => __( 'Auto Draft' ), 'post_type' => $post_type, 'post_status' => 'auto-draft' ) );
$post = get_post( $post_id );
if ( current_theme_supports( 'post-formats' ) && post_type_supports( $post->post_type, 'post-formats' ) && get_option( 'default_post_format' ) )
set_post_format( $post, get_option( 'default_post_format' ) );
} else {
替换为如下内容:
// 替换后,可以重用自动草稿
if ( $create_in_db ) {
global $current_user; // 获取当前登录管理用户
$post = $wpdb->get_row( "SELECT * FROM $wpdb->posts WHERE post_status = 'auto-draft' AND post_type = '$post_type' AND post_author = $current_user->ID ORDER BY post_date ASC, ID ASC LIMIT 1" ); // 获取最早一条自动草稿
if ( !$post ) {
$post_id = wp_insert_post( array( 'post_title' => __( 'Auto Draft' ), 'post_type' => $post_type, 'post_status' => 'auto-draft' ) );
$post = get_post( $post_id );
}
if ( current_theme_supports( 'post-formats' ) && post_type_supports( $post->post_type, 'post-formats' ) && get_option( 'default_post_format' ) )
set_post_format( $post, get_option( 'default_post_format' ) );
} else {
请注意上面代码中使用的SQL语句:
SELECT * FROM $wpdb->posts WHERE post_status = 'auto-draft' AND post_type = '$post_type' AND post_author = $current_user->ID ORDER BY post_date ASC, ID ASC LIMIT 1
这里,之所以使用post_date排序,是因为自动草稿超过七天后会自动删除。所以,先使用比较旧的记录。可能,你会问,那不是有ID在排序吗?这个问题,我们在下一小节再解释。
生成添加“草稿”的数据
经过上面的折腾,空出来一些ID。既然自动草稿的记录能使用,那么空出来的ID更加可以随意使用。现在,我们就想办法把这些空出来的ID也使用起来。
根据网友测试结果显示,经过修改上面的代码修改后,只要手动保持wp_posts表中数据的三个字段内容如下,那么这些空出来的ID也可以被使用起来。
post_status='auto-draft'
guid='http://youdomain/?p={$ID}'
post_type='post'
// ID不能为空,还有和{$ID}保持一致;
ID
// post_author字段也要填上相应作者的ID。
post_author
将空出来的ID分别安装上面的要求,将对应一列数据造出来即可。我们上面提到,Wordpress会自动添加自动草稿的记录,并且七天后就自动删除。那么,我们要在两个时间相关的字段post_date和post_modified上,填上一个尽可能打一点的值,防止Wordpress自动删除。但是,系统还有可能产生自动草稿。那么,为了防止被删除,系统产生的这些自动草稿记录要优先使用掉。所以,我们上面的SQL中,有按照时间排序的条件。
既然有了上面这些要求,那么我们就写一个SQL语句,来自动生成数据。SQL如下:
-- 生成100以内的空ID对应的记录
CREATE TABLE post_bk as
SELECT iid AS ID,
'auto-draft' as post_status,
CONCAT('http://www.diguage.com/?p=', iid) AS guid,
'post' AS post_type,
1 as post_author,
str_to_date('11.25.2015 00:00:00',
'%m.%d.%Y %H:%i:%s') as post_date,
str_to_date('03.26.2015 21:44:00',
'%m.%d.%Y %H:%i:%s') as post_modified
from ( select b.dd * 10 + a.dd as iid
from ( select 1 as dd
union all select 2
union all select 3
union all select 4
union all select 0
union all select 5
union all select 6
union all select 7
union all select 8
union all select 9) a,
(select 0 as dd
union all select 1
union all select 2
union all select 3
union all select 4
union all select 5
union all select 6
union all select 7
union all select 8
union all select 9) b
) num
WHERE iid > 0 and iid NOT IN
( SELECT ID from wp_posts )
ORDER BY iid ASC;
这个SQL语句只能生成100以内的空ID的记录;另外,这里制造100以内的整数时,有点麻烦,可以考虑直接用编程语言生成以逗号分隔的数字序列。
这个生成工作最好在本地进行。生成完后,使用phpMyAdmin将生成出来的post_bk表的数据都导出成脚本,然后登陆服务器上的phpMyAdmin,将脚本导入到服务器上的表中。
这里,给大家展示两条我导出出来的数据。需要的话,直接拷贝使用:
-- 添加空白记录对应,重用ID
INSERT INTO `wp_posts` (`ID`, `post_status`, `guid`, `post_type`, `post_author`, `post_date`, `post_modified`) VALUES(3, 'auto-draft', 'http://www.diguage.com/?p=3', 'post', 1, '2015-11-25 00:00:00', '2015-03-26 21:44:00');
INSERT INTO `wp_posts` (`ID`, `post_status`, `guid`, `post_type`, `post_author`, `post_date`, `post_modified`) VALUES(4, 'auto-draft', 'http://www.diguage.com/?p=4', 'post', 1, '2015-11-25 00:00:00', '2015-03-26 21:44:00');
参考资料
如何id变动自动保存html软件,Wordpress折腾小记:彻底解决ID不连续的问题-自动保存、自动修订 | 地瓜哥博客网...相关推荐
- 自动图片拼贴制作软件:CollageIt Pro绿色便携版_拔剑-浆糊的传说_新浪博客
http://www.portablesoft.org/collageit/ 自动图片拼贴制作软件:CollageIt Pro绿色便携版 CollageIt是一个非常简便的图片拼贴制作软件,只要导入图 ...
- 安卓自动滑屏脚本_手机自动滑屏软件下载-安卓手机自动滑屏(Auto.js)下载v4.1.1 安卓免root版-西西软件下载...
安卓手机自动滑屏软件一款全新功能强大的手机应用脚本,可以更好的实现上下滑屏幕助手,免root屏幕自动滑动,编写软件.游戏脚本等一站式服务功能,需要的朋友快来下载体验吧! 安卓手机自动滑屏是什么软件 手 ...
- 全球与中国自动车牌识别软件行业市场调研及发展趋势预测报告
车牌自动识别软件利用车牌区域的纹理特征来定位车牌.常用的车牌检测算法包括:利用梯度信息的投影统计:小波变换用于分割:车牌区域扫描连接算法:利用区域特征训练分类器的方法等.这些算法各有优缺点,如何从复杂 ...
- 软件测试作业8:分析自动售货机软件例子生成的判定表图例
作业8 1.分析 Chap.5 (Lec.19) 自动售货机软件例子生成的判定表图例的第6列和第23列,分别给出: (1).输入条件的自然语义陈述: (2).输出结果的自然语义陈述: (3).用命题逻 ...
- 电脑自动安装垃圾软件怎么办?拒绝重装系统,教你一招搞定!
相信读到这篇文章的你也遭遇了和我一样的痛苦,我非常理解,希望我的这个方法能解决你的问题.我使用了各种杀毒软件,各种管家,各种安全卫士,各种系统急救箱,电脑安全模式下查杀病毒,手动卸载各种疑似木马病毒等 ...
- WordPress+Markdown+为知笔记,实现高质量笔记和博客
本文写给:和我一样想要有一套操作容易.使用方便.兼容性好的 高质量个人知识管理和博客 实现方案的人. 欢迎通过此链接注册为知笔记来支持本人:https://note.wiz.cn/i/1fe81312 ...
- 在阿里云服务器(Ubuntu系统)下使用WordPress搭建博客网站教程
最近着手也搭建了一个自己的博客网站,在这里与大家分享一下搭建的过程和遇见的问题,希望对同学们有所帮助. 环境:阿里云服务器(Ubuntu系统) 提醒:申请阿里云服务器,可以到阿里云官网领取阿里云幸运券 ...
- 博客备份工具BlogDown 软件使用感想
最近在找博客备份相关的工具,看到了一个不错的博客备份工具BlogDown.使用博客备份BlogDown工具是可以制作博客电子书的.他支持导出多种文件格式,包括常用的电子书格式chm,还有word格式d ...
- 接口应用小玩具-博客园积分排名变动监控工具
小玩具-博客园积分排名变动监控工具 一个简单的在线服务监控和提醒工具 1 概述 前段时间自己准备重新开启自己的博客园,然后还和一些圈子里面的朋友夸下海口,自己要开始像打游戏那样,进行博客园的 天梯 ...
最新文章
- Linux真随机数的生成
- linux查询关键词上下行_Linux:从文件中搜索关键字并显示行数(cat,grep函数)
- 《Genesis-3D开源游戏引擎完整实例教程-跑酷游戏篇:简介及目录》(附上完整工程文件)...
- Android 检查版本更新 Server后台下载
- C语言验证大小端的几个方法
- php传递参数给asp.net,asp.net 传值总结
- [django]Django输出页面方式的补充
- @程序员,你真的懂数据可视化吗?
- docker compose安装_docker stack,docker-compose前世今生
- Python学习笔记(5),Battleship 游戏
- 编写一个函数,输入n为偶数时,调用函数求1/2+1/4+…+1/n,当输入n为奇数时,调用函数求1/1+1/3+…+1/n
- 添加图书的代码C语言,C语言图书系统代码.doc
- 输入10个学生某门课的成绩,用函数找出最高分、最低分,计算平均分,并在主函数中输入和输出(用函数和全局变量来完成)(C语言)
- DANN困扰解决-交替训练数据
- 代数合并同类项计算机步骤,代数式(合并同类项)
- Win10远程桌面,用户账户无效的解决方法
- Windows系统下安装CVAT标注工具
- 浅析局域网ARP欺骗导致的信息泄露
- 2022-2028年全球与中国工业分析软件市场现状及未来发展趋势分析报告
- dllcache“转移”到别的盘
热门文章
- Android 开发之Windows环境下Android Studio安装和使用教程(图文详细步骤)
- django学习之Model(四)MakingQuery
- 无废话ADO.NET 第二章 关于连接
- 美团产品顾问马占凯:关于育儿,你需要知道的一切
- 干货 | 深入浅出分销体系
- 3 Useful BookmarkLets for Debugging
- unity, List namespace
- LUA Learning Note 4: 数据结构
- eclipse运行时不自动保存的解决方法
- IDL关系运算符Eq Ne Le Lt Gt Ge含义说明