【WordPress】カスタムフィールドで必須項目に設定したためにエラーが発生する「自動保存」を停止する方法

ちょっと長いタイトルになってしまいましたが、タイトルを見て「そうそう」と思う方はいると思いますので自身の備忘録も兼ねて紹介します。

WordPressにはカスタムフィールドという機能があり、

  1. 定型的に入力すべき項目をフォームのようにして入力できる
  2. カスタムフィールドとテーマのテンプレートを組み合わせれば、フォームに入力するだけの入力環境ができる
  3. カスタムフィールドの「必須」設定をして、入力漏れを防ぐ
  4. カスタムフィールド内の語句を対象に検索させることができる

など便利に使えるようになるのですが、1つ問題が発生するときがあります。

それは、タイトルにも書いた
「カスタムフィールドの値を必須項目にした場合、Wordpressの基本機能である自動保存と相性が悪いことがある」
ということです。

自動保存は基本的に同じ投稿IDのものを定期的に自動で上書きしてくれるので万が一途中でパソコンが落ちたり、誰かがブラウザを閉じてしまったりしたときにホッとする機能なのですが、
自動保存よりも前に必須入力にしたカスタムフィールドの値を入力しないと不具合が出ることがある
のです。

どういうことかというと、投稿などの新規追加でコンテンツを書いていくと、まずは自動保存を有効にするため?に下書きが作られます。このとき投稿IDの取得と共に動くのがカスタムフィールドの値などのチェック。これで必須項目が空欄だとエラーになり
「少なくとも1つ以上の値が必要です」と赤文字で表示されたり、ひどい場合にはハングアップして待機状態になり、何もクリックできない状況になることもあります。

これを回避するためには、自動保存の機能を停止するのが一番の方法です。カスタムフィールドを使って必須項目を設ける・・・というレベルの方は特に自動保存がなくても自分で下書き保存するでしょうし、席を離れるときには必ず保存していくだろうと思えますからね。というわけでさっそく自動保存を停止する方法を紹介します。

スポンサーリンク

WordPressの投稿などで自動保存を停止する方法

自動保存は前述した通り、同一の投稿IDでどんどん上書きしていく機能。よく聞く「リビジョン」とは意味が違うのです。え?という方へ簡単に説明すると、リビジョンは「元の状態に戻せるように保存していく」機能で、戻せるように今ついている投稿IDとは別のIDで保存されるようになっているのです。従ってたくさんリリースされているリビジョン停止用のプラグインを入れても自動保存は停止されないのです。

話を元に戻して、自動保存を一番簡単に停止するにはテーマのfunctions.phpへ以下のコードを挿入するだけで実装できます。万が一のためにバックアップは取っておくようにしてくださいね。

自動保存を停止するコード

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

これだけのコードのためにプラグインをわざわざ探す必要もありませんからそのままコピペして使ってください。

万が一不具合が起きてサイトの表示ができない、管理画面が開けないなどの不具合が出た時は

テーマやプラグインの充実でカスタマイズ性の高いCMSツールWordpress。でも、プラグインを新規導入したら、テーマのファイルをちょっと変更してみたらいきなり画面が真っ白になった経験ありませんか?今回はテーマのFunctions.php編集に失敗した際の対処方法を紹介します。
使っているレンタルサーバー(Wordpressのプログラムがある場所)はFTP接続可能ですか??ちょっと調べてみてください。可能であれば、FTPを使ってワードプレスの管理画面に行くのではなく、直接Wordpressのファイルを修正して復旧することができます。

などを参考に復旧してください。上記のコードだけを追加して不具合が発生した場合にはバックアップがなかったとしても、サーバーからダウンロードして上記と同じコードだけ削除し、上書きアップロードすれば不具合は改善できます。

参考にさせていただいたサイト

以下のサイトを参考にさせていただき、テストサイトで動作確認をした上で紹介していますが、使用に関しては自己責任でお願いします。

WordPress のリビジョンとは記事の変更などを履歴として残してくれる機能です。そのままにしておくとリビジョンがたくさん残ってパフォーマンスが落ちる危険性がありますので、リビジョンの最大数や無効化などを行います。リビジョン機能を停止させるコードリビジョンの機能を無効にするには以下のコードを使います。1define(...
スポンサーリンク

役に立つ情報でしたら是非拡散をお願いします

トップへ戻る