Intereting Posts
Защищать изменения, внесенные в тему при обновлении Отключение эскизов изображений и автоматическая регенерация Чистая установка – изменение постоянных ссылок в двадцать четыре дает 404 Проблема с моими ссылками или постоянными ссылками wp_enqueue_scripts не работает внутри короткого кода Выпадающее меню выберите виджет Пользовательские типы сообщений. Можете ли вы добавить несколько столбцов в переменную? Отображать теги из определенной категории в выбранных полях Детские страницы с одинаковым слизнем Замена строк в столбцах на переводную строку Добавление пользовательских таксономий только к выбранным пользовательским типам Обновление сообщения без экранирования амперсандов? shortcode, заставляющий the_content () возвращать пустое? использование цикла jQuery по Malsup с помощью страницы и галереи WordPress Как импортировать пользовательскую таблицу MySQL DB в тип пользовательских сообщений WordPress

Как показать список сообщений на основе таксономического термина?

У меня есть CPT с названием «football_fixture». Этот CPT имеет таксономию под названием «конкуренция», и эта таксономия имеет разные термины, laliga, eng. Я хочу показать свое сообщение следующим образом:
laliga:
Список всех опубликованных сообщений, включая вышеуказанные условия.
анг:
Список всех опубликованных сообщений, включая вышеуказанные условия.
Я использую следующие коды, но он показывает содержимое, как показано на рисунке 1. введите описание изображения здесь

Я хочу сообщение вроде изображения 2: введите описание изображения здесь image1: Вот коды, которые я использую:

<?php /** * Template Name: Fixture * Description: The template for displaying all posts and attachments */ ?> <?php get_header(); ?> <?php $paged = (get_query_var('paged')) ? get_query_var('paged') : 1; $term_id = get_queried_object()->term_id; $args = array( 'post_type' => 'football_fixture', 'paged' => $paged, ); query_posts( $args ); ?> <?php if(have_posts()): ?> <div class="<?php echo $col; ?>"> <?php while(have_posts()): ?> <?php the_post(); ?> <div id="post-<?php the_ID(); ?>" <?php post_class(); ?>> <?php $id = get_the_ID(); $date = rwmb_meta( 'pb_match_date','', $post->ID); $time = rwmb_meta( 'pb_match_time','', $post->ID ); $competition = rwmb_meta( 'pb_match_competition_cats','', $post->ID ); $team_a = get_post_meta( $post->ID, 'match_details_home_team', true ); $team_b = get_post_meta( $post->ID, 'match_details_away_team', true ); ?> <div class="fixture-item"> <div class="fixture-info clearfix"> <p class="pull-left match-date"><?php echo ($date); ?></p> <p class="pull-left match-date"> <?php $terms = get_the_terms( get_the_ID(), 'competition' ); // 'taxonomy' field doesn't store term IDs in the custom fields, instead, it sets post terms if ( !empty( $terms ) ) { $content = '<ul>'; foreach ( $terms as $term ) { $content .= sprintf( '<li><a href="%s" title="%s">%s</a></li>', get_term_link( $term, 'tax_slug' ), $term->name, $term->name ); } $content .= '</ul>'; echo $content; } ?> </p> </div> <div class="row"> <div class="col-xs-4"> <div class="media"> <div class="media-body"> <h4><?php echo $team_a; ?></h4> </div> </div> </div> <div class="col-xs-4 match-time"> <i class="fa fa-clock-o"></i> <?php echo $time; ?> </div> <div class="col-xs-4"> <div class="media"> <div class="media-body"> <h4 class="pull-right"><?php echo $team_b; ?></h4> </div> </div> </div> </div> </div> </div><!--/#post--> <?php endwhile; ?> <?php wp_reset_query(); ?> </div> <?php endif; ?> <?php get_footer(); ?> 

Solutions Collecting From Web of "Как показать список сообщений на основе таксономического термина?"

В пользовательских шаблонах сначала нужно получить все условия для своего настраиваемого типа сообщений.

Вы можете использовать get_terms для извлечения терминов в таксономии

Если вы используете wordpress до 4.5

 $terms = get_terms( 'competition' , array( 'hide_empty' => false ) ); 

ИЛИ, если вы используете wordpress до 4.5.0 или новее

 $terms = get_terms( array( 'taxonomy' => 'competition', 'hide_empty' => false, ) ); 

Следующие строковые названия:

 $termNames = array(); $count = count( $terms ); if ( $count > 0 ) { foreach ( $terms as $term ) { $termNames[] = $term->name; } } 

Следующий цикл через каждый термин и столбцы запроса для текущих терминов, а затем запустить цикл:

 foreach($termNames as $termName) : $args = array( 'post_type' => 'football_fixture', 'competition' => $termName, 'order' => 'ASC', ); query_posts( $args ); if(have_posts()): ?> <div class="<?php echo $col; ?>"> <h2><?php echo $termName; ?></h2> <?php while(have_posts()): the_post(); ?> <div id="post-<?php the_ID(); ?>" <?php post_class(); ?>> <?php $id = get_the_ID(); $date = rwmb_meta( 'pb_match_date','', $post->ID); $time = rwmb_meta( 'pb_match_time','', $post->ID ); $competition = rwmb_meta( 'pb_match_competition_cats','', $post->ID ); $team_a = get_post_meta( $post->ID, 'match_details_home_team', true ); $team_b = get_post_meta( $post->ID, 'match_details_away_team', true ); ?> <div class="fixture-item"> <div class="row"> <div class="col-xs-4"> <div class="media"> <div class="media-body"> <h4><?php echo $team_a; ?></h4> </div> </div> </div> <div class="col-xs-4 match-time"> <i class="fa fa-clock-o"></i> <?php echo $time; ?> </div> <div class="col-xs-4"> <div class="media"> <div class="media-body"> <h4 class="pull-right"><?php echo $team_b; ?></h4> </div> </div> </div> </div> </div> </div><!--/#post--> <?php endwhile; ?> <?php wp_reset_query(); ?> 

Вам нужно запросить свои сообщения, у которых есть соответствующий пользовательский термин (ы) таксономии ,

 $args = array( 'post_type' => 'football_fixture', 'tax_query' => array( array( 'taxonomy' => 'competition', 'field' => 'term_id', 'terms' => array($term_id), //put more term ids if required ), ), ); $query = new WP_Query( $args ); if($query->have_posts()){ while($query->have_posts()){ $query->the_post(); echo '<li>' . get_the_title( $query->post->ID ) . '</li>'; } // Restore original Post Data once finished, IMPORTANT wp_reset_postdata(); } в $args = array( 'post_type' => 'football_fixture', 'tax_query' => array( array( 'taxonomy' => 'competition', 'field' => 'term_id', 'terms' => array($term_id), //put more term ids if required ), ), ); $query = new WP_Query( $args ); if($query->have_posts()){ while($query->have_posts()){ $query->the_post(); echo '<li>' . get_the_title( $query->post->ID ) . '</li>'; } // Restore original Post Data once finished, IMPORTANT wp_reset_postdata(); } 

теперь вам нужно получить $term_id вашего термина, чтобы убедиться, что вышеуказанный запрос работает, в вашем примере у вас есть следующая строка вверху,

 $term_id = get_queried_object()->term_id; 

однако функция get_queried_object вернет term_id для шаблона таксономии, то, что вы пытаетесь сделать, это отобразить это в шаблоне страницы, начиная с заголовка вашей страницы,

  <?php /** * Template Name: Fixture -- this indicates that you are building a page template 

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

  • введите код термина в свой шаблон страницы или передайте его как аргумент в атрибуте URL
  • создайте шаблон архива таксономии , чтобы вы могли использовать свои пользовательские термины таксономии прямо в своем меню, пользователи нажимают ссылку на термин, а WordPress будет анализировать идентификатор термина на вашей странице.

Соединяя все это вместе,

Я бы порекомендовал второй вариант. Создайте новый файл taxonomy-competition.php и сохраните его в папке с корневой темой или дочерней темой со следующим содержимым,

 <?php /** * Taxonomy 'competition' archive template */ get_header(); $term_id = get_queried_object()->term_id; $args = array( 'post_type' => 'football_fixture', 'tax_query' => array( array( 'taxonomy' => 'competition', 'field' => 'term_id', 'terms' => array($term_id), //put more term ids if required ), ), ); $query = new WP_Query( $args ); echo '<ul>'; if($query->have_posts()){ while($query->have_posts()){ $query->the_post(); echo '<li>' . get_the_title( $query->post->ID ) . '</li>'; } // Restore original Post Data once finished, IMPORTANT wp_reset_postdata(); } echo '</ul>'; get_footer(); в <?php /** * Taxonomy 'competition' archive template */ get_header(); $term_id = get_queried_object()->term_id; $args = array( 'post_type' => 'football_fixture', 'tax_query' => array( array( 'taxonomy' => 'competition', 'field' => 'term_id', 'terms' => array($term_id), //put more term ids if required ), ), ); $query = new WP_Query( $args ); echo '<ul>'; if($query->have_posts()){ while($query->have_posts()){ $query->the_post(); echo '<li>' . get_the_title( $query->post->ID ) . '</li>'; } // Restore original Post Data once finished, IMPORTANT wp_reset_postdata(); } echo '</ul>'; get_footer(); 

Это отобразит заголовки списков, которые организованы в заданный срок.

Чтобы использовать это на переднем конце, добавьте пользовательские условия competition таксономии, которые вы хотите отобразить в навигационном меню на панели управления . Если вы не можете увидеть свой вариант меню таксономии, убедитесь, что он выбран на вкладке «Параметры экрана» в верхней части страницы панели мониторинга.