wordpress 4.7.2最新版 如何使文章ID连续 禁止自动保存和修订 实测终极完美解决方案

wordpress

PS:这是4年前的一篇文章,因从wordpress3.5.x版本升级到最新版本4.7.2,所以文章ID连续也相应的做了调整。

我从来没写过技术贴,今天写一篇wordpress如何使文章ID连续,禁止自动保存和修订。

因为我的博客使用的是ID形式的链接,并且有点小小的强迫症使得我对于默认情况下ID不连续很不舒服。

首先要说明的是:

第一:添加page页会占用文章ID(解决方案:这个无所谓,不添加就是了)

第二:添加媒体上传图片等也会占用文章ID (解决方案:这个使用图片外链或者其他相册上传即可)

第三:头部导航链接添加MENUS也会导致文章ID不连续。(解决方案:如果添加导航,直接在模板文件header.php用HTML代码写死即可,毕竟一个链接占用一个文章ID是非常浪费的一件事)

所以如果想要使wordpress文章ID连续,那么一定要注意以上三点。

 

下面是重点也就是程序需要改动的地方:

一、wp-config.php 文件 中查找$table_prefix = ‘wp_’; 在这句话的上面位置插入如下代码:

define('AUTOSAVE_INTERVAL', false ); //自动保存时间
define('WP_POST_REVISIONS', false); //修定版本开启/关闭


二、wp-admin\post-new.php文件 查找wp_enqueue_script( ‘autosave’ ); 注释掉或者删除这一句,例如:

//wp_enqueue_script(‘autosave’);

wp-admin\post.php文件查找

if ( ‘attachment’ !== $post_type ) {
wp_enqueue_script( ‘autosave’ );
删除或者注释掉,例如

if ( 'attachment' !== $post_type )
//wp_enqueue_script('autosave');

 

三、wp-admin\includes\post.php 文件 查找(适合3.5.x之前的老版本4.7.2之后的版本之后无需修改,修改会造成新文章无法发布)

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 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 {

 

四、模板主题文件夹内,也就是目前使用的模板中修改functions.php 文件,在最底部增加如下代码:

/* 取消自动保存和修订版本 */
remove_action(‘pre_post_update’, ‘wp_save_post_revision’ );
add_action( ‘wp_print_scripts’, ‘disable_autosave’ );
function disable_autosave() {wp_deregister_script(‘autosave’);}

/* 取消自动保存和修订版本 */

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 = ‘rivision’ ) ) 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’);” ) );
// 禁用修订版本
remove_action( ‘pre_post_update’ , ‘wp_save_post_revision’ );

 

五、wp-includes/defaut-contants.php文件搜索“define( ‘AUTOSAVE_INTERVAL’, 60 );”和“define(‘WP_POST_REVISIONS’, true );”逐条搜索。
修改前
if ( !defined( 'AUTOSAVE_INTERVAL' ) )
define( 'AUTOSAVE_INTERVAL', 60 );
if ( !defined('WP_POST_REVISIONS') )
define('WP_POST_REVISIONS', true );

修改后
if ( !defined( 'AUTOSAVE_INTERVAL' ) )
define( 'AUTOSAVE_INTERVAL', false );
if ( !defined('WP_POST_REVISIONS') )
define('WP_POST_REVISIONS', false );

至此,全部修改完成,完美解决wordpress 4.7.2文章ID不连续的问题
转载请注明出处: http://waqile.com/2013-06/12.html

 

——————————–
2017-02-11 修改
2013-06-14 修改