实际上很早就升级了自己的WordPress到3.1版,想当然的,也就按照《关闭WordPress 3.0版的自动草稿(auto-draft)功能》来编辑了3.1版的代码从而想关闭自动草稿(auto-draft)功能。一开始自己没注意,升级后几天都没有写文章,后来才发现有同学留言,说以前3.0版的方法失效了,如果那样做,会造成无法发表新文章,或者无法编辑文章,均会提示没有权限操作。
这个可就复杂了。这个自动草稿对我来说用处不大,虽然之前出过一次错,我编辑了大半天,忘记保存草稿,结果我爸来收菜,造成浏览器卡死,只得强行结束,没法,最后只有重新来写。不过也没事,都是原创,写过的东西立刻回忆就出来,没多大碍。但是对于有洁癖的人来说,ID号连续是种习惯。所以只得凑合着用,我还是有办法让ID连续,不过是手动方式。不关闭自动草稿,每次编辑文章的同时,如果手动保存草稿,就一定会产生一条自动草稿记录,而自己保存的文章被调到下一个ID号。
原始的方法就是登录phpMyAdmin,然后找到那条草稿记录,将模式由“auto-draft”改为“draft”,此时点击文章列表,就会发现这条名为“自动草稿”的草稿,编辑成新文章发表即可。但是这样就得每次写一篇必须重复上述动作,还是比较的麻烦。
不过幸好,就是给我提议3.0方法在3.1上失效的Gesion同学研究出了新的方法。实际上,只要懂PHP就可以改了,就是个处理逻辑而已,去掉非要新建自动草稿这个动作,如果有草稿则从编号最小的那个开始调用来发表新文章。
可惜本人学识浅薄,实在是不懂这个东西,只得照搬Gesion同学的方法。还是一样的,跟3.0版修改的文件一致,找到"/wp-admin/includes/post.php"文件,搜索"$create_in_db",不含引号。可以发现,就是如下代码产生的这个自动草稿(2013 年 8 月 11 日更新,支持最新的 3.6 版):
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 { $post = new stdClass; $post->ID = 0; $post->post_author = ''; $post->post_date = ''; $post->post_date_gmt = ''; $post->post_password = ''; $post->post_type = $post_type; $post->post_status = 'draft'; $post->to_ping = ''; $post->pinged = ''; $post->comment_status = get_option( 'default_comment_status' ); $post->ping_status = get_option( 'default_ping_status' ); $post->post_pingback = get_option( 'default_pingback_flag' ); $post->post_category = get_option( 'default_category' ); $post->page_template = 'default'; $post->post_parent = 0; $post->menu_order = 0; $post = new WP_Post( $post ); }
修改业务逻辑,将上述代码用下面代码替代即可(4月6日更新):
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 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' ) ); }
注意,如果是WordPress 3.0版(包含3.0.x版)要么删除“// Below is added in 3.1”及后面的 2 行代码,要么就是用3.0版的修改方法。
修改完毕后上传空间覆盖你的源文件即可!当然,你还需要一个插件,叫做Super Switch,请安装后,将“保存修订版本”和“自动保存”设为禁止,这样才能完美的关闭WordPress的自动草稿功能!
4月4日更新:此方法实际并非完美,昨天测试才发现,原来这个只能禁止新建文章时候的自动草稿,而新建页面时候的自动草稿却仍然存在,故还在等高人更新完美方法或者制作出相关的插件!
4月5日更新:又测试出了一些结论,该方法无法新建页面,只要新建页面,无论是保存还是发布都会提示“您尝试编辑这篇文章:“自动草稿” 失败。”
上面说的新建页面会出现自动草稿的问题,实际后台有两个地方那个仍然会产生,一个是进入后台的主页“控制板”,因为该页默认左上角是含有一个快速发布的编辑器,该编辑器同样会产生自动草稿,另一个就是“页面”页,只要你点击页面,无需“添加新页面”都会产生自动草稿。限于上面说的无法新建页面的问题,目前的方法是去数据库中找到产生的那条自动草稿,将其类型“post_type”从“post”改为“page”,相当于手工在数据库里添加了一条新的页面草稿,然后你再来编辑该条页面草稿,即可成功发布。还好页面不是经常会发布,暂时不影响WordPress的正常使用。
而对于那条非要出现的自动草稿,实际我们也不必担心,上述修改代码的逻辑,就是当数据库中有一条或多条状态为“auto-draft”的自动草稿时,取ID最小的,新文章即使用此条记录来进行发布。如果没有此种类型的数据,才会新插入一条数据。并且查询数据时是根据当前的用户来判断,不会出现多用户时出错。这样就可以避免了自动草稿(auto-draft)的冗余垃圾数据。保证了日志ID的连续性。所以,上面说的即使产生了自动草稿(auto-draft)也不怕,你只要正常的发表一篇文章,这条自动草稿(auto-draft)就被利用上了,如果有多条自动草稿(auto-draft),就会取ID最小的那条来发表,以保证你的ID是连续的。故还可以说是比较完美的。
这里再插一句,利用WordPress的附件上传功能来上传图片或是文件时,一个附件会占用一个ID,例如你本文利用WordPress编辑器自带的附件上传功能上传了2个图片,1个压缩包,那么已经被这3个附件占用了3个ID,你的下一篇文章ID将会从目前你本文的ID加上3之后的那个ID。这样也是无法让文章ID连续的。只能说是WordPress的一个小缺憾?不知这样开发的好处,附件完全可以使用一个新的表来保存记录的。例如国内的ZBlog这方面就做得很好。
4月6日更新:经过gesion同学的再次修正,目前已经能正常的发表文章和页面了,自动草稿虽然会产生,但是能被很好的利用起来,故目前ID已经能够连续,比较完美了,建议各位同学更新!
发布于 2011-03-24 00:39:06 回复该评论
我的已经关闭了。
发布于 2011-03-28 22:08:16 回复该评论
发布于 2011-03-30 03:26:20 回复该评论
发布于 2011-03-28 23:04:45 回复该评论
发布于 2011-03-30 03:27:07 回复该评论
发布于 2011-04-06 23:33:06 回复该评论
发布于 2011-04-07 00:39:27 回复该评论
发布于 2011-04-08 00:48:48 回复该评论
发布于 2011-04-15 10:00:24 回复该评论
很希望获得你们懂行的帮助哦...
谢谢啦.
发布于 2011-04-16 19:00:05 回复该评论
发布于 2011-04-18 06:29:41 回复该评论
发布于 2011-07-18 04:50:00 回复该评论
发布于 2011-07-18 07:34:47 回复该评论
发布于 2013-02-25 08:31:21 回复该评论
发布于 2013-03-06 19:13:49 回复该评论
发布于 2013-03-07 09:35:21 回复该评论
发布于 2013-03-10 22:25:56 回复该评论
发表评论:
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。