エス技研

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.

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

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

  関連記事

SI CAPTCHA Anti-Spamを使って WordPressのコメントスパム対策をする

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

ob_start、ob_get_contentsを利用しショートコード内でinclude・WordPressプラグイン開発

WordPressのプラグインやショートコードの関数作成でテンプレートをincludeする際に利用するob_start関数、ob_get_contents関数を紹介。

BackWPupでバックアップ・エラー発生の具体的対処方法事例6

BackWPupその6。エラーが起こったときの対処方法の具体例紹介です。

WordPressのサイドバー(サイドナビ)はウィジェットで編集

サイドバー(サイドナビ)を編集するウィジェットの利用方法の解説です。カテゴリ一覧、アーカイブ、リンク集などを設定する方法を解説しています。

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

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

プラグインが原因で起動しないWordPressを復旧させる方法解説

プラグインが原因で WordPressが起動できなくなった、ログインできなくなった場合の対処方法の解説です。

WordPressの一覧ページのテンプレートの種類とファイルの設定

ファイル名に従って一覧ページのテンプレートは選択される。ルールに従ってファイル名を付けることで任意のカテゴリ、タクソノミーごとのテンプレートを指定可能。

BackWPupでWordPressのDBもファイルもバックアップ

BackWPupその1。BackWPupとWordPressのバックアップについての解説。

WordPressで指定カテゴリにnoindexをプラグインなしで設定。特定の記事は外す処理も
WordPressで指定カテゴリにnoindexをプラグインなしで設定。特定の記事は外す処理も

指定したカテゴリのみnoindexをプラグインなしで設定する関数を解説。指定したカテゴリの中でも指定した記事はnoindex設定しないオプションを装備。その処理とnoindexを設定すべき理由を解説。

Custom Post Type UIでカスタムタクソノミーを設定し編集する方法解説

カスタムタクソノミーを追加、管理するプラグインCustom Post Type UIの使い方の解説。プラグインの解説ではあるものの、カスタムタクソノミーの仕様の解説でもある。