Как в сайдбар wordpress добавить произвольное поле?

Ссылка скопирована
1 ответ

Добрый день!
Есть зарегистрированный сайдбар.

<?php function habr_template_register_wp_sidebar() {   	register_sidebar( 		array( 			'id' => 'habr', 			'name' => 'Пример сайдбара',  			'description' => 'Описание сайдбара',  			'before_widget' => '<div id="%1$s" class="side widget %2$s">',  			'after_widget' => '</div>', 			'before_title' => '<h3 class="widget-title">',  			'after_title' => '</h3>' 		) 	);    add_action( 'widgets_init', 'habr_template_register_wp_sidebar' );

<?php function habr_template_register_wp_sidebar() { register_sidebar( array( 'id' => 'habr', 'name' => 'Пример сайдбара', 'description' => 'Описание сайдбара', 'before_widget' => '<div id="%1$s" class="side widget %2$s">', 'after_widget' => '</div>', 'before_title' => '<h3 class="widget-title">', 'after_title' => '</h3>' ) ); add_action( 'widgets_init', 'habr_template_register_wp_sidebar' );

Страница виджетов в админке отображается в классическом режиме. Скажите, пожалуйста как в этот сайдбар добавить произвольное поле значение которого будет использоваться, например, для задания цвета фона сайдбара?

Как в сайдбар wordpress добавить произвольное поле?

Дополнительно:

Доброго времени суток. Вам не в сайдбар необходимо поле добавить, а создать виджет

например

if(!class_exists('My_Welcome_Msg_Widget')){ 	class My_Welcome_Msg_Widget extends WP_Widget{ 	///гуглиться легко и инфы полно }} add_action('widgets_init','my_welcome_msg_widget'); function my_welcome_msg_widget(){ 	register_widget('My_Welcome_Msg_Widget'); }

if(!class_exists('My_Welcome_Msg_Widget')){ class My_Welcome_Msg_Widget extends WP_Widget{ ///гуглиться легко и инфы полно }} add_action('widgets_init','my_welcome_msg_widget'); function my_welcome_msg_widget(){ register_widget('My_Welcome_Msg_Widget'); }

например, для задания цвета фона сайдбара

для этого лучше, например, кастомайзер использовать

  • А если вам нужно настраиваемый внешний вид отдельных частей сайта то обычно это выносят в Кастомайзер.
  • Михаил Лисецкий, благодарю. Все верно. Назначение поля в условии просто для примера и наглядности.

    Если возможно, интересует именно такой функционал: добавить поле в контейнер сайдбара с возможностью сохранения значения и возможностью получить значение в месте вывода в шаблоне

  • Владимир Брумер, спасибо, если решения не найду, вероятно так и сделаю
  • как в этот сайдбар добавить произвольное поле значение которого будет использоваться, например, для задания цвета фона сайдбара?

    Никак. Сайтбары предназначены для вывода на фронте, а не настроек дизайна.
    Судя по всем тебе нужен метабокс и изучить опции настройки.

    • Спасибо, Refguser, это я для наглядности указал, что для смены фона.
      Но, тем не менее, интересует именно такая возможность добавить поле в контейнер сайдбара с возможностью сохранения значения из админки, со страницы редактирования виджетов и возможностью получить в месте вывода в шаблоне, если она есть, конечно
    • junior_www, ещё раз: сайдбары - для фронта. Для админки - метабоксы.
    Нужно решить такую задачу?

    Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

    Заказать помощь
    Лучший ответ
    1
    Алексей Денисов Ответ

    В сам зарегистрированный sidebar произвольное поле добавить нельзя в том смысле, как это делается у поста через ACF. Sidebar — это область для виджетов, а не объект с метаданными. Поэтому цвет фона лучше задавать одним из трёх способов: через CSS-класс сайдбара, через настройки темы или через кастомный виджет/блок.

    Если цвет нужен фиксированный для этого сайдбара, добавьте класс в before_widget или обёртку сайдбара и задайте CSS:

    register_sidebar([
        'id'            => 'habr',
        'name'          => 'Пример сайдбара',
        'before_widget' => '<div id="%1$s" class="side widget %2$s">',
        'after_widget'  => '</div>',
    ]);

    register_sidebar([ 'id' => 'habr', 'name' => 'Пример сайдбара', 'before_widget' => '<div id="%1$s" class="side widget %2$s">', 'after_widget' => '</div>', ]);

    .sidebar-habr {
      background: #f5f7fb;
    }

    .sidebar-habr { background: #f5f7fb; }

    Если цвет должен редактироваться из админки, можно добавить настройку в Customizer:

    add_action('customize_register', function ($wp_customize) {
        $wp_customize->add_setting('habr_sidebar_bg', [
            'default' => '#f5f7fb',
        ]);
     
        $wp_customize->add_control(new WP_Customize_Color_Control($wp_customize, 'habr_sidebar_bg', [
            'label'   => 'Фон сайдбара',
            'section' => 'colors',
        ]));
    });

    add_action('customize_register', function ($wp_customize) { $wp_customize->add_setting('habr_sidebar_bg', [ 'default' => '#f5f7fb', ]); $wp_customize->add_control(new WP_Customize_Color_Control($wp_customize, 'habr_sidebar_bg', [ 'label' => 'Фон сайдбара', 'section' => 'colors', ])); });

    А на фронте вывести CSS через wp_head:

    add_action('wp_head', function () {
        $color = get_theme_mod('habr_sidebar_bg', '#f5f7fb');
        echo '<style>.sidebar-habr{background:' . esc_attr($color) . ';}</style>';
    });

    add_action('wp_head', function () { $color = get_theme_mod('habr_sidebar_bg', '#f5f7fb'); echo '<style>.sidebar-habr{background:' . esc_attr($color) . ';}</style>'; });

    Если фон должен настраиваться для каждого виджета отдельно, тогда нужен кастомный виджет с полем цвета или блоковый редактор виджетов. Для обычного сайдбара поле «цвет фона» логичнее хранить в настройках темы, а не пытаться прикрутить meta к sidebar.

    Есть ещё вариант через ACF Options Page, если сайдбар относится к конкретному разделу сайта. Например, можно сделать поле sidebar_background на странице настроек темы и использовать его при выводе сайдбара. Это удобно, когда дизайнеру нужно менять не только фон, но и заголовок, баннер, кнопку или текст в боковой колонке. Для одного цвета Customizer проще, для набора настроек — options page удобнее.

    Другие ответы (0)

    Пока нет других ответов. Будьте первым, кто поможет автору.

    Ответить на вопрос

    комментарий

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

    Вам также может быть интересно