失敗しないオフショア開発。
失敗しないオフショア開発。
2020.01.20
#57
バックエンドへの道

WordPressの自動保存を停止する方法

エリカ

こんにちは、ディレクターのエリカです。

WordPressの自動保存、便利ですよね? しかし、今回は、あえてこれを停止する方法について調べました。

自動保存とは

WordPressには、公開前の記事を編集しているときに、その内容を定期的に保存してくれます。意図せず、入力中にブラウザを閉じてしまったり、他のページに遷移してしまったりした場合や、また、入力中の記事を他のユーザーに引き継いだときにも自動保存され、同じ記事の編集画面を開いたときに、自動保存された入力内容を復元するか選択することができるようになります。
また、 Command/Control + S のショートカットで任意のタイミングで自動保存を実行することもできます。

ちなみに、初期状態では、自動保存は有効で、60秒間隔で、入力の自動保存を試みます。

こうなると、データベース上には大量のデータが記録されていくものかと思いますが、自動保存のタイミングで、前回の自動保存された内容と差分がなければ、新たに保存されません。また、基本的に保存されるデータは、ユーザーごとに最新のもののみが保存されていきます。なので、その記事を編集するユーザーごとに最大でひとつの自動保存のデータのみが、データベース上に存在するようです。

つまり、ユーザー数によりますが、リビジョンほどは、大量のデータにはならなそうではあります。

そんな自動保存ですが、どのように停止すればよいでしょうか?

自動保存を無効にする

自動保存のトリガーは全てjavascript側で、処理されます。そのときに、以下のような記述で、自動保存のプロパティの有無を確認し、自動保存を実施するかが判定されているようです。

if ( wp.autosave )

こちらは、 autosave.js から提供されているので、このスクリプトを読み込まなければ、自動保存に関する処理のすべてを綺麗に止められそうです。

そこで、テーマ内に以下のスクリプトを追記します。

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

これで、autosave.js の読み込みが停止され、自動保存の機能を止めることができました。

最大リビジョン数をコントロールする

ついでなので、リビジョンを停止、または最大保持数を変更する方法です。

/**
 * Determine how many revisions to retain for a given post.
 *
 * By default, an infinite number of revisions are kept.
 *
 * The constant WP_POST_REVISIONS can be set in wp-config to specify the limit
 * of revisions to keep.
 *
 * @since 3.6.0
 *
 * @param WP_Post $post The post object.
 * @return int The number of revisions to keep.
 */
function wp_revisions_to_keep( $post ) {
    $num = WP_POST_REVISIONS;

    if ( true === $num ) {
        $num = -1;
    } else {
        $num = intval( $num );
    }

    if ( ! post_type_supports( $post->post_type, 'revisions' ) ) {
        $num = 0;
    }

    /**
     * Filters the number of revisions to save for the given post.
     *
     * Overrides the value of WP_POST_REVISIONS.
     *
     * @since 3.6.0
     *
     * @param int     $num  Number of revisions to store.
     * @param WP_Post $post Post object.
     */
    return (int) apply_filters( 'wp_revisions_to_keep', $num, $post );
}

wp-config.phpWP_POST_REVISIONS な定数を定義するか、
wp_revisions_to_keep なフィルターで任意の数値を返却してやることで、コントロールできるみたいです。

まとめ

自動保存もリビジョンも便利な機能ですから、あまり止めることはないかと思いますが、データ容量の都合、記事IDをコントロールしたい場面、また、記事保存のタイミングで特殊な処理をしたりと、敢えて止めたい場面が無いとも限りません。
その場合に、自動保存およびリビジョンの停止の仕方を覚えておくといいかもしれません。