Как вывести типы записей по определенной таксономии?

Ссылка скопирована
PHP
1 ответ

Хоть убейте не пойму куда тулить
есть вот такой код, который выводит лист типов записей

<?php  // Запрашиваем продукты $query = new WP_Query( [   'post_type'      => 'news',   'posts_per_page' => 9,   'paged'          => get_query_var( 'page' ), ] );  // Обрабатываем полученные в запросе продукты, если они есть if ( $query->have_posts() ) {    while ( $query->have_posts() ) {   $query->the_post();?>    <div class="news-item">     <p><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></p>     <p><?php $content = get_the_content(); echo mb_strimwidth($content, 0, 120, '.');?></p>   </div>    <?php }    wp_reset_postdata(); } ?>

<?php // Запрашиваем продукты $query = new WP_Query( [ 'post_type' => 'news', 'posts_per_page' => 9, 'paged' => get_query_var( 'page' ), ] ); // Обрабатываем полученные в запросе продукты, если они есть if ( $query->have_posts() ) { while ( $query->have_posts() ) { $query->the_post();?> <div class="news-item"> <p><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></p> <p><?php $content = get_the_content(); echo mb_strimwidth($content, 0, 120, '.');?></p> </div> <?php } wp_reset_postdata(); } ?>

типы записей делятся еще на таксономии news
допустим
naklad(чешский язык) и грузовые(на русском) то есть это одна таксономия только на разных языках

как мне указать эти 2 таксы, что бы по ним выводились записи а не все
я так понимаю это где то тут делается

$query = new WP_Query( [   'post_type'      => 'news',   'posts_per_page' => 9,   'paged'          => get_query_var( 'page' ), ] );

$query = new WP_Query( [ 'post_type' => 'news', 'posts_per_page' => 9, 'paged' => get_query_var( 'page' ), ] );

через get_terms()
только как его правильно втулить?
Подскажите пожалуйста

Дополнительно

Ответы:

вам нужно добавть таксономии в ваш цыкл:

'tax_query' => array(         array(             'taxonomy' => 'название_таксономии',             'field'    => 'slug',             'terms'    => array( 'значение_термина_1',  'значение_термина_2' ),        ), )

'tax_query' => array( array( 'taxonomy' => 'название_таксономии', 'field' => 'slug', 'terms' => array( 'значение_термина_1', 'значение_термина_2' ), ), )

  • $query = new WP_Query( [   'post_type'      => 'news',   'posts_per_page' => 9,   'paged'          => get_query_var( 'page' ),  'tax_query' => array(         array(             'taxonomy' => 'название_таксономии',             'field'    => 'slug',             'terms'    => array( 'значение_термина_1',  'значение_термина_2' ),        ), )  ] );

    $query = new WP_Query( [ 'post_type' => 'news', 'posts_per_page' => 9, 'paged' => get_query_var( 'page' ), 'tax_query' => array( array( 'taxonomy' => 'название_таксономии', 'field' => 'slug', 'terms' => array( 'значение_термина_1', 'значение_термина_2' ), ), ) ] );

    т.е так? я в php ни бумбум, вот и бьюсь уже весь вечер как это сделать

Нужно решить такую задачу?

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

Заказать помощь
Лучший ответ
1
Mobile-редакция Ответ

В этом месте нужен не get_terms, а фильтр запроса через tax_query. get_terms используют, когда надо получить список рубрик/терминов для табов или меню. А чтобы сам WP_Query вернул записи только из нужных терминов, в аргументы запроса добавляется tax_query с названием таксономии и slug терминов. В вашем случае тип записи, судя по коду, news. Название таксономии может быть news, news_category или другое - его нужно взять из register_taxonomy либо из админки/кода темы.

$paged = max(1, get_query_var('paged'));
 
$query = new WP_Query([
    'post_type' => 'news',
    'post_status' => 'publish',
    'posts_per_page' => 9,
    'paged' => $paged,
    'tax_query' => [
        [
            'taxonomy' => 'news_category',
            'field' => 'slug',
            'terms' => ['naklad', 'gruzovye'],
            'operator' => 'IN',
        ],
    ],
]);

$paged = max(1, get_query_var('paged')); $query = new WP_Query([ 'post_type' => 'news', 'post_status' => 'publish', 'posts_per_page' => 9, 'paged' => $paged, 'tax_query' => [ [ 'taxonomy' => 'news_category', 'field' => 'slug', 'terms' => ['naklad', 'gruzovye'], 'operator' => 'IN', ], ], ]);

Дальше цикл можно оставить прежним, только вывод лучше экранировать и после своего запроса обязательно сбрасывать глобальный post:

if ($query->have_posts()) {
    while ($query->have_posts()) {
        $query->the_post();
        echo '<div class="news-item">';
        echo '<p><a href="' . esc_url(get_permalink()) . '">' . esc_html(get_the_title()) . '</a></p>';
        echo '<p>' . esc_html(wp_trim_words(get_the_content(), 22, '...')) . '</p>';
        echo '</div>';
    }
    wp_reset_postdata();
}

if ($query->have_posts()) { while ($query->have_posts()) { $query->the_post(); echo '<div class="news-item">'; echo '<p><a href="' . esc_url(get_permalink()) . '">' . esc_html(get_the_title()) . '</a></p>'; echo '<p>' . esc_html(wp_trim_words(get_the_content(), 22, '...')) . '</p>'; echo '</div>'; } wp_reset_postdata(); }

Если нужно выводить вкладки, тогда get_terms пригодится отдельно: получаете термины таксономии, рисуете кнопки, а выбранный slug передаете в terms. Не путайте три сущности: post_type - это news, taxonomy - контейнер категорий, terms - конкретные значения вроде naklad и gruzovye. Если указать не тот slug таксономии, запрос просто вернет пустой список.

Другие ответы (0)

Пока нет других ответов. Будьте первым, кто поможет автору.

Ответить на вопрос

комментарий

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

Вам также может быть интересно