Лучший способ создания нескольких сайдбаров
Я хорошо знаю, как создавать несколько сайдбаров
. Но считаю, что мой способ не самый правильный для добавления нескольких сайдбаров.
Вот как я добавляю несколько сайдбаров
Если мне нужно создать один сайдбар, я использую файл sidebar.php. НО если мне нужен еще один сайдбар, я создаю еще один php-файл, например sidebar-new.php
. Затем вызываю его так:
<?php
get_sidebar('new');
?>
То есть, если мне нужно 4 сайдбара, я должен создать 4 php-файла!
НО я видел много тем (на WordPress маркете), которые предоставляют множество сайдбаров, но содержат только один файл sidebar.php! Как они это делают? Я учился создавать сайдбары через Google, но в результатах поиска нахожу только тот способ, который использую сейчас (создавать отдельные файлы для каждого сайдбара).
Так как же можно создать несколько сайдбаров без создания множества php-файлов!!???

Определение новой боковой панели в вашем файле 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; ?>

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

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

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

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

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

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

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

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

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

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

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

Вы можете различать сайдбары внутри файла sidebar.php
. Я не знаю, какова ваша цель, но предположим, что вы хотите разные сайдбары для записей/страниц и других страниц.
В вашем файле functions.php
вы зарегистрируете два сайдбара с идентификаторами singular
и default
обычным способом с помощью функции register_sidebar
.
Затем в файле sidebar.php
вы добавите что-то вроде:
if (is_singular) {dynamic_sidebar('singular');}
else {dynamic_sidebar('default');}
Конечно, существует множество вариантов этого подхода. Вы можете отображать разные сайдбары в зависимости от категории или вообще не показывать сайдбар на специальном шаблоне страницы под названием 'one-column'.

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

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

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

Верно. Это означает, что вам нужно передать фрагмент информации из 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

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