Вопрос или проблема
У меня есть настройка в index.php
if(get_option('cb2_blog_home')){
cb_get_blog_links();
}
Этот код позволяет включать и выключать индекс блога на главной странице. Функция cb_get_blog_links() выводит список аннотаций блогов.
И в кастомизаторе у меня есть флажок, который позволяет установить это значение cb2_blog_home. Однако он никак не влияет на результат. Кажется, что опция всегда истинна.
Есть ли идеи, почему?
Внутри этой функции есть несколько переменных, которые я также устанавливаю с помощью кастомизатора. Все они работают идеально.
Вот полный код кастомизатора. Все работает идеально, кроме параметра блога на главной странице. Единственная мысль, которая приходит в голову, это то, что одна из них — это функция, а остальные — переменные внутри функции.
function cb_customize_register($wp_customize){
$wp_customize->add_section('cb_customizer_blog', array(
'title' => __('Настройки блога темы', 'Theme'),
'priority' => 120,
));
//Показать и скрыть ссылки блога на главной
$wp_customize->add_setting('cb2_blog_home', array(
'default' => '',
'capability' => 'edit_theme_options',
'type' => 'option',
));
$wp_customize->add_control('cb2_blog_home', array(
'label' => __('Включить блог на главной', 'Theme'),
'section' => 'cb_customizer_blog',
'settings' => 'cb2_blog_home',
'type' => 'checkbox',
'priority' => 125,
));
//Количество записей блога на главной
$wp_customize->add_setting('cb2_blog_home_count', array(
'default' => '3',
'capability' => 'edit_theme_options',
'type' => 'option',
));
$wp_customize->add_control('cb2_blog_home_count', array(
'label' => __('Количество записей блога на главной', 'Theme'),
'section' => 'cb_customizer_blog',
'settings' => 'cb2_blog_home_count',
'priority' => 130,
));
//Показать и скрыть заголовок блога на главной
$wp_customize->add_setting('cb2_blog_home_title_hide', array(
'default' => '',
'capability' => 'edit_theme_options',
'type' => 'option',
));
$wp_customize->add_control('cb2_blog_home_title_hide', array(
'label' => __('Скрыть заголовок блога на главной', 'Theme'),
'section' => 'cb_customizer_blog',
'settings' => 'cb2_blog_home_title_hide',
'type' => 'checkbox',
'priority' => 135,
));
//Показать и скрыть подпись автора блога на главной
$wp_customize->add_setting('cb2_blog_index_author', array(
'default' => '',
'capability' => 'edit_theme_options',
'type' => 'option',
));
$wp_customize->add_control('cb2_blog_index_author', array(
'label' => __('Скрыть подпись автора блога', 'Theme'),
'section' => 'cb_customizer_blog',
'settings' => 'cb2_blog_index_author',
'type' => 'checkbox',
'priority' => 140,
));
//Показать и скрыть дату блога на главной
$wp_customize->add_setting('cb2_blog_index_date', array(
'default' => '',
'capability' => 'edit_theme_options',
'type' => 'option',
));
$wp_customize->add_control('cb2_blog_index_date', array(
'label' => __('Скрыть дату блога', 'Theme'),
'section' => 'cb_customizer_blog',
'settings' => 'cb2_blog_index_date',
'type' => 'checkbox',
'priority' => 145,
));
}
add_action('customize_register', 'cb_customize_register');
Вы используете тип option для хранения ваших настроек.
Кастомизатор не сохраняет ваши значения по умолчанию в базе данных, пока пользователь не нажмет кнопку сохранения.
Ответ или решение
Проблема, с которой вы столкнулись, связана с неправильным обновлением значения опции cb2_blog_home
в настраивателе темы WordPress (Customizer), что может вызывать недоразумения при использовании функции get_option()
для управления отображением блога на главной странице. Давайте подробнее разберем возможные причины этой ситуации и предложим решения.
Анализ проблемы
-
Настройки по умолчанию и сохранение:
Настройки, добавляемые в настраивателе WordPress, не сохраняются в базе данных, пока пользователь не нажмет кнопку "Сохранить". Это объясняет, почему при установке значенияcb2_blog_home
в настраивателе вы не видите изменений, пока не выполните сохранение. При этом функцияget_option('cb2_blog_home')
будет возвращать значение по умолчанию, что может быть неправильно интерпретировано как "всегда истинно". -
Проверка подключения опции:
Убедитесь, что опцияcb2_blog_home
действительно установлена в базу данных. Вы можете проверить это, выполнив следующий код в консоли вашей базы данных или через инструменты отладки:var_dump(get_option('cb2_blog_home'));
Это позволит увидеть текущее значение опции и подтвердить, что она правильно сохраняется.
-
Тип опции "option":
Ваша установкаadd_setting
корректна, однако важно правильно указать значение по умолчанию. Например, если ваш флажок (checkbox) не установлен,get_option()
может возвращать пустое значение. Возможно, имеет смысл задать значение по умолчанию в видеfalse
или0
, чтобы было легче управлять логикой программы.
Предлагаемые решения
-
Убедитесь, что настройки сохраняются:
Добавьте в код обработчик дляcustomize_save_after
, чтобы проверить, сохраняются ли опции, и отладить возможные проблемы с сохранением. Например:add_action('customize_save_after', function($wp_customize) { error_log('Сохранение настроек выполнено'); });
-
Установите значение по умолчанию:
Перепроверьте значения по умолчанию для опцииcb2_blog_home
. Лучше всего использовать логическое значение (boolean).$wp_customize->add_setting('cb2_blog_home', array( 'default' => false, 'capability' => 'edit_theme_options', 'type' => 'option', ));
-
Проверка через Ajax:
Иногда настройки настраивателя могут не обновляться из-за кэша. Проверьте, как вы взаимодействуете с настраивателем. Попробуйте обновить страницу после внесения изменений и перед тем, как нажать "Сохранить". -
Реализация обратной связи для пользователя:
Вы можете добавить уведомления для пользователя, чтобы он знал, когда изменения были приняты или сохранены. Это улучшит взаимодействие и поможет в отладке.
Заключение
Проблема с тем, что get_option('cb2_blog_home')
не обновляется должным образом, скорее всего, связана с настройками параметров по умолчанию и отсутствием сохранения значений в базе данных. Следуя предложенным шагам, вы сможете найти и устранить проблему, обеспечив корректное отображение блога на главной странице. Не забывайте тестировать изменения, чтобы убедиться, что ваше решение работает надлежащим образом.