WordPress как на ладони
wordpress jino

Замена вывода кода сайта-бара через функцию темы

Приветствую.

Есть вот такая проблема. В сайтбаре по традиции код выводится обернутый в тег li.
Какой код прописать в функции темы, чтобы тег li заменить на тег div.

В самом движке это делать не вариант, потому что при обновлении движка правка этого тега слетит.

Файл движка: widgets.php в папке wp-includes. Строка 248:

        'before_widget' => '<li id="%1$s" class="widget %2$s">',
		'after_widget' => "</li>\n",
1
Сергей 4 месяца назад
  • 1
    campusboy1847 cайт: wp-plus.ru

    Привет, Сергей.

    Первый способ. Можно зарегистрировать новый сайдбар и указать ему эти самые before_widget и after_widget. К примеру в теме Twenty Sixteen это сделано так:

        register_sidebar( array(
    		'name'          => __( 'Sidebar', 'twentysixteen' ),
    		'id'            => 'sidebar-1',
    		'description'   => __( 'Add widgets here to appear in your sidebar.', 'twentysixteen' ),
    		'before_widget' => '<section id="%1$s" class="widget %2$s">',
    		'after_widget'  => '</section>',
    		'before_title'  => '<h2 class="widget-title">',
    		'after_title'   => '</h2>',
    	) );

    В итоге вёрстка сайдбара такая:

    Второй способ. Есть хук register_sidebar, с помощью которого можно "подменить" данные из массива на свои собственные, к примеру:

    add_action( 'register_sidebar', function ( $sidebar ) {
    	global $wp_registered_sidebars;
    
    	$sidebar['before_widget'] = '<div id="%1$s" class="widget %2$s">';
    	$sidebar['after_widget']  = '</div>';
    
    	$wp_registered_sidebars[$sidebar['id']] = $sidebar;
    } );

    Вместо section, определенных в теме, я подменил на div и получилось уже вот так:

    Сергей 4 месяца назад

    Большое спасибо! А вот еще такой вопрос: если нужно зарегистрировать три сайтабара или четыре?

    campusboy 4 месяца назад

    Через register_sidebars можно сразу несколько. Это похожая функция, но вместо 1 может зарегистрировать сразу несколько панелей.

    Сергей 4 месяца назад

    Отлично! Благодарю.

    Комментировать
На вопросы могут отвечать только зарегистрированные пользователи. Регистрация. Вход.