Лучший способ создания нескольких сайдбаров

1 июл. 2016 г., 09:17:10
Просмотры: 19.1K
Голосов: 6

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

Вот как я добавляю несколько сайдбаров

Если мне нужно создать один сайдбар, я использую файл sidebar.php. НО если мне нужен еще один сайдбар, я создаю еще один php-файл, например sidebar-new.php. Затем вызываю его так:

<?php 
      get_sidebar('new'); 
 ?>

То есть, если мне нужно 4 сайдбара, я должен создать 4 php-файла!

НО я видел много тем (на WordPress маркете), которые предоставляют множество сайдбаров, но содержат только один файл sidebar.php! Как они это делают? Я учился создавать сайдбары через Google, но в результатах поиска нахожу только тот способ, который использую сейчас (создавать отдельные файлы для каждого сайдбара).

Так как же можно создать несколько сайдбаров без создания множества php-файлов!!???

1
Комментарии

Я бы предложил создать класс для сайдбара в ООП стиле, а затем вызывать этот класс вместо get_sidebar. Таким образом, вы сможете передавать в класс различные значения по мере необходимости. Я не вижу других решений, которые не привели бы к сильному усложнению кода.

Pieter Goosen Pieter Goosen
1 июл. 2016 г. 10:15:19
Все ответы на вопрос 3
13

Определение новой боковой панели в вашем файле functions.php

<?php

if ( function_exists('register_sidebar') ) {

   register_sidebar(array(
   'before_widget' => '<li id="%1$s" class="widget %2$s">',
   'after_widget' => '</li>',
   'before_title' => '<h2 class="widgettitle">',
   'after_title' => '</h2>'
   ));

}?>

После определения этих функций вы заметите появление дополнительной боковой панели в WordPress Dashboard в разделе Внешний вид > Виджеты. Здесь вы можете перетаскивать все ваши виджеты в различные боковые панели.

<?php

if ( function_exists('register_sidebar') ) {

   register_sidebar(array(
   'name' => 'Боковая панель 1',
   'before_widget' => '<div id="%1$s" class="widget %2$s">',
   'after_widget' => '</div>',
   'before_title' => '<h2>',
   'after_title' => '</h2>'
    ));

   register_sidebar(array(
   'name' => 'Футер боковая панель 1',
   'before_widget' => '<div id="%1$s" class="widget %2$s">',
   'after_widget' => '</div>',
   'before_title' => '<h2>',
   'after_title' => '</h2>'
   ));

}?>

Добавление новой боковой панели в ваш шаблон

В файле sidebar.php измените вызов вашей существующей боковой панели, включив имя, которое вы определили ранее в файле functions.php.

<?php if ( !function_exists('dynamic_sidebar') || !dynamic_sidebar('Боковая панель 1') ) : ?>

   <h2>Статьи по месяцам</h2>
   <ul>
      <?php wp_get_archives('title_li=&type=monthly'); ?>
   </ul>
   <h2>Рубрики</h2>
   <ul>
      <?php wp_list_categories('show_count=0&title_li='); ?>
   </ul>

<?php endif; ?>

Чтобы добавить новую боковую панель, вы можете либо скопировать код выше, либо просто скопировать следующие строки. Добавьте эти строки туда, где вы хотите разместить новые виджеты. В этом примере из названия видно, что я размещаю свою в подвале сайта. Как и раньше, не забудьте указать правильное имя боковой панели. В коде выше HTML-код между PHP-операторами будет отображаться, когда в боковую панель не добавлены виджеты. Этот «стандартный» код, очевидно, можно изменить в соответствии с вашей темой. В следующем коде, поскольку нет дополнительного HTML-кода, ничего не будет отображаться, если виджет не добавлен в боковую панель в WordPress Dashboard.

<?php if ( !function_exists('dynamic_sidebar') || !dynamic_sidebar('Футер боковая панель 1') ) : ?>
<?php endif; ?>
1 июл. 2016 г. 11:43:55
Комментарии

Ок, я немного запутался! Во-первых, почему ты не использовал id при регистрации сайдбара? И как мне вызвать сайдбар на главной странице? Вот так get_sidebar();?

Rishabh Rishabh
1 июл. 2016 г. 12:59:10

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

Owais Alam Owais Alam
1 июл. 2016 г. 13:02:00

Но почему я не вижу только что зарегистрированный сайдбар в разделе Внешний вид -> Виджеты?

Rishabh Rishabh
1 июл. 2016 г. 13:07:05

Вы применили указанный выше код? Существует несколько способов добавить сайдбар в файлы вашей темы.

Owais Alam Owais Alam
1 июл. 2016 г. 13:10:15

Первый код я написал в functions.php, второй код я ввел в functions.php (а затем также в home.php), а последний код я ввел в sidebar.php. Что еще мне нужно сделать и где?

Rishabh Rishabh
1 июл. 2016 г. 13:16:54

Итак, какой ответ вы получаете в админ-панели?

Owais Alam Owais Alam
1 июл. 2016 г. 13:19:09

Этот код не работает в админке! Вы тестировали этот метод?

Rishabh Rishabh
1 июл. 2016 г. 13:21:14

Еще один момент! Когда я указал ID в функции зарегистрированного сайдбара, он начал отображаться в разделе Внешний вид -> Виджеты.

Rishabh Rishabh
1 июл. 2016 г. 13:23:00

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

Owais Alam Owais Alam
1 июл. 2016 г. 13:41:11

регистрация сайдбара в виджете и его вызов через область виджетов на главной странице понятен?

Owais Alam Owais Alam
1 июл. 2016 г. 13:42:44

нужно ли вызывать его через get_sidebar(); или другим способом. Если есть другой способ вызова, покажите мне

Rishabh Rishabh
1 июл. 2016 г. 13:45:49

вызов через это и проверь результат <div class="third"> <?php if ( ! dynamic_sidebar('ваше название сайдбара')) : ?> <h2>Название вашего сайдбара</h2> <?php endif; ?> </div>

Owais Alam Owais Alam
1 июл. 2016 г. 13:50:01

Нет нет нет! Похоже, ты все неправильно понял.. Ты предлагаешь мне вызывать эту функцию get_sidebar();. Если да, то она вызовет оба сайдбара одновременно. А что если я хочу показать один виджет в футере, а другой в хедере? В этом случае твой код не кажется возможным, и это был мой настоящий вопрос!

Rishabh Rishabh
1 июл. 2016 г. 13:56:20
Показать остальные 8 комментариев
4

Вы можете различать сайдбары внутри файла sidebar.php. Я не знаю, какова ваша цель, но предположим, что вы хотите разные сайдбары для записей/страниц и других страниц.

В вашем файле functions.php вы зарегистрируете два сайдбара с идентификаторами singular и default обычным способом с помощью функции register_sidebar.

Затем в файле sidebar.php вы добавите что-то вроде:

if (is_singular) {dynamic_sidebar('singular');}
else {dynamic_sidebar('default');}

Конечно, существует множество вариантов этого подхода. Вы можете отображать разные сайдбары в зависимости от категории или вообще не показывать сайдбар на специальном шаблоне страницы под названием 'one-column'.

1 июл. 2016 г. 10:35:14
Комментарии

Я попробовал ваше решение, и результат соответствует моим ожиданиям. Отображается только 1 сайдбар! Но я хотел бы узнать способ добавления нескольких сайдбаров на одной странице в выбранных мной местах.

Rishabh Rishabh
1 июл. 2016 г. 11:01:40

Вы имеете в виду, что хотите несколько вызовов get_sidebar из index.php, чтобы разместить сайдбары в разных местах?

cjbj cjbj
1 июл. 2016 г. 11:06:00

Да, потому что если я хочу показать 2 разных сайдбара - один в футере, а другой в любом другом месте, например в хедере, ИЛИ оба сайдбара в футере на одной странице, то как это можно сделать?

Rishabh Rishabh
1 июл. 2016 г. 11:09:09

Верно. Это означает, что вам нужно передать фрагмент информации из index.php (места вызова) в sidebar.php. Это непростой вопрос с несколькими решениями. Подробнее об этом можно прочитать здесь: http://wordpress.stackexchange.com/questions/228223/check-if-partial-file-is-called-from-within-header-php-or-footer-php?lq=1

cjbj cjbj
1 июл. 2016 г. 11:18:42
1

Вы можете создавать несколько сайдбаров с помощью Visual Composer или WordPress редактора, используя плагин https://codecanyon.net/item/custom-sidebar-visual-editor-wordpress-plugin/17329853

31 авг. 2017 г. 21:38:21
Комментарии

Спасибо за предложение, но я хотел сделать это самостоятельно. Без помощи плагина. Но ваш ответ может быть полезен для будущих читателей :)

Rishabh Rishabh
1 сент. 2017 г. 08:53:50