В теме Termosolar для WordPress можно столкнуться с ситуацией, когда изменения в настройках темы перестают сохраняться. Параметры можно изменить, интерфейс сообщает, что настройки были изменены, однако после нажатия кнопки «Сохранить изменения» новые значения пропадают.
При этом никаких явных PHP-ошибок или сообщений об ошибке сохранения может не быть. В нашем случае проблема оказалась связана с настройкой Redux Framework, встроенного непосредственно в тему Termosolar.
Как проявляется проблема
Настройки Termosolar находятся в административной части WordPress на странице:
/wp-admin/themes.php?page=termosolar_settingsПосле изменения любого параметра Redux корректно определяет наличие изменений и показывает сообщение:
Настройки были измененыОднако после нажатия кнопки «Сохранить изменения»:
- новые значения не сохраняются;
- сообщение об успешном сохранении не появляется;
- после перезагрузки страницы возвращаются предыдущие значения;
- явных JavaScript-ошибок в консоли браузера может не быть.
Первоначально проблема может выглядеть как ошибка WordPress, базы данных или даже проверки лицензии темы. Однако это можно достаточно быстро проверить.
Проверяем, где Termosolar хранит настройки
В файле:
/wp-content/themes/termosolar/admin/framework/theme-options/settings.php
можно найти параметр opt_name:
'opt_name' => 'termosolar_settings',
Это означает, что настройки темы обслуживаются Redux Framework и сохраняются в WordPress под именем termosolar_settings.
Проверяем форму Redux
Откроем страницу настроек темы, затем инструменты разработчика браузера и выполним в консоли:
jQuery('#redux-form-wrapper').lengthЕсли получаем:
1форма Redux присутствует на странице.
Проверим её адрес и метод отправки:
jQuery('#redux-form-wrapper').attr('action')и:
jQuery('#redux-form-wrapper').attr('method')В нашем случае результат был следующим:
./options.php
post
То есть сама форма настроена на стандартное сохранение параметров WordPress через options.php.
Проверяем сохранение без JavaScript-обработчика Termosolar
Следующий тест позволяет понять, исправно ли само сохранение настроек на стороне WordPress.
Изменяем какой-либо параметр темы, но кнопку «Сохранить изменения» не нажимаем. Вместо этого выполняем в консоли браузера:
document.getElementById('redux-form-wrapper').submit();Эта команда отправляет форму непосредственно, минуя JavaScript-обработчик кнопки Redux.
В нашем случае после выполнения команды страница перезагрузилась, появилось сообщение об успешном сохранении, а изменённые параметры действительно сохранились.
Это важный результат диагностики: WordPress, база данных, форма Redux и обработка настроек на сервере работают исправно. Следовательно, проблему нужно искать в JavaScript-механизме сохранения Redux.
В подобных случаях важно отделить проблему самой CMS от ошибки конкретной темы или встроенного в неё фреймворка. Если обычная отправка формы через options.php работает, а штатная кнопка темы — нет, это заметно сужает область поиска: проверять нужно JavaScript и конфигурацию Redux, а не базу данных WordPress. Такой подход позволяет при доработке WordPress исправить конкретный механизм сохранения, не затрагивая остальные настройки сайта.
Проверяем AJAX-сохранение Redux
Текущее состояние AJAX-сохранения можно проверить непосредственно в консоли:
redux.optName.args.ajax_saveВ проблемной конфигурации команда возвращала:
falseПри этом функция AJAX-сохранения Redux присутствовала. Это можно проверить командой:
typeof jQuery.redux.ajax_saveРезультат:
"function"Для дополнительной проверки можно временно включить AJAX-сохранение непосредственно в браузере:
redux.optName.args.ajax_save = true;После этого изменяем любую настройку и нажимаем обычную кнопку «Сохранить изменения».
Если настройки успешно сохраняются, причина найдена: проблема связана с отключённым режимом AJAX Save в конфигурации Redux, используемой темой Termosolar.
Как исправить сохранение настроек Termosolar
Открываем файл:
/wp-content/themes/termosolar/admin/framework/theme-options/settings.phpНаходим параметр:
'ajax_save' => false,и меняем его на:
'ajax_save' => true,Сохраняем файл и заново открываем страницу настроек Termosolar.
Для проверки можно снова выполнить:
redux.optName.args.ajax_saveТеперь должно возвращаться:
trueПосле внесения этой правки стандартная кнопка «Сохранить изменения» начинает работать: Redux отправляет данные через AJAX, настройки сохраняются и появляется соответствующее уведомление.
Почему настройки не сохранялись
Termosolar использует собственную встроенную версию Redux Framework. В рассматриваемой конфигурации параметр ajax_save был установлен в false.
При этом JavaScript-обработчик кнопки сохранения Redux в данном режиме не приводил к нормальной отправке формы. В результате пользователь нажимал кнопку сохранения, но изменённые параметры фактически не записывались.
То, что проблема находится именно в этом механизме, подтверждается двумя тестами:
- прямая отправка
redux-form-wrapperчерезsubmit()успешно сохраняет параметры; - временное переключение
redux.optName.args.ajax_saveвtrueтакже восстанавливает штатное сохранение через кнопку.
Важно учитывать обновления темы
Изменение выполняется непосредственно в файле родительской темы Termosolar:
admin/framework/theme-options/settings.php
Поэтому после обновления темы эта правка может быть перезаписана. Если Termosolar будет обновляться, стоит проверить значение ajax_save после установки новой версии и убедиться, что настройки темы по-прежнему сохраняются.
Если в Termosolar изменяются параметры Theme Options, появляется сообщение «Настройки были изменены», но кнопка сохранения не записывает новые значения, проблема может быть связана с настройкой AJAX-сохранения встроенного Redux Framework.
Рабочее решение в рассмотренном случае:
'ajax_save' => true,в файле:
/wp-content/themes/termosolar/admin/framework/theme-options/settings.php
Перед изменением файла рекомендуется сделать его резервную копию. Если прямая отправка формы через document.getElementById('redux-form-wrapper').submit() успешно сохраняет параметры, а включение ajax_save восстанавливает работу штатной кнопки, такая диагностика достаточно точно указывает на проблему в механизме сохранения Redux.



