Поддержка Проблемы и решения Наличие виджетов

  • Здравствуйте.Подскажите пожалуйста как решить вопрос. Есть div в котором находятся виджеты, у дива установлен фон и все стили. При отсутствии добавленых виджетов в админке на странице высвечивается этот див, пустой. Как сделать так чтобы при пустых виджетах див в котором они находятся не появлялся на странице? Уточню, что этот див это просто контейнер для всех виджетов, у каждого виджета есть своё отдельное оформление. Это не глюк, а просто некрасиво смотрится при пустых виджетах.Спасибо!

Просмотр 6 ответов — с 1 по 6 (всего 6)
  • Модератор Sergey Biryukov

    (@sergeybiryukov)

    Live and Learn

    Можно взять пример из темы Twenty Ten:

    <?php if ( is_active_sidebar( 'secondary-widget-area' ) ) : ?>
    
    	<div id="secondary" class="widget-area" role="complementary">
    		<ul class="xoxo">
    			<?php dynamic_sidebar( 'secondary-widget-area' ); ?>
    		</ul>
    	</div><!-- #secondary .widget-area -->
    
    <?php endif; ?>

    Спасибо! Сергей, а этот код разве не проверяет наличие добавленных виджетов по всему блогу? У меня просто не в одном месте виджеты находятся и проверять нужно только в одном файле, а не по всему блогу. Я так понимаю, что если в блоге есть хотя бы один виджет активный, независимо от месторасположения, то данный код не сработает и будет выводится Див?

    Модератор Sergey Biryukov

    (@sergeybiryukov)

    Live and Learn

    Исправил фрагмент — теперь проверяется идентификатор блока, использованный в параметрах register_sidebar().

    Не знаю может что-то неправильно делаю, но не работает.
    Сделал так:

    <?php if ( is_active_sidebar( 'Side 1' ) || ( 'Side 2' ) || ( 'Side 3' )) : ?>
    		<div class="widgets">
    		<?php if ( !function_exists('dynamic_sidebar')
    		|| !dynamic_sidebar("Side 1") ) : ?>
    
    		<?php endif; ?>
    
    		<?php if ( !function_exists('dynamic_sidebar')
    		|| !dynamic_sidebar("Side 2") ) : ?>
    
    		<?php endif; ?>
    
    		<?php if ( !function_exists('dynamic_sidebar')
    		|| !dynamic_sidebar("Side 3") ) : ?>
    
    		<?php endif; ?>
    
    		</div>
    	<?php endif; ?>

    При удалении виджетов Див остаётся.

    Попробовал так:

    <?php if ( is_active_sidebar( 'Side 1' ) || is_active_sidebar( 'Side 2' ) || is_active_sidebar( 'Side 3' )) : ?>
    		<div class="widgets">
    		<?php if ( !function_exists('dynamic_sidebar')
    		|| !dynamic_sidebar("Side 1") ) : ?>
    
    		<?php endif; ?>
    
    		<?php if ( !function_exists('dynamic_sidebar')
    		|| !dynamic_sidebar("Side 2") ) : ?>
    
    		<?php endif; ?>
    
    		<?php if ( !function_exists('dynamic_sidebar')
    		|| !dynamic_sidebar("Side 3") ) : ?>
    
    		<?php endif; ?>
    
    		</div>
    	<?php endif; ?>

    С этим кодом виджеты и Див вообще не появляются.
    Может я что-то не совсем правильно прописал? Помоги пожалуйста.Спасибо!

    Модератор Sergey Biryukov

    (@sergeybiryukov)

    Live and Learn

    Второй вариант почти правильный, но нуждается в доработке. Нужно использовать идентификаторы, а не имена блоков (т.е. side-1 вместо Side 1).

    1. Добавил в functions.php:

    register_sidebar(array(
    	'name' => 'Side 1',
    	'id' => 'side-1',
    	// ...
    ));
    
    register_sidebar(array(
    	'name' => 'Side 2',
    	'id' => 'side-2',
    	// ...
    ));

    2. Добавил в sidebar.php (сократил код):

    <?php if ( is_active_sidebar( 'side-1' ) || is_active_sidebar( 'side-2' ) ) : ?>
    	<div class="widgets">
    
    	<?php dynamic_sidebar('side-1'); ?>
    	<?php dynamic_sidebar('side-2'); ?>
    
    	</div>
    <?php endif; ?>

    3. Добавил виджеты — появились вместе с <div>.
    4. Удалил виджеты — исчезли вместе с <div>.

    Сергей, а у меня версия 2.8.6, а твой вариант я так понимаю для версии 3.0. Id для виджетов в моей версии не подерживаются — выскакивает 500 ошибка.

Просмотр 6 ответов — с 1 по 6 (всего 6)
  • Тема «Наличие виджетов» закрыта для новых ответов.