the_widget() — позволяет вывести виджет непосредственно через PHP, за пределами сайдбара

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

the_widget($widget, $instance = array(), $args = array())
$widget
(строка) PHP-класс виджета. Перечислю классы стандартных виджетов WordPress:

$instanse
(строка|массив) массив или строка с параметрами виджета (каждый виджет имеет собственные параметры, какие именно смотрите ниже).

Параметры виджетов вы также можете посмотреть сами, для этого в админке переходим во Внешний вид > Виджеты, затем перетаскиваем интересующий нас виджет в сайдбар и видим его параметры:

Параметры виджета Архивы
$args
(массив|строка) массив или строка с параметрами, которые обычно задаются при регистрации сайдбара (некоторые из них). Cписок значений параметров следующий:

before_widget
Текст или HTML-код, который будет добавлен перед виджетом, по умолчанию: <div class="widget {класс виджета}">
after_widget
Текст или HTML-код, который будет добавлен после виджета, по умолчанию: </div>
before_title
Текст или HTML-код перед заголовком виджета, по умолчанию: <h2 class="widgettitle">
after_title
Текст или HTML-код после заголовка виджета, по умолчанию: </h2>

Описание стандартных виджетов в WordPress и их параметров

Виджет «Архивы»

Выводит ссылки на страницы архивов по месяцам. Параметры:

title
(строка) Заголовок виджета архивов на сайте, по умолчанию __('Archives').
count
(логическое) Нужно ли рядом со ссылками отображать количество постов (является аналогом параметра show_post_count функции wp_get_archives()), значение по умолчанию — false (т.е. не отображать).
dropdown
(логическое) true — выводить выпадающий список в виде <select>, false (по умолчанию) — маркированный список <ul>.

Примеры использования:

the_widget( 'WP_Widget_Archives' );
the_widget( 'WP_Widget_Archives', array('title' => 'Мой виджет', 'count' => true, 'dropdown' => true) );
the_widget( 'WP_Widget_Archives', 'title=Мой виджет&dropdown=1' );

Виджет «Календарь»

Выводит календарь, на котором отображаются даты публикации постов. Его удобно использовать для навигации по страницам архивов постов.

Параметры:

title
(строка) Заголовок виджета, по умолчанию без заголовка

Пример:

the_widget( 'WP_Widget_Calendar' );

Виджет «Рубрики»

Позволяет вывести список рубрик блога.

Параметры:

title
(строка) Заголовок виджета, по умолчанию __(' Categories')
count
(логическое) Нужно ли отображать количество постов рядом с названием рубрики, аналог параметра show_count функции wp_list_categories(), значение по умолчанию — false (не отображать).
hierarchical
(логическое) Нужно ли соблюдать иерархию категорий (по умолчанию false — не нужно).
dropdown
(логическое) true — в виде выпадающего списка, false (по умолчанию) — в виде маркированного списка.

Пример:

the_widget( 'WP_Widget_Categories', array('count' => true) );

Виджет «Мета»

Выводит ссылки входа и выхода на сайте, а также ссылки на RSS ленты (лента постов и лента комментариев) и на официальный сайт WordPress.

title
(строка) Заголовок, по умолчанию __(' Meta')
the_widget( 'WP_Widget_Meta' );

Виджет «Страницы»

Выводит ссылки на страницы (тип поста page) сайта.

Параметры:

title
(строка) Заголовок выводимого списка страниц, по умолчанию __('Pages')
sortby
(строка) По какому критерию сортировать страницы. По умолчанию — menu_order.
exclude
(строка) IDы страниц через запятую, которые нужно исключить из выводимого списка. По умолчанию выводятся все.

Например выведем список страниц, отсортированных по дате изменения и исключим из этого списка страницы с ID = 4 и ID = 5:

the_widget('WP_Widget_Pages', 'sortby=post_modified&exclude=4,5' );

Виджет «Свежие комментарии»

Думаю из заголовка прекрасно понятно, какую функцию выполняет этот виджет. Его параметры:

title
(строка) Заголовок выводимого списка комментариев, по умолчанию __('Recent Comments')
number
(целое число) Количество комментариев, которые нужно отобразить (не более 15). По умолчанию — 5.
the_widget( 'WP_Widget_Recent_Comments', 'number=15' );

Виджет «Свежие записи»

title
(строка) Заголовок виджета, по умолчанию __('Recent Posts')
number
(целое число) Количество записей, которые нужно отобразить (не более 15). По умолчанию — 10.
the_widget( 'WP_Widget_Recent_Posts', array( 'number' => 5 ) );

Виджет «RSS»

Этот виджет позволяет вывести RSS или Atom ленту любого блога. Это также можно сделать при помощи функции fetch_feed().

Параметры виджета:

title
(строка) Заголовок виджета, по умолчанию выводится название ленты в виде ссылки на сайт, слева от которого иконка RSS со ссылкой непосредственно на ленту.
items
(целое число) Количество элементов, которые нужно отобразить. По умолчанию — все доступные.
url
(строка) Ссылка на RSS-фид, который хотим вывести (параметр обязателен).
show_summary
(логическое) Нужно ли под ссылками с заголовками вывести краткое описание. По умолчанию — false.
show_author
(логическое) Нужно ли отобразить авторов постов. По умолчанию — false.
show_date
(логическое) Нужно ли вывести даты публикаций постов. По умолчанию — false.

Пример:

$instance = array(
	'feed' => 'https://truemisha.ru/feed',
	'items' => 5,
	'show_summary' => true
);
the_widget( 'WP_Widget_RSS', $instance );

Виджет «Поиск»

Выводит форму поиска по сайту.

title
(строка) Заголовок виджета, по умолчанию null.
the_widget( 'WP_Widget_Search' );

Виджет «Облако меток»

Выводит облако меток / категорий / элементов таксономий.

title
(строка) Заголовок виджета, по умолчанию __( 'Tags' ).
taxonomy
(строка) Элементы какой таксономии следует вывести в виде облака тегов (по умолчанию — метки post_tag.

Выводим облако рубрик блога:

the_widget( 'WP_Widget_Tag_Cloud', 'title=Облако рубрик&taxonomy=category', 'before_title=<h3>&after_title=</h3>' );

Виджет «Текст»

title
(строка) Заголовок виджета, по умолчанию null (т.е. без заголовка).
text
(строка) Текст или HTML-код.
the_widget( 'WP_Widget_Text', array('text' => 'Привет.') );

Виджет «Произвольное меню»

Позволяет вывести одно из созданных в админке меню в виде списка (с учетом вложенности элементов).

title
(строка) Заголовок виджета, по умолчанию null.
nav_menu
(строка|целое число) ID или название меню, которое нужно вывести (регистр не имеет значения, кириллические символы тоже). Как узнать ID меню? Легко и просто — переходим на страницу редактирования меню и залазим в исходный код:
ID меню в WordPress
the_widget( 'WP_Nav_Menu_Widget', array('nav_menu' => 122) );
the_widget( 'WP_Nav_Menu_Widget', array('nav_menu' => 'My Menu') );

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

  • Андрей9 июля 2014 в 02:07 #

    А если нужно вывести сторонний виждет?

    • Евгений9 августа 2015 в 21:08 #

      Добрый вечер Михаил! Интересует решение такой проблемы: как менять структуру виджета ? Примером, у меня на сайдбаре есть виджет, демонстрирующий последние новости и я могу менять лишь стиль его элементов с помощью css, но никак не структуру, я не могу изменить, например, формат отображения даты или вместо заголовка поста отобразить его краткое содержание. Как я могу управлять структурой виджета?

  • Сергей14 октября 2014 в 11:10 #

    Спасибо Миша, очень помогло. А как сделать так, чтобы заголовок не выводился, например: "Свежие комментарии" , это вообще возможно? Заранее благодарен.

  • Сергей14 октября 2014 в 13:10 #

    Ура, все получилось! Завидую вам по доброму, тоже хочу знать php на вашем уровне, но пока увы.
    Спасибо огромное. Удачи вам.

  • Ольга18 ноября 2014 в 22:11 #

    А вот, к примеру, если нужно вывести виджет на определенных страницах сайта (с определенными id) или даже на странице с определенной рубрикой, это возможно?

    • Миша19 ноября 2014 в 07:11 #

      Да, используйте is_page() или is_category().

      • Ольга19 ноября 2014 в 08:11 #

        Спасибо, получилось, хоть не сильна в php (т.е. вообще не знаю php). Для полного счастья не хватает, чтобы в этих определенных рубриках или страницах выводились не все метки, а только те, которые нужно.

        • Миша19 ноября 2014 в 08:11 #

          Сорри, не совсем понял вопрос.

          • Ольга19 ноября 2014 в 08:11 #

            К примеру, у меня есть метки с id 100, 200, 300, 301, 302. При отображении постов из категории №3, если я прописываю момент отображения для этой категории Облака меток, появляется виджет "Облако меток" вверху, и в нем появляются все метки (100, 200, 300, 301, 302), которые у меня есть на сайте на данный момент. А мне бы хотелось, чтобы отображались только метки № 300, 301, 302, т.к. метки с id 100, 200 не подходят к этой категории. Такое возможно?

            • Миша19 ноября 2014 в 09:11 #

              Возможно, но весьма не просто и не через виджет.

              Идея такая: вытаскиваем все посты из данной категории через WP_Query, затем метки каждого поста добавляем в массив (используем get_the_tags()), а потом уже выводим облако меток при помощи wp_tag_cloud(), при этом в качестве параметра include указываем свой массив меток.

              Чтобы метки не добавлялись в массив по несколько раз, можно использовать условие с функцией in_array().

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

              • Ольга24 ноября 2014 в 22:11 #

                Да, это сложно для меня. Пока решила не заморачиваться, может, в перспективе почитаю, поизучаю нужную литературу и обдумаю этот вариант :-)

  • Ольга2 декабря 2014 в 20:12 #

    А можно как-то увеличить количество отображаемых меток в облаке меток? К примеру, у меня отображается только 45 меток, а мне нужно, чтобы отражались все 60.

  • Роман30 апреля 2015 в 15:04 #

    Есть виджет. Он показывает значения из meta_box'a.
    Как запретить показ виджета, если в метабоксе данных нет?

  • Владимир9 июля 2015 в 12:07 #

    Чтобы было разное меню на разных страницах в файле page.php вызываю

    if ( is_page( 'сраница1' ) ) {	
    	if ( !function_exists('dynamic_sidebar') || !dynamic_sidebar('Контент слева') ) {  the_widget( 'WP_Nav_Menu_Widget', array('nav_menu' => 'Меню1_1') );} 
    	if ( !function_exists('dynamic_sidebar') || !dynamic_sidebar('Контент центр') ) { the_widget( 'WP_Nav_Menu_Widget', array('nav_menu' => 'Меню1_2') );} 
    	if ( !function_exists('dynamic_sidebar') || !dynamic_sidebar('Контент справа') ) { the_widget( 'WP_Nav_Menu_Widget', array('nav_menu' => 'Меню1_3') ); } 
    }
    if ( is_page( 'сраница2' ) ) {	
    	if ( !function_exists('dynamic_sidebar') || !dynamic_sidebar('Контент слева') ) {  the_widget( 'WP_Nav_Menu_Widget', array('nav_menu' => 'Меню2_1') );} 
    	if ( !function_exists('dynamic_sidebar') || !dynamic_sidebar('Контент центр') ) { the_widget( 'WP_Nav_Menu_Widget', array('nav_menu' => 'Меню2_2') );} 
    	if ( !function_exists('dynamic_sidebar') || !dynamic_sidebar('Контент справа') ) { the_widget( 'WP_Nav_Menu_Widget', array('nav_menu' => 'Меню2_3') ); } 
    }
    if ( is_page( 'сраница3' ) ) {	
    	if ( !function_exists('dynamic_sidebar') || !dynamic_sidebar('Контент слева') ) {  the_widget( 'WP_Nav_Menu_Widget', array('nav_menu' => 'Меню3_1') );} 
    	if ( !function_exists('dynamic_sidebar') || !dynamic_sidebar('Контент центр') ) { the_widget( 'WP_Nav_Menu_Widget', array('nav_menu' => 'Меню3_2') );} 
    	if ( !function_exists('dynamic_sidebar') || !dynamic_sidebar('Контент справа') ) { the_widget( 'WP_Nav_Menu_Widget', array('nav_menu' => 'Меню3_3') ); } 
    }

    Я правильно думаю?
    Почему то не работает((
    Возможно из-за того в исходнике админки я увидел, что название поля где выбираются меню name = widget-nav_menu[2][nav_menu], widget-nav_menu[3][nav_menu], widget-nav_menu[4][nav_menu] - соответственно.
    подскажите пожалуйста в чем ошибка?

    • Владимир9 июля 2015 в 14:07 #

      похоже что меню не меняется, выводит первое что выбрано в админ панели в самом виджите "произвольное меню". не пойму где прописывать.

  • Владимир9 июля 2015 в 19:07 #

    Наконец то увидел, все выводится только кодом

    if ( is_page( 'сраница1' ) ) {	
    	if ( !function_exists('dynamic_sidebar') || !dynamic_sidebar('Контент слева') ) {}   
            the_widget( 'WP_Nav_Menu_Widget', array('nav_menu' => 'Меню1_1') );
    	if ( !function_exists('dynamic_sidebar') || !dynamic_sidebar('Контент центр') ) { }
             the_widget( 'WP_Nav_Menu_Widget', array('nav_menu' => 'Меню1_2') );
    	if ( !function_exists('dynamic_sidebar') || !dynamic_sidebar('Контент справа') ) { } 
            the_widget( 'WP_Nav_Menu_Widget', array('nav_menu' => 'Меню1_3') );
    }

    И без стилей, поэтому не было видно. И создает новый объект, а не изменяет нужный

  • Владимир9 июля 2015 в 19:07 #

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

    • Миша10 июля 2015 в 14:07 #

      У вас есть три варианта:
      1) выводить через the_widget(),
      2) для каждой страницы создать разные сайдбары,
      3) создать собственный виджет, в котором выводить меню в зависимости от страницы.

      • Владимир11 июля 2015 в 14:07 #

        Спасибо. я так и думал по логике
        Но делать 30 сайтбаров влом. Да еще объяснять потом как этим пользоватся. Решил так:

        $arg1 = 'name=Контент слева&before_widget=<div class="c_box c_box-left">&after_widget=</div>&before_title=<div class="c_title">&after_title=</div>';
        if ( is_page( '55' ) ) {	
        	the_widget( 'WP_Nav_Menu_Widget', array('nav_menu' => 49),$arg1 );//[2]
        }
        ...

        Может кому пригодиться решение

Оставить комментарий / вопрос

phpjsHTMLCSSSQLПросто код
  Для того, чтобы оставить комментарий, пожалуйста, зарегистрируйтесь или авторизуйтесь на сайте.
Получайте новости блога по email или следите за мной в социальных сетях.
  • Миша: Да, точно)

  • Владимир: и на третьей строке не хватает скобки ) закрывающей if :)

  • Миша: Добрый вечер! Рекомендую получить ID пользователя через функцию get_current_user_id().

  • Дмитрий: Миша, подскажите пожалуйста, я использую такой редирект, но он не срабатывает: add_action( 'template_redirect', funct...

  • Миша: Ну как не определена - это аргумент функции. Или я просто вас не до конца понимаю.