Предпросмотр кастомизатора неправильно обновляет значение get_option()

Вопрос или проблема

У меня есть настройка в 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 для хранения ваших настроек.

Кастомизатор не сохраняет ваши значения по умолчанию в базе данных, пока пользователь не нажмет кнопку сохранения.

@see https://wordpress.stackexchange.com/a/247164/52167

Ответ или решение

Проблема, с которой вы столкнулись, связана с неправильным обновлением значения опции cb2_blog_home в настраивателе темы WordPress (Customizer), что может вызывать недоразумения при использовании функции get_option() для управления отображением блога на главной странице. Давайте подробнее разберем возможные причины этой ситуации и предложим решения.

Анализ проблемы

  1. Настройки по умолчанию и сохранение:
    Настройки, добавляемые в настраивателе WordPress, не сохраняются в базе данных, пока пользователь не нажмет кнопку "Сохранить". Это объясняет, почему при установке значения cb2_blog_home в настраивателе вы не видите изменений, пока не выполните сохранение. При этом функция get_option('cb2_blog_home') будет возвращать значение по умолчанию, что может быть неправильно интерпретировано как "всегда истинно".

  2. Проверка подключения опции:
    Убедитесь, что опция cb2_blog_home действительно установлена в базу данных. Вы можете проверить это, выполнив следующий код в консоли вашей базы данных или через инструменты отладки:

    var_dump(get_option('cb2_blog_home'));

    Это позволит увидеть текущее значение опции и подтвердить, что она правильно сохраняется.

  3. Тип опции "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') не обновляется должным образом, скорее всего, связана с настройками параметров по умолчанию и отсутствием сохранения значений в базе данных. Следуя предложенным шагам, вы сможете найти и устранить проблему, обеспечив корректное отображение блога на главной странице. Не забывайте тестировать изменения, чтобы убедиться, что ваше решение работает надлежащим образом.

Оцените материал
Добавить комментарий

Капча загружается...