Как отобразить посты, относящиеся к таксономии текущего поста?

Как правильно отформулировать запрос к постам, чтобы выводились только посты, относящиеся к текущей таксономии, а не ко всем существующим?
  • 24 сентября 2024 г. 21:43
Ответы на вопрос 2
Для того чтобы отобразить посты, относящиеся к таксономии текущего поста в WordPress, можно использовать функцию `get_posts()` или WP Query. Важным моментом является получение таксономии и термина текущего поста. Предположим, что вы работаете с пользовательской таксономией (например, "category" или другой тип).

Вот шаги, которые нужно выполнить:

1. Получите ID текущего поста.
2. Получите термины (таксономии) текущего поста.
3. Выполните запрос, чтобы получить посты, относящиеся к этим терминам.

### Пример кода:

```php
// Получаем ID текущего поста
$current_post_id = get_the_ID();

// Получаем термины (таксономии) текущего поста для определённой таксономии (например, 'category')
$terms = get_the_terms($current_post_id, 'category'); // замените 'category' на вашу таксономию

if ($terms && ! is_wp_error($terms)) {
    // Получаем массив ID терминов
    $term_ids = wp_list_pluck($terms, 'term_id');

    // Создаем запрос для получения постов, относящихся к текущим терминам
    $args = array(
        'post_type' => 'post', // замените 'post' на ваш тип поста
        'post__not_in' => array($current_post_id), // исключаем текущий пост
        'tax_query' => array(
            array(
                'taxonomy' => 'category', // замените 'category' на вашу таксономию
                'field'    => 'term_id',
                'terms'    => $term_ids,
            ),
        ),
    );

    // Получаем посты
    $related_posts = new WP_Query($args);

    // Проверяем, есть ли посты
    if ($related_posts->have_posts()) {
        echo '<ul>';
        while ($related_posts->have_posts()) {
            $related_posts->the_post();
            ?>
            <li><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li>
            <?php
        }
        echo '</ul>';
        wp_reset_postdata(); // Сбрасываем данные глобального поста
    } else {
        echo 'Нет связанных постов';
    }
} else {
    echo 'Нет терминов для текущего поста';
}
```

### Пояснения к коду:

1. `get_the_ID()` — получение ID текущего поста.
2. `get_the_terms()` — получение терминов для текущего поста.
3. `wp_list_pluck()` — извлечение только ID терминов из полученного массива.
4. `WP_Query` — создание нового запроса для получения постов, относящихся к выбранной таксономии и ее терминам. 
5. В массиве `$args` определяется, какие посты нужно получить — по типу поста, по таксономии, и исключается текущий пост.

Используйте этот код в своем шаблоне WordPress, где необходимо вывести связанные посты. Не забудьте изменять `taxonomy` и `post_type` в зависимости от ваших нужд.
Используйте get_the_terms() вместо get_terms() 
https://developer.wordpress.org/reference/function...
Похожие вопросы