network_get_terms()
Так как плагин стал пользоваться популярностью (хотя в рунете на данный момент не заинтересовал почти никого), я решил начать его дорабатывать, и первая из доработок, которую я сделал, это аналог функции get_terms() в WordPress — network_get_terms()
.
Самое главное отличие этих функций в том, что get_terms() возвращает рубрики/метки/термины с текущего блога, а network_get_terms()
— со всех блогов сети в одном цикле.
network_get_terms( $network_taxonomies, $network_args )
Параметры функции
Хотел бы я написать, что все параметры идентичны параметрам функции get_terms(), но к сожалению это не совсем так, поэтому придется остановиться на них подробнее.
- $network_taxonomies
- Укажите нужные вам таксономии. Этот параметр также поддерживает возможность указать массив
array('post_tag', 'category')
. - $network_args
-
- number
- Стандартно — указываем число — количество элементов, которое нужно получить.
- offset
- Число — количество элементов, которые нужно пропустить от начала. Например если указать
2
, то функция начнет получать элементы начиная с 3-го по порядку. Работает только если указан параметрnumber
. - include, exclude
- Укажите в этих параметрах значения локальных ID одного или нескольких элементов (через массив), которые вы хотите включить, исключить (соответственно) из вывода.
// в этом примере исключаем рубрики, ID которых равны 1 или 2 на любом из блогов сети $network_category = network_get_terms('category', array('exclude' => array( 1, 2 ) ) );
Если одновременно указаны оба параметра, то учитывается только
include
. - parent
- Укажите локальный ID элемента таксономии, дочерние элементы (первого уровня) которого вам нужны.
Действует по всем блогам сети — т.е. если вы указали ID 11, а у вас на первом блоге есть рубрика с этим ID, и на втором блоге есть, то будут возвращены дочерние элементы первого уровня вложенности обоих этих рубрик.
Если указать
0
, то будут выведены родительские элементы 1-го уровня. - $slug
- Функция ищет по всем блогам сети элементы таксономий с указанным ярлыком. Также можно указать несколько элементов в виде массива.
- $name
- Возвращает все элементы таксономий сети с указанным названием. Чувствительности к регистру нет. Можно задать массив из нескольких элементов.
- $name__like, $description__like
- В этом параметре достаточно указать лишь часть названия, описания (соответственно).
- $search
- Функция будет искать заданную строку в названиях и ярлыках элементов таксономий сети.
- orderby
- Параметры сортировки,
count
— по количеству постов,name
— по названию (по умолчанию),slug
— по ярлыку,description
— по описанию,include
— по порядку, указанному в соответствующем параметре (см. выше),id
— по значению локального ID. - order
- Порядок сортировки —
ASC
по возрастанию (по умолчанию) илиDESC
по убыванию. - fields
- Формат возвращаемого результата функции:
all
— массив объектов (по умолчанию),names
— массив названий,ids
— массив локальных айдишников.
- number
- Стандартно — указываем число — количество элементов, которое нужно получить.
- offset
- Число — количество элементов, которые нужно пропустить от начала. Например если указать
2
, то функция начнет получать элементы начиная с 3-го по порядку. Работает только если указан параметрnumber
. - include, exclude
- Укажите в этих параметрах значения локальных ID одного или нескольких элементов (через массив), которые вы хотите включить, исключить (соответственно) из вывода.
// в этом примере исключаем рубрики, ID которых равны 1 или 2 на любом из блогов сети $network_category = network_get_terms('category', array('exclude' => array( 1, 2 ) ) );
Если одновременно указаны оба параметра, то учитывается только
include
. - parent
- Укажите локальный ID элемента таксономии, дочерние элементы (первого уровня) которого вам нужны.
Действует по всем блогам сети — т.е. если вы указали ID 11, а у вас на первом блоге есть рубрика с этим ID, и на втором блоге есть, то будут возвращены дочерние элементы первого уровня вложенности обоих этих рубрик.
Если указать
0
, то будут выведены родительские элементы 1-го уровня. - $slug
- Функция ищет по всем блогам сети элементы таксономий с указанным ярлыком. Также можно указать несколько элементов в виде массива.
- $name
- Возвращает все элементы таксономий сети с указанным названием. Чувствительности к регистру нет. Можно задать массив из нескольких элементов.
- $name__like, $description__like
- В этом параметре достаточно указать лишь часть названия, описания (соответственно).
- $search
- Функция будет искать заданную строку в названиях и ярлыках элементов таксономий сети.
- orderby
- Параметры сортировки,
count
— по количеству постов,name
— по названию (по умолчанию),slug
— по ярлыку,description
— по описанию,include
— по порядку, указанному в соответствующем параметре (см. выше),id
— по значению локального ID. - order
- Порядок сортировки —
ASC
по возрастанию (по умолчанию) илиDESC
по убыванию. - fields
- Формат возвращаемого результата функции:
all
— массив объектов (по умолчанию),names
— массив названий,ids
— массив локальных айдишников.
// в этом примере исключаем рубрики, ID которых равны 1 или 2 на любом из блогов сети $network_category = network_get_terms('category', array('exclude' => array( 1, 2 ) ) );
Если одновременно указаны оба параметра, то учитывается только include
.
Действует по всем блогам сети — т.е. если вы указали ID 11, а у вас на первом блоге есть рубрика с этим ID, и на втором блоге есть, то будут возвращены дочерние элементы первого уровня вложенности обоих этих рубрик.
Если указать 0
, то будут выведены родительские элементы 1-го уровня.
Фильтры функции
По сути network_get_terms()
имеет те же фильтры, что и get_terms(), но только с префиксом network_
.
Описывать каждый фильтр я сейчас не стану, так как пост не об этом. А вот примеры мы рассмотрим.
Пример 1. Выводим метки со всех блогов WP Multisite
$network_tags = network_get_terms('post_tag', 'orderby=name&hide_empty=0'); if($network_tags){ echo '<select>'; foreach ($network_tags as $network_tag){ echo "<option value='{$network_tag->term_id}'>{$network_tag->name}</option>"; } echo '</select>'; } /* в данном примере понятно, что $network_tag->name - название метки, $network_tag->term_id - её глобальный, уникальный ID среди всех меток сети также существуют и другие параметры: $network_tag->term_local_id - локальный ID метки внутри блога, на котором она находится $network_tag->parent - локальный ID родительского элемента $network_tag->taxonomy - название таксономии, в данном случае post_tag $network_tag->slug - ярлык метки $network_tag->blog_id - ID блога, на котором находится метка $network_tag->description - описание метки $network_tag->count - количество отмеченных ею записей */
Как вы наверное заметили, в этом примере не хватает одной важной вещи — то есть у нас есть названия меток, есть их ID, но нет самого важного, ссылок.
На самом деле этот момент я тоже предусмотрел и сделал функцию network_get_term_link()
, которая является аналогом стандартной вордпрессовской get_term_link().
Пример 2. Выводим все рубрики с блогов сети WordPress Multisite со ссылками
Представляю вам функцию network_get_term_link()
, которая по сути является аналогом get_term_link(), но работает в сети WordPress Multisite.
network_get_term_link( $term, $taxonomy='', $blog_id=null )
- $term
- В этом параметра можно задать локальный ID элемента таксономии, либо его ярлык. Также сюда можно передавать объекты, возвращаемые функцией
network_get_terms
, в этом случае второй и третий параметр можно будет не указать. - $taxonomy
- Название таксономии
- $blog_id
- ID блога, на котором находится данная рубрика/метка/термин.
$network_cats = network_get_terms('category'); if($network_cats){ echo '<ul>'; foreach ( $network_cats as $network_cat ){ echo '<li><a href="' . network_get_term_link( $network_cat ) . '">' . $network_cat->name . '</a></li>'; } echo '</ul>'; }