エス技研

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


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

      2017/03/09

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.

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

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

  関連記事

Lazy LoadでWordPressの高速化!SEO効果絶大!PVもアップ!

Lazy Loadは、画像を最初にまとめて読み込むことで発生するスピードの遅延を防ぎ、必要な画像から順番に読み込むことでページの表示スピードを向上させるプラグインです。

カスタムフィールドの検索処理をget_posts()関数のmeta_queryで作成しそれを解説

カスタムフィールドを条件検索・抽出する機能開発の解説。サンプルソースをコピペすればOK。詳細解説もあるのでカスタマイズもできる!

WordPressで WPtouchを入れたら「このウェブページにはリダイレクト ループが含まれています」と表示されてページが表示されなくなった

WPtouchを入れたら「このウェブページにはリダイレクト ループが含まれています」のエラーでページが表示されない。その解決法の解説です。

WordPressの 外観のテーマのための関数の並び順

WordPressのカスタマイズの際にテーマのテンプレートを編集しますが、そのテーマファイルの並び順の解説です。

Meta ManagerでWordPressのキーワード、ディスクリプションを編集

WordPressの基本機能にないキーワード、ディスクリプションを編集するプラグインMeta Managerの解説です。

WordPress 画面が真っ白になる対応の一つ デバッグモード

WordPressで画面が真っ白になる不具合があった場合などのために用意されているデバッグモードの解説です。

Contact Form 7の使い方・引数で情報を受け渡す方法

Contact Form 7で引数の情報をフォームに編集する方法を解説します。

SyntaxHighlighterの設定、カスタマイズ方法を解説。Crayonから乗換え、高速化にも最適

SyntaxHighlighter 3の設置方法、各機能の設定方法、オプション、デフォルト設定の変更方法を解説。Crayonから乗り替えるならこれしかない。

WordPressでダブルクォートなどの文字が自動変換?原因と対処方法

ダブルクォート、シングルクォート、HTMLタグなどが自動変換関数によって入力と違う形で表示されます。原因を2つの関数ごとに説明し、対応方法を3パターン提示します。

Autoptimizeで簡単設定!HTML、JS、cssを圧縮しWordPress高速化!

Autoptimizeを使って簡単にHTML、JavaScript、CSSを圧縮しサイトの表示を高速化しよう!基本設定、拡張設定とあり柔軟な設定で多彩な環境に対応出来ます。