2015年4月16日木曜日

カスタムメニューを追加すると別のメニューが消えていく現象への対策

※ wp-config.phpに init_set関数で設定する方法はうまくいかないので削除し、かわりに httpd.confの方法を追加(2015年6月26日)

WordPressの外観のメニューを増やしていくと、ある時件名の現象がおこります。
その場合、PHPの制限によって生じている可能性があります。

カスタムメニュー関連プラグインを使っていたので、それを眺めること5分。
プラグインじゃないなぁと思って、PHP周りで何かないかネットで調べること5分、それっぽい情報を発見。プラグインのPHPファイルが2つしかなくてコード行数も大したことがなかったのも幸いしました。

WordPressのカスタムメニューが82個以上登録できねーおらおらーって時の対処方法

うーん、なにやら見たことのあるヘッダー画像で、タイトルの癖も例の人に似てるよなぁと思ったら、WordPressプラグイン開発のバイブル執筆者の一人、@miya0001さんのページじゃないですか!前はサイドメニューがあったような気がしたのですが、、、また今度お会いしたらお礼いっておこう(なにもプレゼントしませんけど...)。

ともあれ、ここに書かれた通りの問題でした。感謝!

対処方法

PHPのmax_input_varsの値を増やす(要PHP 5.3.9以降)対処方法になり、下記の3通りあります。この値を増やせば増やすほどDoS攻撃などによる負荷が増えるのため、限定的な範囲に留まる「1」や「2」がオススメです。

このmax_input_varsの設定は


をチェックすると「PHP_INI_PERDIR」に当たります。
その場合には

に記載があるとおり、Apacheの場合には、.htaccess, httpd.conf, php.iniあたりのいずれかに設定する必要があるとのことです。


1. WordPressを導入した直下の「.htaccess」への記載


※設定は、設置したディレクトリ(フォルダ)以下のみで適応されます。

php_value  max_input_vars 2000

どの値が適切かは、先の@miya0001さんの記事を参照してみてください。
デフォルトの1000で、カスタムメニューは82、2000にしたら165とのことです。階層構造するとさらに少なくなるらしいので、足りなくなったら500か1000ぐらい増やしていけばよいと思います。

必要条件

Apacheの場合には、AllowOverride のOptions設定が必要


2. ウェブシステムの設定(httpd.conf)に記載


※ウェブシステム管理者しか設定できません。
※設定は、設置したディレクトリ(フォルダ)以下のみで適応することが出来ます。

<IfModule mod_php5.c>
  php_value max_input_vars 2000
</IfModule>

を追加。PHPが動作しているかどうかチェックしてます。
これを<Directory>配下など、必要なところに設定するっていうイメージですね。

3. php.iniへの記載



※ウェブシステム管理者しか設定できません。

max_input_vars=2000

max_input_varsの項目があれば、これを書き換え。なければ追加。

※PHPを利用するプログラム全体に影響を及ぼすので注意です。

2015年4月16日 @kimipooh



0 件のコメント:

コメントを投稿