wp_get_post_terms()
— это функция WordPress, которая позволяет получить термины (теги, категории или другие таксономии), связанные с определенным постом. Она гибкая и поддерживает работу с различными типами таксономий, например, с тегами (post_tag
) и категориями (category
).
wp_get_post_terms( int $post_id, string|string[] $taxonomy = 'post_tag', array $args = array() ): array|WP_Error
Описание
Функция извлекает термины для указанного поста по его ID и заданной таксономии. В отличие от функции get_the_terms()
, результаты wp_get_post_terms()
не кэшируются, что может быть полезно для динамических запросов, но требует осторожности при использовании в частых вызовах, так как каждый раз будет происходить запрос к базе данных.
Параметры
- $post_id (int) — ID поста, для которого нужно получить термины. По умолчанию — 0.
- $taxonomy (string|array) — Слаг таксономии или массив слагов таксономий, для которых нужно получить термины. По умолчанию —
'post_tag'
. - $args (array) — Массив параметров запроса терминов. Поддерживаются те же параметры, что и в
WP_Term_Query
.
Параметры $args
- fields (string) — Определяет, какие поля терминов нужно вернуть:
'all'
— полный объект термина (по умолчанию),'ids'
— только ID терминов,'names'
— только имена терминов,'slugs'
— только слаги терминов.
Возвращаемые значения
- array — Массив объектов
WP_Term
, содержащих информацию о терминах, если запрос успешен. - WP_Error — Возвращается, если указанная таксономия не существует.
Пример 1: Получение всех терминов для пользовательской таксономии
Этот пример показывает, как получить все термины, связанные с постом в пользовательской таксономии my_taxonomy
:
$term_list = wp_get_post_terms( $post->ID, 'my_taxonomy', array( 'fields' => 'all' ) );
print_r( $term_list );
Пример 2: Получение имен терминов
Если нужно получить только имена терминов для таксономии:
$term_names = wp_get_post_terms( $post->ID, 'my_taxonomy', array( 'fields' => 'names' ) );
print_r( $term_names );
/* Выведет, например:
Array
(
[0] => Term1
[1] => Term2
)
*/
Пример 3: Получение ID терминов
Этот пример демонстрирует, как можно получить только ID терминов для таксономии:
$term_ids = wp_get_post_terms( $post->ID, 'my_taxonomy', array( 'fields' => 'ids' ) );
print_r( $term_ids );
/* Выведет:
Array
(
[0] => 1
[1] => 5
[2] => 9
)
*/
Пример 4: Получение слагов терминов
Если требуется получить только слаги терминов:
$term_slugs = wp_get_post_terms( $post->ID, 'category', array( 'fields' => 'slugs' ) );
print_r( $term_slugs );
/* Выведет:
Array
(
[0] => slug1
[1] => slug2
)
*/
Пример 5: Проверка категории поста
В следующем примере показано, как проверить, относится ли пост к определенной категории (по слагу):
$terms = wp_get_post_terms( $post->ID, 'category' );
$categories = array();
foreach ( $terms as $term ) {
$categories[] = $term->slug;
}
if ( in_array( 'specific-category', $categories ) ) {
echo 'Этот пост относится к категории specific-category';
}
Пример 6: Создание HTML-списка терминов
Этот пример показывает, как создать HTML-список терминов с активными ссылками на их архивы:
function get_post_terms_list( $post_id = 0, $taxonomy = 'category', $custom_html = ['ul', 'li', 'a'] ) {
$post_terms = wp_get_post_terms( $post_id, $taxonomy );
$custom_html[0] = isset( $custom_html[0] ) ? $custom_html[0] : 'ul';
$custom_html[1] = isset( $custom_html[1] ) ? $custom_html[1] : 'li';
$custom_html[2] = isset( $custom_html[2] ) ? $custom_html[2] : 'a';
$post_term_html = '';
$post_term_html .= '<' . $custom_html[0] . '>';
foreach ( $post_terms as $term ) {
$post_term_html .= '<' . $custom_html[1] . '><' . $custom_html[2] . ' href="' . get_term_link( $term->term_id, $taxonomy ) . '">' . $term->name . '</' . $custom_html[2] . '></' . $custom_html[1] . '>';
}
$post_term_html .= '</' . $custom_html[0] . '>';
return $post_term_html;
}
echo get_post_terms_list( get_the_ID(), 'category', ['div', 'span', 'a'] );
Заключение
Функция wp_get_post_terms()
является мощным инструментом для получения терминов поста. Она позволяет гибко управлять различными таксономиями, возвращая данные в различных форматах (полные объекты терминов, ID, имена или слаги), что делает её полезной для решения множества задач при разработке на WordPress.