Intereting Posts
обновить функцию поиска по умолчанию и получить записи postmeta Как правильно отображать slug категории как класс? Как заставить название виджета принимать php? Как добавить одну и ту же форму контакта на несколько сайтов WordPress и получить ответ в одном месте или в базе данных? Как создать список ссылок для публикации с определенной категорией Мой раздел сообщений для зарегистрированных пользователей Когда использовать способ вывода плагина? Добавить размер в Настройки галереи в Media Library Отношения «один ко многим», которые отображаются по категориям (с использованием плагина posts-to-posts) Измените этот цикл, чтобы он соответствовал моему ползунку jQuery (слайды) Извлечь категорию публикации, кроме одной категории Перевести навигационное меню и названия виджета боковой панели Правильно ли создавать сайт, поддерживающий посетителей блога в WordPress? Почему цветные изображения иногда обрезаются, а иногда Импортировать сообщение WordPress Post Slash с помощью прямого слэш

Как отображать только некоторые виджеты боковой панели?

Я хотел бы разбить боковую панель на три контейнера. Каждый контейнер должен содержать до трех виджетов боковой панели. Поэтому мне нужно найти HTML только для виджетов от 0 до 2, от 3 до 5 и от 6 до 8 отдельно.

Как правило, я бы использовал dynamic_sidebar() для отображения боковой панели, но эта функция не принимает параметры, чтобы указать, что мне нужен только диапазон виджетов боковой панели. Более того, я нашел wp_get_sidebars_widgets() , но он не предназначен для использования для тем.

Как я могу получить только виджеты в заданном диапазоне динамической боковой панели? Например, это то, о чем я думаю.

 // functions.php // display range of widgets of a sidebar function dynamic_sidebar_range($name, $from, $to) { $widgets = get_dynamic_sidebar($name); // this function doesn't exist! for ($i = $from; $i < count($widgets) && $i < $to; ++$i ) { $widget = $widgets[$i]; echo $widget['before_widget'] . $widget['before_title'] . $widget['title'] . $widget['after_title'] . $widget['content'] . $widget['after_widget']; } } 

 // frontpage.php // consists of blocks of three posts or widgets alternatingly for ($sections = 0; $sections < 3; ++$sections) { // display three posts for ($i = 0; $i < 3 && have_posts(); ++$i) { the_post(); // ... } // display three widgets $from = $sections * 3; $to = $from + 3; dynamic_sidebar_range('name', $from, $to); } 

Если вы хотите «разбить боковую панель над тремя контейнерами», то вам действительно не нужно перестраивать dynamic_sidebar() чтобы сделать это. Существует фильтр под названием dynamic_sidebar_params который можно использовать для разбивки боковой панели.

 function add_closing($params) { $params[0]['after_widget'] = $params[0]['after_widget'].'</div><!-- close wrapper-thing -->'; return $params; } add_filter( 'dynamic_sidebar_params', function ($params) { static $c = 0; if (0 === $c || 0 === $c%3) { $params[0]['before_widget'] = '<div class="wrapper-thing" style="border:1px solid white;float:left">'.$params[0]['before_widget']; remove_filter('dynamic_sidebar_params','add_closing'); } else { add_filter('dynamic_sidebar_params','add_closing'); } $c++; return $params; } ); 

Я нашел это интересным в стиле «кодовый гольф». Я уверен, что три различных боковых панели, как это предлагается в комментариях, – лучший способ сделать это.

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

Просто используйте боковую панель, как она была предназначена.