Get term

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

 /**   * 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; } }

Выводим отсортированные по имени рубрики в виде выпадающего списка

Приведу сразу же несложный пример с кучей комментов, иначе, как мне кажется, если я начну с документации функции, то некоторым будет непонятно, как её использовать.

Вот что у меня получилось в результате выполнения этого кода на тестовом сайте:

Слева — сам список (открытый), а справа его HTML-код.


(строка|массив) таксономия или массив таксономий, элементы которых нам нужны.

(строка|массив) параметры по типу, как в WP_Query, их тоже можно записать и в виде массива и в виде строки.

Параметры массива $args

(целое число) количество элементов, которые нужно вывести, по умолчанию выводятся все.

(целое число) сколько элементов нужно пропустить, то есть если offset=2, то начинаем с третьего.

(целое число|строка|массив) укажите ID элементов, которые нужно вывести, можно указать число, числа через запятую в виде строки или одномерный массив чисел, например так:

или так:

или даже так:

Если вы хотите исключить какие-то элементы, не пытайтесь использовать минус перед числом, просто смотрите следующий параметр.

(целое число|строка|массив) укажите ID элементов, которые нужно исключить.

(строка) сортировать по:

  • id — по ID элементов (по умолчанию),
  • count — по количеству постов,
  • name — по имени,
  • slug — по ярлыку,
  • term_group — по значениям колонки term_group в таблице wp_terms базы данных,
  • none — без сортировки;

(строка) порядок сортировки.

  • ASC — по возрастанию (по умолчанию),
  • DESC — по убыванию;

(логическое) нужно ли добавлять в результат также и пустые (без постов) рубрики/метки/элементы таксономий:

  • true — не нужно (по умолчанию),
  • false — нужно;

(строка) в каком виде выводить результат:

  • all — массив объектов элементов таксономий (по умолчанию), после print_r() он будет выглядеть так:
  • ids — массив составленный из ID элементов, вот как он будет выглядеть, если пропустить его через функцию print_r():
  • names — возвращает массив наименований, например:
  • count — (с версии 3.2) возвращает количество всех элементов таксономии, вне зависимости от других параметров. Для этих целей вы также можете использовать wp_count_terms().
  • id=>parent — ассоциативный массив состоящих из ID элементов и ID их родителей, если родительского элемента не существует, то возвращается 0, пример:

(строка) возвращает элементы, ярлыки которых совпадают с заданным значением.

(логическое) нужно ли включить в результат родительские элементы, даже если в них нет постов?

  • 1 — нужно (по умолчанию),
  • 0 — не нужно;

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

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

(логическое) влияет только на числовые значения количества постов в родительских элементах.

  • 1 — количество постов родительского элемента суммируется с количеством постов дочерних элементов,
  • 0 — не суммируется (по умолчанию);


  • all — вывести все элементы, вне зависимости от параметров offset, hide_empty, child_of (по умолчанию — пустая строка)

(целое число) вывести все элементы таксономии, которые являются дочерними для элемента с указанным ID вне зависимости от уровня вложенности.

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

(строка) (с версии 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-и рубрик, отсортированных по количеству записей

В этом примере параметры функции задаются в виде массива:

Тот же самый пример, но только с заданными в виде строки параметрами:

Эти функции похожи:

  • 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 предпочтительна при
    • работе с одним постом и одной таксономией;
    • высокой вероятности повторных вызовов с теми же аргументами.


Получение названия элемента таксономии по его ID

Во всех последующих примерах буду использовать элемент таксономии product_category (тут может быть любая ваш таксономия, либо вовсе — рубрики или метки) с ID 555 (опять-таки, скорее всего вы будете передавать ID в функцию не напрямую, а через переменную и другие функции, в данном случае это просто для примера).

Выводим описание элемента таксономии, заданное в админке

Вообще, тут уже есть отдельная функция для вывода описания term_description(), но для простоты кода, можно сразу вытащить всё это добро из объекта (если вы уже воспользовались функцией get_term() и объект имеется у вас на руках).

Выводим ссылку на страницу категории (элемента таксономии)

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

В принципе все примеры там уже приведены и всё же вот ещё один:

У функции get_term_link() есть некоторые свои особенности, но в двух словах — в качестве параметра лучше всего передавать весь объект и не париться.

Все остальные параметры возвращаемого объекта уже перечислены в этом посту (ссылка с якорем — сразу перекинет на параметры).

Получение результата в виде ассоциативного массива

Тут на самом деле всё просто, возьмем второй пример например и переделаем его:

Результат в виде нумерованного массива

Этот вариант лично мне кажется мягко говоря не удобным, но всё же покажу и его. Опять тот же самый пример:

Как узнать необходимые индексы? Ну, можно взглянуть на массив через PHP-функцию print_r():

У меня действительно странная проблема с 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 () возвращает корректно – но нелогичные сообщения об ошибках»

You May Also Like

About the Author: admind

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.