smsc banner 468x60smsc banner 728x90smsc banner 930x180skillbox banner 468x60skillbox banner 728x90skillbox banner 930x180etxt banner 468x60etxt banner 728x90etxt banner 930x180

Как получить термины get_terms() у которых существуют посты с конкретным post_type?

В WordPress, чтобы получить термины с помощью get_terms() и фильтровать их по типу записей (post_type), вам нужно использовать дополнительный SQL-запрос, так как сам get_terms() напрямую не предоставляет опции для фильтрации по типу записей.

Однако вы можете использовать параметр meta_query или работать через связь с записями. Вот пошаговый способ:

Пример получения терминов, у которых есть записи определённого post_type

  1. Шаг 1: Получение ID записей определённого типа Сначала получаем ID записей, относящихся к нужному типу.
  2. Шаг 2: Получение терминов для этих записей После получения ID записей можно фильтровать термины.

Вот пример кода:

function get_terms_with_post_type($taxonomy, $post_type) {
    global $wpdb;

    // Запрос для получения терминов, связанных с постами определённого типа
    $query = $wpdb->prepare("
        SELECT t.term_id 
        FROM {$wpdb->terms} AS t
        INNER JOIN {$wpdb->term_taxonomy} AS tt ON t.term_id = tt.term_id
        INNER JOIN {$wpdb->term_relationships} AS tr ON tt.term_taxonomy_id = tr.term_taxonomy_id
        INNER JOIN {$wpdb->posts} AS p ON p.ID = tr.object_id
        WHERE tt.taxonomy = %s
        AND p.post_type = %s
        AND p.post_status = 'publish'
        GROUP BY t.term_id
    ", $taxonomy, $post_type);

    // Получение ID терминов
    $term_ids = $wpdb->get_col($query);

    // Получение объектов терминов
    if (!empty($term_ids)) {
        return get_terms([
            'taxonomy' => $taxonomy,
            'include' => $term_ids,
        ]);
    }

    return [];
}

// Использование функции
$terms = get_terms_with_post_type('category', 'custom_post_type');

foreach ($terms as $term) {
    echo $term->name . '<br>';
}

Объяснение кода:

  1. $wpdb->prepare: Используется для безопасного выполнения SQL-запросов с параметрами.
  2. SQL-запрос:
    • Соединяет таблицы терминов, таксономий, отношений терминов и постов.
    • Фильтрует посты по статусу (publish) и post_type.
    • Группирует результаты по терминам, чтобы не было дубликатов.
  3. get_terms(): Получает термины по списку ID, найденных в SQL-запросе.

Альтернативный способ: WP_Query + get_terms

Если SQL-запросы нежелательны, можно использовать WP_Query для фильтрации записей по post_type, а затем получить термины из записей. Это менее эффективно:

function get_terms_with_wp_query($taxonomy, $post_type) {
    $query = new WP_Query([
        'post_type' => $post_type,
        'post_status' => 'publish',
        'posts_per_page' => -1,
        'fields' => 'ids', // Возвращаем только ID
    ]);

    if ($query->have_posts()) {
        $post_ids = $query->posts;

        return wp_get_object_terms($post_ids, $taxonomy);
    }

    return [];
}

// Использование
$terms = get_terms_with_wp_query('category', 'custom_post_type');
foreach ($terms as $term) {
    echo $term->name . '<br>';
}

Этот метод не требует прямых SQL-запросов, но может быть медленнее, если у вас много записей.

Оба подхода дадут вам термины, связанные с записями конкретного типа.

skillbox banner 480x320skillbox banner 728x90skillbox banner 120x600kwork banner 480x320kwork banner 728x90kwork banner 120x600etxt banner 480x320etxt banner 728x90etxt banner 120x600

Насколько публикация полезна?

Нажмите на звезду, чтобы оценить!

Средняя оценка 5 / 5. Количество оценок: 1

Оценок пока нет. Поставьте оценку первым.

Похожие посты

Как из стандартного типа записи post удалить «uncategorized» из ссылки в WordPress?

При создании записей в WordPress без указания категории по умолчанию им присваивается категория «Без рубрики» («Uncategorized»). Это приводит к появлению лишней части ссылки, например: https://example.com/bez-rubriki/nazvanie-zapisi. Если вы хотите убрать «bez-rubriki» из URL, то вам потребуется немного модифицировать настройки и добавить пользовательский код. В этой статье я покажу, как это сделать и избежать ошибок 404. Шаг…
Подробнее

Как на WordPress сделать архивную страницу со всеми авторами и структуру ссылок домен/authors/author

Чтобы сделать архивную страницу в WordPress, которая перечисляет всех авторов и предоставляет доступ к их страницам профилей через структуру ссылок вида домен/authors/author, нужно выполнить следующие шаги: 1. Создание пользовательской страницы для архива авторов Создайте файл шаблона: В вашей активной теме создайте файл page-authors.php. Это будет специальная страница, отображающая список всех авторов. Добавьте код для вывода…
Подробнее

Как сделать функцию для редиректа со старых ссылок сайта на новые в WordPress?

Для создания функции редиректа в WordPress со старых ссылок на новые, можно использовать файл .htaccess или написать специальный код в functions.php темы. Рассмотрим оба варианта: 1. Редирект через .htaccess Если вам нужно выполнить редиректы для множества старых URL, проще всего это сделать через файл .htaccess в корне вашего сайта. Для этого откройте или создайте файл…
Подробнее