" id="b1img" alt="米课”N+1“思维建站-非官方免费技术支持,Wordpress/Zencart/Opencart建站、SEO" title="米课”N+1“思维建站-非官方免费技术支持,Wordpress/Zencart/Opencart建站、SEO">
  • " alt="米课”N+1“思维建站-非官方免费技术支持,Wordpress/Zencart/Opencart建站、SEO" title="米课”N+1“思维建站-非官方免费技术支持,Wordpress/Zencart/Opencart建站、SEO" />
  • " alt="Windows/Linux服务器运维技术支持 环境搭建、应用发布、服务器管理、虚拟化、云计算" title="Windows/Linux服务器运维技术支持 环境搭建、应用发布、服务器管理、虚拟化、云计算" />
  • " alt="高校/小型企业网络运维与建设免费技术支持,网络规划、网络优化、故障排除、网络管理" title="高校/小型企业网络运维与建设免费技术支持,网络规划、网络优化、故障排除、网络管理" />

wordpress禁止自动草稿及历史版本保持文章ID连续的方法

程序设计2011-05-13 itlogger阅读(567) 评论(0)

通过该方法,可以实现Wordpress不禁止自动保存草稿功能,却不生成垃圾数据并保持wordpress文章ID的连续性。

1、禁止wordpress历史版本

在wordpress的程序根目录,配置文件wp-config.php中,找到

define('WP_DEBUG', false);

在其下方插下以下内容

define('WP_POST_REVISIONS', false);
define('AUTOSAVE_INTERVAL', 86400);

解释一下,插入的第一条WP_POST_REVISIONS,看字面意思就知道是禁止历史版本功能。

第二条AUTOSAVE_INTERVAL,这个是禁止自动保存。86400就是一天,自动保存时间设置为一天。比如你在后台添加日志的时候,当输入标题,切换到内容输入时,此时就会自动保存成草稿。当你编辑时,也会定时保存一下,防止你正在编辑的内容丢失。这个草稿是在后台可见的。所以这条根据你的需要来定。如果需要自动保存草稿,这条可以删掉不要。而根据我后面的修改,这条是完全可以删掉的。

2、禁止wordpress自动保存草稿。

在wp-admin/includes/post.php中,从第374行开始,有一个if判断,代码如下:

1
2
3
4
5
6
7
8
if ( $create_in_db ) {
// Cleanup old auto-drafts more than 7 days old
$old_posts = $wpdb->get_col( "SELECT ID FROM $wpdb->posts WHERE post_status = 'auto-draft' AND DATE_SUB( NOW(), INTERVAL 7 DAY ) > post_date" );
foreach ( (array) $old_posts as $delete )
wp_delete_post( $delete, true ); // Force delete
$post_id = wp_insert_post( array( 'post_title' => __( 'Auto Draft' ), 'post_type' => $post_type, 'post_status' => 'auto-draft' ) );
$post = get_post( $post_id );
} else {

我来解释一下这段代码的功能,首先,清除七天以前的自动草稿,然后插入一条新草稿,如果你继续写文章并发布,那么这条草稿就被使用了,包括在后台首页有一个快速发布,也用到了这个。但如果你仅仅是点击了new post(添加文章),接下来没有输入任何内容就跳到别的页面去了或关闭了,此时仍然会生成一个自动草稿,而这个草稿,是后台不可见的,是垃圾数据。

所以我修改了一下代码,将这个if判断中的内容替换成以下内容,代码如下:

if ( $create_in_db ) {
global $current_user;
$post_auto_draft = $wpdb->get_row( “SELECT * FROM $wpdb->posts WHERE post_status = ‘auto-draft’ AND post_author = $current_user->ID ORDER BY ID ASC LIMIT 1” );
if ($post_auto_draft){
$post = $post_auto_draft;
} else {
$post_id = wp_insert_post( array( ‘post_title’ => __( ‘Auto Draft’ ), ‘post_type’ => $post_type, ‘post_status’ => ‘auto-draft’ ) );
$post = get_post( $post_id );
}
} else {

原理及说明:当数据库中有一条或多条状态为”auto-draft”的自动草稿时,取ID最小的,新文章即使用此条记录。如果没有此种类型的数据,才会新插入一条数据。并且查询数据时是根据当前的用户来判断,不会出现多用户时出错。这样就可以避免了自动草稿(auto-draft)的冗余垃圾数据。保证了日志ID的连续性。但最后我要提醒一句,如果你在日志中添加了附件,如图片,那么该图片也会占用一条数据,即一个连续的ID,所以,如果你以ID形式,发现日志有时候不是连续的ID了,那么,有可能是你日志的附件占用了临近的ID。

摘至:Akii Snow

转载请注明 :IT樵客
文章地址:http://www.itlogger.com/program/1704.html
标签:
相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注