エス技研

WordPress、CakePHP、PHP、baserCMSなどの Web系システムを中心に情報を提供します!


Advanced Custom Fieldsのカスタムフィールドの登録上限が max_input_varsに影響する問題の対処方法

      2016/06/21

Advanced Custom Fieldsのカスタムフィールドには登録の上限がある問題

 

PHPの設定である max_input_varsが影響し上限が発生

 
Advanced Custom Fieldsのカスタムフィールドの登録項目数には上限があります。
 
登録したはずの項目が登録されず、「あれ?この項目、追加したはずなのに??」という不具合につながります。
 
この不具合は、Advanced custom Fieldsのプログラムの処理上の問題、上限ということではなく、各サーバの PHPの設定(制限)の上限に達するためにそれ以上項目が登録できなくなるという不具合です。
 
より具体的には、php.ini の max_input_vars という項目の設定に影響されるものです。
 
この「max_input_vars」は、入力変数として受け取る数の上限を指定するもので、PHPのデフォルト設定は 1,000となっています。
 
そのため、1,000個を超える入力変数があった場合は、Warningを発生させて、1,000を超える変数は削除されて処理されます。
このため、Advanced custom Fieldsのカスタムフィールドとして入力された変数が 1,000を超えると、その部分は削除され、入力はなかったものとして処理されますので、最初に書いた「追加したはずなのに追加されていない」という不具合が発生することになります。
 
これは、Dos攻撃を防ぐ目的で PHP 5.3.9から追加された項目で、設定された項目数以上の変数が送られてきてもそれを無視するため、Dos攻撃によるサーバの負荷を軽減することができるようになっています。
 
 
そのため、Advanced custom Fieldsで、項目を登録する際にこの入力変数の数の上限に達すると、それ以上の項目を登録することができなくなります。
 
また、PHPの初期設定の変数数 1,000の場合で Advanced custom Fieldsの登録できるカスタムフィールドの項目数の上限がいくつなのかは、設定するフィールドの条件に寄ります。
 
カスタムフィールドには種類がいろいろあり、オプション設定が多いフィールドを多く選んでいる場合は、設定できるフィールド数が少なくなります。
すごくざっくりとした感じでは 60項目から 80項目くらいの間で上限になります。
 
 
ちなみに、「月極駐車場検索エース」では、住所の情報として都道府県、市区町村のリストを持っているのですが、こういうリストを持つと、これだけで 1,000の上限に迫ってしまうのです。
 
 

Advanced custom Fieldsの登録項目の上限の対応方法

 
Advanced custom Fieldsの登録項目の上限がある問題に対する対処方法といては、下記の 2つがあります。
 

  • php.ini の max_input_vars の設定を変更
  • フィールドグループを分割

 
 

php.ini の max_input_vars の設定を変更

 
1つは、PHPの設定である max_input_vars の上限数を増やすという方法です。
この方法を対処方法として書いてあるブログもありますが、max_input_vars の上限数を増やすという方法はおススメしません。
 
先に解説しましたが、そもそもこの max_input_varsの設定があるのは、Dos攻撃があった場合の負荷軽減のためのものですので、万一の事態を考えると、max_input_varsの設定を増やす変更は避けるべきです。
 
 

フィールドグループを分割

 
必要な max_input_varsの制限を変更せずに対応する方法としては、私は「フィールドグループを分割する方法」をお勧めします。
 
方法は簡単で、1つのフィールドグループに入りきらないフィールドを分割し、それを組み合わせるだけです。
 
 
たとえば、先にも説明した「月極駐車場検索エース」では、住所関連の項目だけで max_input_varsの上限に達してしまいます。
 
そのため、フィールドグループを
 ・駐車場情報/基本項目
 ・駐車場情報/住所項目
 ・駐車場情報/詳細項目
といったように分割します。
 
 
そして、
「基本項目」では、駐車場の管理番号、名称などの項目を
「住所項目」では、都道府県、市区町村、住所、地図情報などの項目を
「詳細項目」では、駐車場の賃料、契約条件、メッセージなどの項目を
というように項目を分割して設定します。
 
個別に設定したフィールドグループは、Advanced Custom Fields管理画面の全項目完全解説・カスタムフィールド決定版!/オプション設定で解説していますが、フィールドグループの並び順を設定する「順序番号」を利用して想定通りの順番に並べることで、多くのカスタムフィールドを必要とする画面であっても希望通りの入力設定を行うことができるようになります。
 
この方法では、Dos攻撃に対するリスクを増大することなく対処することができますね。
 
 

フィールドグループを分割するメリット

 
この方法を利用することで、さらなるメリットがありました。
 
たとえば、先ほど説明した「月極駐車場検索エース」では、駐車場の情報と、管理会社の情報と、いずれの登録情報にも都道府県・市区町村の入力項目があります。
 
普通にカスタムフィールドを設定する場合は、それぞれに同じ都道府県・市区町村を設定する必要があるのですが、このようにフィールドグループを分割する方法を利用することで、簡単に複製することができ、カスタム投稿や、ほかのサイトでも便利に流用することができるようになるのです。
 
会員登録用に、氏名や住所、電話番号といったよく使う項目をあらかじめグループとして作っておく、といった使い方ですね。
 
 
フィールドグループを複製する方法については「Advanced custom Fieldsのフィールドグループを簡単に複製する方法」を参考にしてください。
簡単に複製できますので、項目を分割する方法のメリットをより感じてもらえるでしょう。
 
 

Advanced Custom Fieldsの関連記事

 
Advanced Custom Fields管理画面の全項目完全解説・カスタムフィールド決定版!
Advanced Custom Fieldsの全項目解説・公開側表示編集編
WordPressのカテゴリやタクソノミーにカスタムフィールド項目を追加する方法
Advanced Custom Fieldsの関数の全部の使い方を調べてみた
Advanced Custom Fields(ACF)のアドオン・ギャラリーの使い方解説
Advanced Custom Fields(ACF)のアドオン・繰り返しフィールドの使い方解説
WordPressのカスタムフィールド、カスタム投稿、カスタムタクソノミーとは?
Advanced Custom Fieldsのカスタムフィールドの登録上限が max_input_varsに影響する問題の対処方法
Advanced custom Fieldsのフィールドグループを簡単に複製する方法
Advanced custom Fieldsの条件判定活用方法・フィールドグループ複製より便利

 - WordPress

GoogleAdwords

GoogleAdwords

最後までお読みいただきましてありがとうございます。
この記事が参考になったと思いましたらソーシャルメディアで共有していただけると嬉しいです!

Message

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

下記の空欄を埋めてください。 * Time limit is exhausted. Please reload CAPTCHA.

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

※入力いただいたコメントは管理者の承認後に掲載されます。

  関連記事

WordPressの Google XML Sitemapsで WebMaster Tools用の sitemap.xmlを生成

WordPressの Google XML Sitemapsで WebMaster Tools用の sitemap.xmlを生成する方法を説明しています。

WordPressのおすすめプラグイン記事のまとめ一覧

WordPressプラグインのまとめ。WordPressのプラグイン紹介記事も多くなってきたため紹介コメント付のプラグインまとめ記事を作成しました。

EWWW Image Optimizerで画像の圧縮でWordPressを高速化

ページ表示の高速化に使うEWWW Image Optimizerの紹介です。英語で書かれているために取っつきにくいですが設定は3カ所。画像の圧縮もワンクリック。超簡単!

Rating-Widgetは超簡単設定のWordPress口コミサイト構築プラグイン

口コミの評価点を投稿する機能に特化したプラグインで、多様なイメージの投稿方法や一覧ページ、コメントなどにも投稿機能を追加することができます。

Export to Textで WordPressを csv出力

WordPressのデータを csv出力する Export to Textの使い方を解説しています。

WordPressのウィジェットでショートコードを使う方法add_filter

WordPressのウィジェットでショートコードを利用するには add_filter、do_shortcodeの関数を利用する必要があります。

Captchaを使って WordPressのコメントスパム対策をする

コメントスパム対策として入力させない対策の一つとしてCAPTCHAという方法がありそれを簡単に実装できるプラグインCaptchaの解説です。

WordPressのテーマ管理方法とテーマのHTML編集のポイント解説

テーマ変更で無限の可能性!テーマの選び方と設定方法、デザイン修正のためのHTML修正のポイントを解説。

XAMPPのWordPressの更新でFatal error: Maximum execution time of 30 seconds exceededのエラーが発生して失敗する場合の対処方法

XAMPP環境のWordPressアップデート時に「Maximum execution time of 30 seconds exceeded」のエラーが出る。「max_execution_time」を変更して解決する方法の解説。

WordPress csvインポート、エクスポートのプラグイン

WordPressから csvファイルをエクスポート、インポートする方法を紹介しています。