Функция get_objects_in_term()
используется для получения идентификаторов объектов (чаще всего записей), которые принадлежат указанным терминам в заданной таксономии. Эта функция полезна, когда требуется получить все объекты, связанные с определённым термином или набором терминов в WordPress.
get_objects_in_term( int|int[] $term_ids, string|string[] $taxonomies, array|string $args = array() ): string[]|WP_Error
Описание параметров
- $term_ids (обязательный)
ID термина или массив с ID терминов, по которым нужно получить объекты. - $taxonomies (обязательный)
Строка с названием таксономии или массив строк с названиями таксономий. Если указанная таксономия не существует, функция вернет ошибкуWP_Error
. - $args (необязательный)
Дополнительные параметры запроса. На данный момент можно указать только параметрorder
, который задает порядок возвращаемых ID:'ASC'
— по возрастанию (по умолчанию).'DESC'
— по убыванию.
Возвращаемое значение
Функция возвращает массив строк с ID объектов, если запрос успешен, либо объект WP_Error
в случае ошибки (например, если таксономия не существует).
Пример 1: Получение ID записей из определенной рубрики
В этом примере мы получаем ID всех записей, относящихся к рубрике с ID 42
в таксономии category
:
$post_ids = get_objects_in_term( 42, 'category' );
print_r( $post_ids );
/* Результат:
Array (
[0] => 101
[1] => 202
[2] => 303
)
*/
Пример 2: Получение ID объектов из нескольких таксономий
Мы можем указать несколько терминов и несколько таксономий для получения ID объектов. В этом примере мы используем элемент 42
из таксономии category
и элемент 15
из таксономии post_tag
:
$objects = get_objects_in_term( array(42, 15), array('category', 'post_tag') );
print_r( $objects );
/* Результат:
Array (
[0] => 101
[1] => 202
[2] => 303
[3] => 404
[4] => 505
)
*/
Пример 3: Обработка ошибки при отсутствии таксономии
Важно проверять, что таксономия существует. Если она не найдена, функция вернет объект ошибки WP_Error
. В следующем примере показано, как можно обработать эту ошибку:
$objects = get_objects_in_term( array(42, 15), array('category', 'nonexistent_taxonomy') );
if ( is_wp_error($objects) ) {
echo 'Ошибка: таксономия указана неверно';
} elseif ( empty($objects) ) {
echo 'Нет найденных объектов';
} else {
echo 'Найденные объекты:';
print_r( $objects );
}
/* Результат:
Ошибка: таксономия указана неверно
*/
Пример 4: Получение всех меток записей из рубрики
В следующем примере мы получаем все теги (метки) записей, которые относятся к указанной рубрике. Это позволяет собрать метки для постов в определенной категории:
if ( is_category() ) {
$term_id = get_queried_object_id(); // ID текущей рубрики
// Получаем ID всех вложенных рубрик
$term_ids = get_term_children( $term_id, 'category' );
array_push( $term_ids, $term_id );
// Получаем ID записей в рубриках
$post_ids = get_objects_in_term( $term_ids, 'category' );
if ( $post_ids && ! is_wp_error($post_ids) ) {
$tags = wp_get_object_terms( $post_ids, 'post_tag' );
if ( ! empty($tags) && ! is_wp_error($tags) ) {
$list = array();
foreach ( $tags as $tag ) {
$list[] = '<a href="'. get_term_link( $tag, 'post_tag' ) .'">'. esc_html( $tag->name ) .'</a>';
}
echo '<ul><li>' . implode( '</li><li>', $list ) . '</li></ul>';
}
}
}
Заключение
Функция get_objects_in_term()
является мощным инструментом для получения списка объектов (чаще всего записей) на основе термина и таксономии. Она позволяет гибко работать с терминами и таксономиями, получать записи по различным критериям и сортировать их по ID.