无崖子资源网
做有态度的分享学习平台!

解决wodrpress文章ID不连续-终极方法

淘宝天猫优惠劵领取网站:tao.fbisb.com

无崖子的WordPress的版本修订历史(revision)和自动保存(autosave)功能会非常讨厌的增加文章ID的数字,会造成连续的两篇文章,ID数值可能会相差很多,让我们这些希望文章ID连续的人感到非常不舒服。然而,我们可以通过多种方式来禁用这个自动保存和版本修订的功能,网上已经有很多wordpress禁用自动草稿和版本修订的文章,先附上一个我之前用的吧。无崖子的原先方法

 

<?php
/*
Plugin Name: Disable Revisions and Autosave
Plugin URI: http://exper.3drecursions.com/2008/07/25/disable-revisions-and-autosave-plugin/
Description: Disable the Revisions and Autosave functions. By <a href="http://exper.3drecursions.com/">Exper</a>. Original idea and code by <a href="http://lesterchan.net/wordpress/2008/07/17/how-to-turn-off-post-revision-in-wordpress-26/" target="_blank">Lester Chan</a> and <a href="http://www.untwistedvortex.com/2008/06/27/adjust-wordpress-autosave-or-disable-it-completely/" target="_blank">Untwisted Vortex</a>.
*/

register_activation_hook(__FILE__, 'wp_disable_revisions_install');

/**
 * Delete all entries of revisions in database
 * 
 * @global $wpdb WordPress database connection
 * @return $wpdb->query
 */
function wp_disable_revisions_install() {
	global $wpdb;

	$sql = "
		DELETE
			`a`, `b`, `c`  
		FROM
			`" . $wpdb->prefix . "posts` `a`  
		LEFT JOIN
			`" . $wpdb->prefix . "term_relationships` `b` ON (`a`.`ID` = `b`.`object_id`)  
		LEFT JOIN
			`" . $wpdb->prefix . "postmeta` `c` ON (`a`.`ID` = `c`.`post_id`)  
		WHERE
			`a`.`post_type` = 'revision'
	";
	// Clean tables
	$wpdb->query($sql);
	// Optimize tables
	$wpdb->query("OPTIMIZE TABLE `" . $wpdb->prefix . "postmeta`, `" . $wpdb->prefix . "posts`, `" . $wpdb->prefix . "term_relationships`");
}

/**
 * Set define WP_POST_REVISIONS to zero
 */
define ('WP_POST_REVISIONS', false);

/**
 * Remove revisions actions in post.php
 */
remove_action('pre_post_update', 'wp_save_post_revision');

function disable_autosave() {
wp_deregister_script('autosave');
}
add_action( 'wp_print_scripts', 'disable_autosave' );
?>

 

 

把上面的代码复制,最后保存成 disable-revisions-and-autosave.php ,上传到插件目录启用即可。

最新方法

上面的禁用自动保存和修订版本,新建文章时会产生无用的auto-draft记录。之前网上的办法都是采用修改WordPress原文件的方法屏蔽自建auto-draft记录,但是似乎目前没有适合3.5之后版本的办法,而且每次升级都需要修改原文件,既麻烦又不安全。
其实直接操作数据库更简单,原理为:如果新建文章或上传图片就获取数据库中最后一条有用记录(状态为publish、draft或private的文章或状态为inherit且类型为attachment的行)的ID,并把之后的无用行(状态为auto-draft的文章,状态为inherit且类型为rivision的文章)删除掉,再重设自增。这样无论如何新建文章,数据库中最多有且仅有一条auto-draft记录(WordPress刚刚创建的行,保存之后状态变为publish、draft或private),这样文章ID就能连续了。

今天无崖子在修改文章的时候发现禁用修订版本不能用了,于是修改了禁用修订版本的代码,在4.9.7版本上使用正常。

 

/*WordPress 文章 ID 连续之终极插件,彻底禁用自动保存和修订版本,新建文章时也不会产生无用的 auto-draft 记录。*/ function keep_id_continuous(){ global $wpdb; $lastID = $wpdb->get_var(“SELECT ID FROM $wpdb->posts WHERE post_status = ‘publish’ OR post_status = ‘draft’ OR post_status = ‘private’ OR ( post_status = ‘inherit’ AND post_type = ‘attachment’ ) ORDER BY ID DESC LIMIT 1”); $wpdb->query(“DELETE FROM $wpdb->posts WHERE ( post_status = ‘auto-draft’ OR ( post_status = ‘inherit’ AND post_type = ‘revision’ ) ) AND ID > $lastID”); $lastID++; $wpdb->query(“ALTER TABLE $wpdb->posts AUTO_INCREMENT = $lastID”); } // 将函数钩在新建文章、上传媒体和自定义菜单之前。 add_filter( ‘load-post-new.php’, ‘keep_id_continuous’ ); add_filter( ‘load-media-new.php’, ‘keep_id_continuous’ ); add_filter( ‘load-nav-menus.php’, ‘keep_id_continuous’ ); // 禁用自动保存,编辑长文章前请注意手动保存。 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 ) { return 0; }

只要将上面的代码插入到主题functions.php中就可以了,以上的代码考虑了使用媒体库和自定义菜单的可能,如果需要文章ID完全连续,就不要使用WordPress内置的媒体库功能和自定义菜单功能。

未经允许不得转载:无崖子资源网 » 解决wodrpress文章ID不连续-终极方法

评论 抢沙发

签到
  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
切换注册

登录

忘记密码 ?

切换登录

注册