Вопрос или проблема
Окей, вот сценарий:
Я добавил пользовательский раздел в существующую тему, чтобы он отображался на странице настройки темы (customize.php).
Проблема, с которой я сталкиваюсь, заключается в том, что я не знаю, как уведомить WordPress, когда в моем пользовательском контроле вносятся изменения. Думаю, я пропустил что-то в своем коде, потому что это должно происходить автоматически.
Вот пример кода:
$wp_customize->add_section('my_section',
array(
'title' => 'Мой заголовок',
'description' => 'Мое описание',
'priority' => 201
)
);
$wp_customize->add_setting(
'my_setting',
array(
'default' => '',
'type' => 'option',
'transport' => 'postMessage'
)
);
$wp_customize->add_control(
new My_Control(
$wp_customize,
'my_control',
array(
'label' => 'Моя метка',
'settings' => 'my_setting',
'section' => 'my_section'
)
)
);
Обратите внимание, что My_Control
— это класс, который подключает дополнительные js/css файлы и отображает мой сортируемый список.
Я храню свою модель в массиве, а не используя несколько настроек; я добавляю свою модель на страницу с помощью функции wp_localize_script
.
Обновление в реальном времени достигается с помощью JavaScript. Работает ли ваш .js код? Кодекс имеет отличные примеры, и я думаю, что у Отто есть пост об этом где-то в Google.
https://codex.wordpress.org/Theme_Customization_API
Подождите, зачем использовать transport => postMessage
? Это для обработки общения между контролем и JS-скриптом.
Вам следует использовать transport => refresh
, таким образом WordPress будет обновляться при изменении ввода.
Ответ или решение
Если кнопка "Сохранить" на странице настройки темы WordPress остается неактивной, это может быть связано с несколькими аспектами, касающимися вашей реализации. Вы упомянули, что добавили кастомный раздел к существующей теме и хотите, чтобы WordPress знал о внесенных изменениях. Рассмотрим основные шаги и решения данной проблемы.
1. Проверьте настройку транспорта
В вашем коде при добавлении настройки вы указали транспортировку как postMessage
. Это подходит для реализации синхронного обновления значений с помощью JavaScript. Однако, если вы хотите, чтобы кнопка "Сохранить" активировалась при изменении значений, рекомендуется использовать transport => 'refresh'
. Это заставит WordPress обновлять результат на странице, а также активировать кнопку сохранения.
Пример изменения кода:
$wp_customize->add_setting(
'my_setting',
array(
'default' => '',
'type' => 'option',
'transport' => 'refresh' // Измените 'postMessage' на 'refresh'
)
);
2. Реализация JavaScript
Если вы хотите продолжить использовать postMessage
для реализации динамического обновления в режиме реального времени, убедитесь, что ваш JavaScript-файл корректно подключен и выполняется.
Пример подключения JavaScript с использованием wp_enqueue_script
:
function my_customize_scripts($wp_customize) {
wp_enqueue_script('my-custom-js', get_template_directory_uri() . '/js/my-custom.js', array('jquery', 'customize-preview'), null, true);
}
add_action('customize_preview_init', 'my_customize_scripts');
В вашем JavaScript коде должно быть обработано событие изменения значения, например:
wp.customize('my_setting', function(value) {
value.bind(function(newval) {
// Здесь вы можете обновить интерфейс с новым значением
});
});
3. Проверка доступности данных
Так как вы храните данные в массиве и используете wp_localize_script
, убедитесь, что данные корректно передаются в JavaScript. Например, при добавлении вашего массива:
$data = array('my_array' => $my_array);
wp_localize_script('my-custom-js', 'myData', $data);
Ваша JS может обращаться к этим данным, поэтому проверьте правильность путей и названий переменных.
4. Отладка
Если кнопка "Сохранить" все еще остается неактивной, начать стоит с отладки. Поиск ошибок в консоли браузера может дать понимание, если что-то идет не так. Также проверьте, правильно ли данный контроль подключен и используется ли функция wp_customize->get_setting('my_setting')->set_value()
для обновления значения.
Заключение
Для активизации кнопки "Сохранить" на странице настройки темы WordPress, необходимо обратить внимание на транспортировку установки, корректно настроить JavaScript для обработки событий, а также убедиться, что данные передаются правильно. Убедившись в этих аспектах, вы сможете улучшить функциональность и пользовательский опыт в настройке темы.