Package: WordPressTaxonomy
Since: 2.3.0
Since: 4.2.0 Introduced ‘name’ and ‘childless’ parameters.
Since: 4.4.0 Introduced the ability to pass ‘term_id’ as an alias of ‘id’ for the orderby
parameter. Introduced the ‘meta_query’ and ‘update_term_meta_cache’ parameters. Converted to return a list of WP_Term objects.
Type: string $orderby Field(s) to order terms by. Accepts term fields (‘name’, ‘slug’, ‘term_group’, ‘term_id’, ‘id’, ‘description’), ‘count’ for term taxonomy count, ‘include’ to match the ‘order’ of the $include param, or ‘none’ to skip ORDER BY. Defaults to ‘name’.
Type: string $order Whether to order terms in ascending or descending order. Accepts ‘ASC’ (ascending) or ‘DESC’ (descending).
fault ‘ASC’.
Type: bool|int $hide_empty Whether to hide terms not assigned to any posts. Accepts 1|true or 0|false. Default 1|true.
Type: array|string $include Array or comma/space-separated string of term ids to include. Default empty array.
Type: array|string $exclude Array or comma/space-separated string of term ids to exclude. If $include is non-empty, $exclude is ignored. Default empty array.
Type: array|string $exclude_tree Array or comma/space-separated string of term ids to exclude along with all of their descendant terms. If $include is non-empty, $exclude_tree is ignored. Default empty array.
Type: int|string $number Maximum number of terms to return. Accepts »|0 (all) or any positive number. Default »|0 (all).
Type: int $offset The number by which to offset the terms query. Default empty.
Type: string $fields Term fields to query for. Accepts ‘all’ (returns an array of complete term objects), ‘ids’ (returns an array of ids), ‘id=>parent’ (returns an associative array with ids as keys, parent term IDs as values), ‘names’ (returns an array of term names), ‘count’ (returns the number of matching terms), ‘id=>name’ (returns an associative array with ids as keys, term names as values), or ‘id=>slug’ (returns an associative array with ids as keys, term slugs as values).
fault ‘all’.
Type: string|array $name Optional. Name or array of names to return term(s) for. Default empty.
Type: string|array $slug Optional. Slug or array of slugs to return term(s) for. Default empty.
Type: bool $hierarchical Whether to include terms that have non-empty descendants (even if $hide_empty is set to true). Default true.
Type: string $search Search criteria to match terms. Will be SQL-formatted with wildcards before and after. Default empty.
Type: string $name__like Retrieve terms with criteria by which a term is LIKE $name__like. Default empty.
Type: string $description__like Retrieve terms where the description is LIKE $description__like. Default empty.
Type: bool $pad_counts Whether to pad the quantity of a term’s children in the quantity of each term’s «count» object variable. Default false.
Type: string $get Whether to return terms regardless of ancestry or whether the terms are empty. Accepts ‘all’ or empty (disabled). Default empty.
Type: int $child_of Term ID to retrieve child terms of. If multiple taxonomies are passed, $child_of is ignored. Default 0.
Type: int|string $parent Parent term ID to retrieve direct-child terms of.
fault empty.
Type: bool $childless True to limit results to terms that have no children. This parameter has no effect on non-hierarchical taxonomies. Default false.
Type: string $cache_domain Unique cache key to be produced when this query is stored in an object cache. Default is ‘core’.
Type: bool $update_term_meta_cache Whether to prime meta caches for matched terms. Default true.
Type: array $meta_query Meta query clauses to limit retrieved terms by. See
WP_Meta_Query
. Default empty. }Located at wp-includes/taxonomy-functions.php
apigen.juzna.cz
/** * Generate the form configuration array for this tab * * @since 0.1 * @access private */ private function populate_form_array() { // define the sections $this->sections = array('locations' => array('title' => _x('Page Slugs', 'page locations section title', 'wpsc'), 'fields' => array('store_slug', 'store_as_front_page', 'category_base_slug', 'product_base_slug', 'cart_page_slug', 'checkout_page_slug', 'customer_account_page_slug', 'login_page_slug', 'password_reminder_page_slug', 'register_page_slug', 'prefix_product_slug', 'hierarchical_product_category_u.
'wpsc'); $view_category_message = _x('Sample Category', 'view page', 'wpsc'); $view_product_message = _x('Sample Product', 'view page', 'wpsc'); // generate sample URLs for single product and product category $base_shop_url = '<small>' . esc_url(wpsc_get_store_url('/')) . '</small>'; $sample_category = get_terms('wpsc_product_category', array('number' => 1)); $sample_product = get_posts(array('post_type' => 'wpsc-product', 'numberposts' => 1)); // generate form fields $this->form_array = array('store_slug' => array('type' => 'textfield', 'prepend' => '<small>' . esc_url(home_url('/')) . '</small>', 'title' => _x('Main store', 'page slug setting', 'wpsc'), 'append' => sprintf($view_button, wpsc_get_store_url(), $view_message), 'validation' => 'required', 'class' => 'regular-text'), 'store_as_front_page' => array('type' => 'radios', 'title' => _x('Display main store on front page', 'page settings', 'wpsc').
tegory base slug', 'permalinks setting', 'wpsc'), 'validation' => 'required', 'class' => 'regular-text'), 'product_base_slug' => array('type' => 'textfield', 'prepend' => $base_shop_url, 'append' => empty($sample_product) ? '' : sprintf($view_button, get_permalink($sample_product[0]), $view_product_message), 'title' => _x('Single product base slug', 'permalinks setting', 'wpsc'), 'validation' => 'required', 'class' => 'regular-text'), 'prefix_product_slug' => array('type' => 'checkboxes', 'title' => _x('Product prefix', 'permalinks setting', 'wpsc'), 'options' => array(1 => __('Include category slug in product URL.', 'wpsc'))), 'hierarchical_product_category_url' => array('type' => 'radios', 'title' => _x('Hierarchical product category URL', 'permalinks setting', 'wpsc'), 'options' => array(1 => _x('Yes', 'settings', 'wpsc'), 0 => _x('No', 'settings', 'wpsc')), 'description' => __('When hierarchical product category URL is .
ired'), 'checkout_page_slug' => array('type' => 'textfield', 'prepend' => $base_shop_url, 'title' => _x('Checkout page', 'page setting', 'wpsc'), 'validation' => 'required', 'class' => 'regular-text'), 'checkout_page_title' => array('type' => 'textfield', 'title' => _x('Checkout page', 'page settings', 'wpsc'), 'validation' => 'required'), 'customer_account_page_slug' => array('type' => 'textfield', 'prepend' => $base_shop_url, 'append' => sprintf($view_button, wpsc_get_customer_account_url(), $view_message), 'title' => _x('Customer account page', 'permalinks setting', 'wpsc'), 'validation' => 'required|slug_not_conflicted', 'class' => 'regular-text'), 'customer_account_page_title' => array('type' => 'textfield', 'title' => _x('Customer account page', 'page settings', 'wpsc'), 'validation' => 'required'), 'login_page_slug' => array('type' => 'textfield', 'prepend' => $base_shop_url, 'title' => _x('Login page', '.
sc'), 'description' => __("Leaving this field blank will disable the page.", 'wpsc'), 'validation' => 'slug_not_conflicted', 'class' => 'regular-text'), 'password_reminder_page_title' => array('type' => 'textfield', 'title' => _x('Password reminder page', 'page settings', 'wpsc'), 'validation' => 'required'), 'register_page_slug' => array('type' => 'textfield', 'prepend' => $base_shop_url, 'title' => _x('Register page', 'permalinks setting', 'wpsc'), 'description' => __("Leaving this field blank will disable the page.", 'wpsc'), 'validation' => 'slug_not_conflicted', 'class' => 'regular-text'), 'register_page_title' => array('type' => 'textfield', 'title' => _x('Register page', 'page settings', 'wpsc'), 'validation' => 'required')); // display warnings for login, register and password reminder pages when // "Anyone can register" is disabled. if (!get_option('users_can_register')) { $additional_description = '<br /> ' .
('<strong>Note:</strong> Enable "Anyone can register" in <a href="%s">Settings -> General</a> first if you want to use this page.', 'wpsc'); $additional_description = sprintf($additional_description, admin_url('options-general.php')); $this->form_array['login_page_slug']['description'] .= $additional_description; $this->form_array['password_reminder_page_slug']['description'] .= $additional_description; $this->form_array['register_page_slug']['description'] .= $additional_description; } }
hotexamples.com
Выводим отсортированные по имени рубрики в виде выпадающего списка
Приведу сразу же несложный пример с кучей комментов, иначе, как мне кажется, если я начну с документации функции, то некоторым будет непонятно, как её использовать.
Вот что у меня получилось в результате выполнения этого кода на тестовом сайте:
Слева — сам список (открытый), а справа его HTML-код.
Синтаксис
$taxonomies
(строка|массив) таксономия или массив таксономий, элементы которых нам нужны.
$args
(строка|массив) параметры по типу, как в WP_Query, их тоже можно записать и в виде массива и в виде строки.
Параметры массива $args
number
(целое число) количество элементов, которые нужно вывести, по умолчанию выводятся все.
offset
(целое число) сколько элементов нужно пропустить, то есть если offset=2, то начинаем с третьего.
include
(целое число|строка|массив) укажите ID элементов, которые нужно вывести, можно указать число, числа через запятую в виде строки или одномерный массив чисел, например так:
или так:
или даже так:
Если вы хотите исключить какие-то элементы, не пытайтесь использовать минус перед числом, просто смотрите следующий параметр.
exclude
(целое число|строка|массив) укажите ID элементов, которые нужно исключить.
orderby
(строка) сортировать по:
- id — по ID элементов (по умолчанию),
- count — по количеству постов,
- name — по имени,
- slug — по ярлыку,
- term_group — по значениям колонки term_group в таблице wp_terms базы данных,
- none — без сортировки;
order
(строка) порядок сортировки.
- ASC — по возрастанию (по умолчанию),
- DESC — по убыванию;
hide_empty
(логическое) нужно ли добавлять в результат также и пустые (без постов) рубрики/метки/элементы таксономий:
true
— не нужно (по умолчанию),false
— нужно;
fields
(строка) в каком виде выводить результат:
- all — массив объектов элементов таксономий (по умолчанию), после print_r() он будет выглядеть так:
- ids — массив составленный из ID элементов, вот как он будет выглядеть, если пропустить его через функцию
print_r()
: - names — возвращает массив наименований, например:
- count — (с версии 3.2) возвращает количество всех элементов таксономии, вне зависимости от других параметров. Для этих целей вы также можете использовать wp_count_terms().
- id=>parent — ассоциативный массив состоящих из ID элементов и ID их родителей, если родительского элемента не существует, то возвращается 0, пример:
slug
(строка) возвращает элементы, ярлыки которых совпадают с заданным значением.
hierarchical
(логическое) нужно ли включить в результат родительские элементы, даже если в них нет постов?
- 1 — нужно (по умолчанию),
- 0 — не нужно;
name__like
(строка) возвращает только те элементы, названия которых начинаются с заданного значения (без чувствительности в регистру), например:
search
(строка) возвращает только те элементы, названия которых содержат заданное значение (без чувствительности в регистру).
pad_counts
(логическое) влияет только на числовые значения количества постов в родительских элементах.
- 1 — количество постов родительского элемента суммируется с количеством постов дочерних элементов,
- 0 — не суммируется (по умолчанию);
get
(строка)
- all — вывести все элементы, вне зависимости от параметров offset, hide_empty, child_of (по умолчанию — пустая строка)
child_of
(целое число) вывести все элементы таксономии, которые являются дочерними для элемента с указанным ID вне зависимости от уровня вложенности.
parent
(целое число) вывести элементы таксономии, которые являются дочерними для элемента с указанным ID и находятся на первом уровне вложенности. Если указать 0, то будут выведены только элементы верхнего уровня.
cache_domain
(строка) (с версии 3.2) если вы планируете использовать get_terms с указанными параметрами несколько раз, укажите в качестве значения cache_domain уникальную фразу, чтобы задействовать кэш (по умолчанию — «core»).
Возвращаемые значения
Если параметр fields не изменен, то функция возвращает массив объектов, каждый из которых содержит следующую информацию об элементе таксономии.
- term_id — ID рубрики/метки/элемента таксономии
- name — название
- slug — ярлык
- term_group — значение term_group из базы данных (особого применения пока что нет, в основном — в плагинах)
- term_taxonomy_id — ID таксономии
- taxonomy — название таксономии
- description — описание элемента (можно заполнить в админке при создании и редактировании)
- parent — ID родительского элемента
- count — количество записей
Выводим список из 5-и рубрик, отсортированных по количеству записей
В этом примере параметры функции задаются в виде массива:
Тот же самый пример, но только с заданными в виде строки параметрами:
misha.blog
Эти функции похожи:
get_the_terms
возвращает информацию о термах заданной таксономии, привязанных к заданному посту;wp_get_object_terms
возвращает информацию о термах одной или нескольких таксономий, привязанных к одному или нескольким постам, а также имеет ряд дополнительных опций.
Кроме этого каждая из них обладает другими особенностями, о которых надо знать.
Функция wp_get_object_terms
более сложна в применении и является базовой: она формирует SQL-запрос, получает от БД данные и обрабатывает их в соответствии с аргументами. Свой результат она не кеширует, а обращение к БД производит при каждом вызове.
Первые два аргумента — $post_ids
и $taxonomies
— могут быть как значениями, так и массивами значений. Третий аргумент — $args
— опциональный массив дополнительных параметров, позволяющих
- определять поле и порядок сортировки (параметры
orderby
иorder
); - задавать вид возвращаемых значений (параметр
fields
); - фильтровать термы по терму-родителю (параметр
parent
; для иерархичных таксономий).
За точным определением аргументов рекомендуется обратиться к кодексу (см. wp_get_object_terms на кодексе) и к исходникам (см. wp-includes/taxonomy.php
).
Замечание следует сделать только о значениях 'all'
и 'all_with_object_id'
параметра 'field'
, т. к. на момент публикации данной заметки их описания на кодексе были одинаковыми: «all matching term’s objects will be returned» — «будут возвращены объекты всех подходящих термов».
В обоих случаях функция возвращает массив объектов с информацией о термах — их структура описана в заметке Параметры терма в WordPress.
По умолчанию полю 'fields'
присваивается значение 'all'
.
Различия между 'all'
и 'all_with_object_id'
проявляются при запросе термов для множества постов:
- если
'fields'
имеет значение'all_with_object_id'
, в результат включаются все термы каждого из заданных постов: в описывающих термы структурах имеется полеobject_id
с идентификатором обладающего термом поста; - если установлен
'all'
(или если'fields'
не задан явно), результирующий массив содержит структуры термов, каждый из которых прикреплен хотя бы к одному из заданных постов; полеobject_id
у структур отсутствует, повторов термов в массиве нет.
Значение 'all_with_object_id'
полезно, когда требуется получить информацию по каждому посту в наборе. Вся информация извлекается из БД одним запросом, поэтому один такой вызов выгоднее нескольких, сделанных для каждого поста и/или каждой таксономии в отдельности. Точно также один вызов с 'all*'
обойдётся дешевле нескольких с одиночными полями (names
, slugs
, ids
).
При обоих вариантах 'all*'
происходит кеширование полученных термов (но не результата функции). Поэтому
- при получении тех же термов вызовом
get_term
обращения к БД не потребуется; - после вызова с
all_with_object_id
терм кешируется с полемobject_id
— при получении такого терма отget_term
это поле следует игнорировать; - кешированностью термов
wp_get_object_terms
никак не руководствуется и выполняет запрос к БД при каждом вызове.
Возвращаемое значение всегда является либо массивом, либо объектом класса WP_Error
, если к.-л. из заданных таксономий не была зарегистрирована. Если подходящие термы не найдены, итоговый массив будет пуст. Такое может произойти в случае, когда посты с указанными идентификаторами отсутствуют или не имеют термов заданных таксономий, а также когда родитель ни одного из прикреплённых термов не соответствует указанному в аргументе 'parent'
.
Перед возвратом массива функция фильтрует его по двум хукам:
'get_object_terms'
, получающий в аргументах:- фильтруемый массив
$terms
, - массив идентификаторов постов
$object_id_array
, - массив таксономий
$taxonomy_array
, - массив аргументов
$args
.
Идентификаторы постов и имена таксономий всегда передаются фильтру в виде массивов, даже если соотв. аргументы вызова
wp_get_object_terms
были одинарными значениями.- фильтруемый массив
'wp_get_object_terms'
, получающий в аргументах:- фильтруемый массив
$terms
; - строку с идентификаторами постов, разделёнными запятыми
$object_ids
; - строку с именами таксономий, разделёнными замятыми и взятыми в апострофы
$taxonomies
; - массив аргументов
$args
.
Строки с идентификаторами постов и таксономиями фильтру передаются те же, что использовались функцией для построения SQL-запросов.
- фильтруемый массив
Фильтры выполняются друг за другом непосредственно перед завершением функции.
Отдавать предпочтение функции wp_get_object_terms
следует, если
- необходимо получить термы для нескольких постов и/или нескольких таксономий;
- необходимо получить только к.-л. один параметр термов (имена, ярлыки или идентификаторы);
- не ожидается многократных вызовов функции с одинаковыми аргументами (в ходе обработки одного http-запроса);
- кеширование результата предусмотрено вызывающей функцией;
- количество обращений к БД не имеет значения (напр., при работе в админской консоли, происходящей значительно реже простых посещений сайта).
Замечание: если выполняется запрос идентификаторов ('fields' => 'ids'
), после которого для каждого из них терм извлекается вызовом get_term
, то выгоднее будет запросить термы полностью ('fields' => 'all'
или не задан), а результат обработать вызовом wp_list_pluck($terms, 'term_id')
. В этом случае вызовы get_term
обращения к БД производить не будут.
Функция get_the_terms
более проста в применении и работает только с одним постом и одной таксономией:
Первым аргументом может быть как идентификатор, так и объект поста.
Особенностью функции является кеширование её результата, поэтому при повторных вызовах с теми же аргументами обращений к БД не потребуется. Перед возвратом массив термов прогоняется через одноимённый фильтр 'get_the_terms'
, вторым и третьим аргументами которого являются идентификатор поста и имя таксономии:
Самостоятельно к БД функция get_the_terms
не обращается — для этого она вызывает wp_get_object_terms
, являясь, таким образом, функцией-обёрткой. Вызов происходит так:
Непустой результат соответствует варианту 'fields' => 'all'
— массив объектов термов, либо экземпляр класса WP_Error
, когда таксономия неизвестна. Если подходящих термов пост не имеет, вместо пустого массива функция get_the_terms
вернёт false
.
P.S.: есть ещё одна похожая функция — wp_get_post_terms
. Она также является обёрткой над wp_get_object_terms
, но отличается от неё лишь тем, что принимает единственный идентификатор поста. В остальном она полностью идентична wp_get_object_terms
.
Резюме
- функция
wp_get_object_terms
является базовой, функцияget_the_terms
её использует; - функция
wp_get_object_terms
не кеширует свой результат, функцияget_the_terms
— кеширует; - обе функции фильтруют результат перед его возвратом:
wp_get_object_terms
— по хукам'get_object_terms'
и'wp_get_object_terms'
;get_the_terms
— по хуку'get_the_terms'
;
- если посты подходящих термов не имеют,
wp_get_object_terms
возвращает пустой массив, аget_the_terms
— значениеfalse
; - функция
wp_get_object_terms
предпочтительна- при одновременной работе со множеством постов и/или таксономий;
- при отсутствии нужды в кешировании или при самостоятельной его реализации;
- при работе только с идентификаторами, только с ярлыками или только с именами термов;
- при необходимости сортировать результат по к.-л. полю в определённом направлении;
- при необходимости фильтрации по родительскому терму (для иерархических таксономий);
- когда количество обращений к БД не имеет значения (при отображении или применении к.-л. настроек, например);
- функция
get_the_terms
предпочтительна при- работе с одним постом и одной таксономией;
- высокой вероятности повторных вызовов с теми же аргументами.
got-quadrat.ru
Примеры
Получение названия элемента таксономии по его ID
Во всех последующих примерах буду использовать элемент таксономии product_category
(тут может быть любая ваш таксономия, либо вовсе — рубрики или метки) с ID 555 (опять-таки, скорее всего вы будете передавать ID в функцию не напрямую, а через переменную и другие функции, в данном случае это просто для примера).
Выводим описание элемента таксономии, заданное в админке
Вообще, тут уже есть отдельная функция для вывода описания term_description(), но для простоты кода, можно сразу вытащить всё это добро из объекта (если вы уже воспользовались функцией get_term()
и объект имеется у вас на руках).
Выводим ссылку на страницу категории (элемента таксономии)
Как ни странно, в возвращаемом объекте содержится всё, кроме ссылки на страницу с архивами рубрики. Конечно, там есть ярлык, однако его недостаточно для правильного построения ссылки, к счастью есть отличная функция, которая позволяет выводить нормальную ссылку вне зависимости от настроек постоянных ссылок и прочей ерунды — get_term_link().
В принципе все примеры там уже приведены и всё же вот ещё один:
У функции get_term_link()
есть некоторые свои особенности, но в двух словах — в качестве параметра лучше всего передавать весь объект и не париться.
Все остальные параметры возвращаемого объекта уже перечислены в этом посту (ссылка с якорем — сразу перекинет на параметры).
Получение результата в виде ассоциативного массива
Тут на самом деле всё просто, возьмем второй пример например и переделаем его:
Результат в виде нумерованного массива
Этот вариант лично мне кажется мягко говоря не удобным, но всё же покажу и его. Опять тот же самый пример:
Как узнать необходимые индексы? Ну, можно взглянуть на массив через PHP-функцию print_r()
:
misha.blog
У меня действительно странная проблема с WordPress и функцией get_the_link () и следующая проблема с объектами, которые являются объектами, но идентифицированными как не-объектные ошибки, сами они работают.
Сначала проблема get_term_link ():
- Предлагает ли WordPress возможность найти все категории, в которых нет детей?
- Получите все термины, связанные с сообщением, и включите тех, кто не связан с get_terms и сортирует
- Почему этот код приводит к исчезновению панели администратора?
- Получить точные сообщения из категории и подкатегорий
- Получить список категорий и список таксономии из разных типов сообщений, используя идентификатор сообщения?
- Получить условия из текущего запроса WP
Если я попрошу с обычным номером и таксономией, он работает хорошо: $tax_name = 'products'; print get_term_link(13, $tax_name);
$tax_name = 'products'; print get_term_link(13, $tax_name);
Он возвращает URL-адрес, но если я делаю это так: $tax_id = (int)$navItem['id']; $tax_name = 'products'; print get_term_link($tax_id , $tax_name);
$tax_id = (int)$navItem['id']; $tax_name = 'products'; print get_term_link($tax_id , $tax_name);
Я получил сообщение об ошибке:
Обрезаемая фатальная ошибка: объект класса WP_Error не может быть преобразован в строку в /home/username/www/domainname/wp-content/themes/theme/sidebar-left.php в строке 89
Какая последняя строка была 89. (var_dump of tax_id был int (13) )
Без (int) перед navItem ['id] var_dump привел строку (2) .
Пробовал это с помощью функции get_term_by () как источника. $term = get_term_by('id', $navItem['id'], $tax_name); $tax_id = $term->term_id; var_dump($tax_id); $tax_name = 'products'; print get_term_link($tax_id , $tax_name);
Появилось новое сообщение об ошибке:
Примечание. Попытка получить свойство не-объекта в /home/username/www/domainname/wp-content/themes/theme/sidebar-left.php в строке 88
Что не так, потому что строка 88 в этом примере «$ tax_id = $ term-> term_id;»! Я могу использовать (int), но это не меняет сообщение об ошибке.
Самое смешное, переменная $ term является объектом. И это сообщение об ошибке объясняет мне, что я пытаюсь получить свойство из не-объекта. Если я преобразую этот объект в массив (get_object_vars () – function) и получаю доступ к значениям в массиве, как массив (name [key])
Появляется следующее сообщение об ошибке:
get_object_vars () ожидает, что параметр 1 является объектом, нулевая строка 86
Я попытался преобразовать их в целое, а затем в строку. Пытался использовать slug вместо ID. Но ничего не получилось. Результаты работы!
Да! Все строки показывали правильный URL-адрес ссылки!
Но я получаю сообщения об ошибках … и я не понимаю, почему. Потому что … они для меня совершенно нелогичны. Но я думаю или еще, я надеюсь, что я нелогичная часть этой проблемы, и кто-то может помочь мне решить / понять это.
И НЕТ … Мне не нравится включать / отключать сообщения об ошибках.
Solutions Collecting From Web of «get_term_link () возвращает корректно – но нелогичные сообщения об ошибках»
www.wordpressask.com