WordPressの自動保存をとにかく停止させたい

3.X系になってから『auto-draft』で自動保存などリビジョンが付くようになった。
便利な機能なんだろうけど、DB直接イジる側からするとポンポン見えないデータが作られるのは不快なのである。

3.Xになりたてはwp-config.phpにdefine登録するだけで止まってたんだけど、バージョンが上がるとそうは行かなくなった。
な ん で そ う な っ た!?

この記事はその自動的に作られる見えないデータと戦うための設定記事である。
バージョンアップ等なにかあるたび変動する記事。

※現状までの対応でよければ、プラグインを作っておいたのでどうぞ
Forbid hiding post

基本的に以下は全て『wp-config.php』に記載する。
その方がバージョンアップ時めんどくさくないし…

require_once(ABSPATH . 'wp-settings.php');『前』に追加

『wp-config.php』に書かないとダメな奴。

リビジョン停止

define('WP_POST_REVISIONS', false);

『0』または『false』で、この大量に作られるリビジョンを止められる!
ハズなんだけど、記事のエディタ画面で編集直後に閉じちゃって、次の日ブラウザ開いたら出来てた。
なんでやねん!!

オートセーブの時間を延ばす

define('AUTOSAVE_INTERVAL', 604800);

自動下書きまでの時間を延ばす。上記は仮として『604800』(7日間)。
時間を延ばすだけだものだから、結局作られる…前はそんなんじゃなかった…
『wp_deregister_script('autosave');』してるのに結局作るから、設定しておく。

require_once(ABSPATH . 'wp-settings.php');『後』に追加

ここからの内容は、プラグインとして別に作ってもいい。書く内容は同じでOK。

オートセーブスクリプト停止

有名ですね!
AUTOSAVE_INTERVALを設定しているからなのか効いてくれない。
でも残しておくの…

function forbid_hiding_post_print_scripts(){
	wp_deregister_script('autosave');	// オートセーブスクリプト停止
}
add_action('wp_print_scripts','forbid_hiding_post_print_scripts');

管理画面のクイックドラフトを非表示にする

もう切っても切って出てくる『auto-draft』。
奴の原因は何と管理画面のダッシュボードの『クイックドラフト』だった!
あるだけで作るなんという害悪!管理画面から消そうぜ!

// 自動下書を作るクイックドラフトを非表示(停止)
function forbid_hiding_post_dashboard_setup() {
	if (function_exists( 'remove_meta_box' )){	// remove処理が動くときのみ
		remove_meta_box( 'dashboard_quick_press', 'dashboard', 'side' );
	}
}
add_action('wp_dashboard_setup', 'forbid_hiding_post_dashboard_setup' );

出来てしまうデータを非公開の見える投稿に変える

「いっそ出来るのはもうこの際仕方ないとして、作られるデータを見えるようにしておこう!」
と思っていたら同じことを考えている人がいた。
WordPressのauto-draftを強制的に下書き状態にする | Simple Colors

これを参照に条件を増やし、非公開記事が出来るようにしておいた。
自分はゴミ箱にすら入れたくないので、ゴミ箱も継承もすべて非公開にしてやった次第。
本体と区別をつけるためにタイトルに元のステータスを追加しておいた。

// それでも出来る自動下書等を非公開記事に変更
function forbid_hiding_post_insert_post( $post_id, $post ) {
	if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE && ! (int)$post_id ) { return; }
	// 裏で動くステータス全て停止
	$stop_status = array(
		'auto-draft',	// 自動下書
		'inherit',		// 継承
		'trash',		// ゴミ箱
	);
	if(in_array($post->post_status,$stop_status)){
		$update = array(
			'ID' => (int)$post_id,
			'post_title' => "[".$post->post_status."]".$post->post_title,	// タイトルに元状態追加
			'post_status' => 'private',	// 下書:draft 非公開:private
			'post_parent' => 0,			// 親指定消す
			'post_type' => 'post',	// revisionを通常投稿へ
		);
		wp_update_post($update);
	}
}
add_action( 'wp_insert_post', 'forbid_hiding_post_insert_post', 10, 2 );

※これを使うと『inherit』を作って表示させる『変更をプレビュー』が使えなくなります!
 元『inherit』データを作るだけ作ってプレビュー表示しない状態です!

既に出来てしまった記事をどうにかする方法については『wordpressのrevision記事を通常記事にDBから変更』を参照くださいせ。

公開:2009/7/10 @ 00:41
更新:2017/3/22 @ 15:40
更新:2017/3/25 @ 16:22
更新:2017/3/26 @ 17:18

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です