WordPress文章历史修订版本与自动草稿保存问题

maolai 网站建设评论276阅读模式

wordpress后台编辑文章或修改文章时经常自动保存,每一次编辑文章或更新都会写入数据中,并生成新的文章id,例如你新发布的文章是123.html,再重新修改这篇文章时可能会生成id124,自动草稿id125并写入数据库中,下次再发布一篇内容时id可能就是126.html而不是连续性124.html

wordpress文章编辑发布,修改都会留下版本修订历史,自动保存,自动草稿等数据。而且自动保存生成多余的文章ID链接在文章编辑后台是看不到的,在数据库mysql看的到。自动保存的好处是不小心关闭刚编辑的页面不会丢失文章内容,缺点是会在数据库产生很多无用的数据id,从而拖慢网站的速度。

1、可以在你当前使用主题的functions.php文件php结束标记 ?> 前加上如下代码

//禁用文章自动保存
add_action( 'admin_print_scripts', create_function( '$a', "wp_deregister_script('autosave');" ) );
//禁用文章修订版本
add_filter( 'wp_revisions_to_keep', 'specs_wp_revisions_to_keep', 10, 2 );
function specs_wp_revisions_to_keep( $num, $post ) {
   if ( 'post_type' == $post->post_type )
      $num = 0;
   return $num;
}

2、在后台写文章时,会有两个自动草稿,每点击一次“写文章”会新增一个自动草稿,之前自动新增的自动草稿,WordPress就无法读取原来的自动草稿,所以导致数据库产生了垃圾数据和文章ID不连续。

解决办法:在文件管理找到/wp-admin/includes/post.php文件,大概在第683行到第692行的代码,如下图所示:

		$post_id = wp_insert_post(
			array(
				'post_title'  => __( 'Auto Draft' ),
				'post_type'   => $post_type,
				'post_status' => 'auto-draft',
			),
			false,
			false
		);
		$post    = get_post( $post_id );

替换成以下代码并保存文件:

$posts = query_posts(array(
'post_status' => 'auto-draft',
'post_type' => $post_type,
'posts_per_page' => 1
));
if ($posts) {
$post = get_post($posts[0]->ID);
} else {
$post_id = wp_insert_post(array(
'post_title' => __('Auto Draft') ,
'post_type' => $post_type,
'post_status' => 'auto-draft',
));
$post = get_post($post_id);
}

上面代码是允许保存自动草稿,如果数据库中已有自动草稿,下次写文章时,自动加载原来的自动草稿用作新文章ID,以最大限度的保证文章ID连续性。WordPress版本升级后,需要再次修改此文件,个人不建议删掉自动保存的草稿和修订版。

 
maolai
  • 本文由 maolai 发表于 2024年1月4日 12:35:30
  • 转载请务必保留本文链接:http://www.bokequ.com/474.html

发表评论