Проблема с сохранением меню в WordPress 3.X

Как это выглядит: новые элементы меню не сохраняются. Возникает ограничение на максимальное кол-во элементов в меню (которого быть не должно). Цифра может быть разной, но как правило эта проблема затрагивает только большие меню с количеством элементов более 40.

Проблема может возникнуть если вы используете PHP 5.3.9 или более позднюю версию.

Также возможно ее появление при использовании патча безопасности для PHP – Suhosin.

Суть проблемы.

Начиная c PHP 5.3.9 в php.ini была добавлена новая директива:

max_input_vars

Она ограничивает количество входных переменных, которое может быть обработано в одном запросе. Сделано это, разумеется, в целях повышения безопасности.

В моем случае значение по умолчанию было равно 1000. И этого было мало (интересная структура у менюшек в WordPress). Увеличил значение до 2000 – меню стало сохраняться корректно.

Если на сервере используется Suhosin, необходимо увеличить значения двух директив:

suhosin.post.max_vars и suhosin.request.max_vars

2000 должно хватить и здесь.

Вливайтесь в общение

13 комментариев

Ваш e-mail не будет опубликован. Обязательные поля помечены *

  1. Спасибо огромное!!!
    Тоже столкнулся с данной проблемой!
    Вот мое решение:
    Заходим в управление модулями на хостинге, и в настройки PHP, там будет “Максимальное количество входящих параметров в запросе”
    Этот параметр показывает, сколько входных переменных может быть принято в одном запросе. Использование этой директивы снижает вероятность сбоев в случае атак с использованием хеш-коллизий.
    Меняем вместо по умолчанию, на 3000.
    И вуаля!!!

  2. Я когда пробую в файл .htaccess добавить php_value max_input_vars 2000
    Слетает весь сайт.
    :(

    Весь код этой странички:

    suPHP_ConfigPath /home/efaberli/php.ini

    # BEGIN WordPress

    # END WordPress

    1. Не всегда можно изменить параметры php через htaccess!
      Скорее всего у вас PHP установлен в режиме CGI – поэтому и вылетает ошибка.
      Выход – поменять настройки непосредственно в php.ini
      Или пропишите прямо в wp-config.php:

      ini_set('max_input_vars', 2000);
  3. В моем случае помогло следующее: в файле .htaccess, лежащий в корне Вашего сайта, следующую строку:
    php_value max_input_vars 2000

  4. Спасибо! за хорошо изложенный и проиндексированый поисковиками ответ.

  5. Большое спасибо за наводку. Обратился в саппорт хостинга, и после увеличения вышеназванных переменных проблема исчезла.

  6. Спасибо огромное, не догадался бы насчёт ограничения php 5.3.

  7. Привет.
    Как внести это изменение?, расскажи пжл.

    1. Нужен доступ к php.ini

      Если проблема на хостинге, то лучше обратиться в суппорт.
      Если на домашнем компе, то могу растолковать…

      1. Буду признателен если растолкуете. а то я в этом деле новичок, за ранее благодарю

        1. Задание на ночь: найти php.ini. Скорее всего он в папке установки php.

          Если в ручную найти не получается, установите плагин Q2W3 PHPinfo.
          Откройте страницу PHPinfo.
          Найдите строку Loaded Configuration File (9-я сверху) – здесь указан путь к вашему php.ini. Вот там и нужно произвести изменения, описанные в статье. Как сохраните файл – перезагрузите веб-сервер.

      2. Спасибо! Все верно только доступ к php.ini необязателен можно
        в .htaccess добавить php_value max_input_vars 2000