Я думаю, что есть несколько способов добиться этого. Я предлагаю создать собственный запрос на странице архива терминов.
Сначала посмотрите сюда: https://developer.wordpress.org/themes/basics/template-hierarchy/
В Wordpress вы можете создать свой собственный category-{term}.php
страница, которая в вашем случае будет называться category-league-a.php
. Сделайте копию вашей категории. php в папке вашей темы или используйте пример из тем WordPress (например, двадцать девять) и скопируйте код.
Внутри вашей новой страницы архива (WP распознает это автоматически) убираем пост l oop. Теперь вы создаете свой собственный запрос сообщения со своим термином таксономии.
Посмотрите на: https://developer.wordpress.org/reference/classes/wp_query/
Вы получите все сообщения с определенным термином категории и сезонный термин.
$args = array(
'post_type' => 'post',
'tax_query' => array(
'relation' => 'AND',
array(
'taxonomy' => 'category',
'field' => 'slug',
'terms' => 'league-a',
),
array(
'taxonomy' => 'seasons',
'field' => 'slug',
'terms' => '2019-2020',
),
),
);
$current_season_query = new WP_Query( $args );
Теперь вы можете l oop через свои сообщения:
<?php
// The Loop
if ( $current_season_query ->have_posts() ) {
while ( $current_season_query ->have_posts() ) {
$current_season_query ->the_post();
// echo get_the_title().'<br>'; or whatever
}
/* Restore original Post Data */
wp_reset_postdata();
} else {
// no posts found
}
?>
Важно, чтобы вы сбросили данные сообщения на исходный запрос, как это делается в коде выше. В противном случае вы можете вступить в конфликт с другими запросами на вашей странице.
Итак, вы определили шаблон страницы для термина вашей категории. Вы создали собственный запрос, чтобы отображать только сообщения, которые дополнительно имеют термин таксономии текущего сезона.
Надеюсь, это поможет!
РЕДАКТИРОВАТЬ: использование только одного шаблона страницы категории для всех термины
Вы также можете использовать переменные в вашем tax_query 'category'
и 'terms'
.
'taxonomy' => 'category',
'field' => 'slug',
'terms' => $current_category,
и
'taxonomy' => 'seasons',
'field' => 'slug',
'terms' => $current_season,
В $current_category
вы сохраняете slug или ваш текущий термин категории просмотра и в $current_season
slug вашего термина таксономии.
Другое решение: проверьте, есть ли параметр в строке url
Но теперь Мне приходит в голову, что было бы еще одним решением искать параметр в URL-адресе и изменять запрос только в том случае, если нет набора параметров. Таким образом, вам понадобится всего лишь один category.php
, который вам нужно настроить немного:
1. Получите параметр из URL
global $wp;
// Get current page url
$current_url = home_url( add_query_arg( array(), $wp->request ) );
// Parse the URL to get array which contains its components
$url_components = parse_url($current_url);
// parse_str() function to parse the string passed via URL
parse_str($url_components['query'], $params);
2. Убедитесь, что параметр не установлен, и используйте другой WP_Query в этом случае
if(!isset($params['seasons'])) {
$current_season_query = new WP_Query( $args );
// your code
}
else {
// unchanged WP_Query, standard post loop in archive file
}
Перед if
вы определяете новый WP_query, как описано в первом блоке кода этого ответа. В else
вы помещаете стандартное сообщение l oop.
Таким образом, вам нужно только внести изменения в свой category.php
и не создавать файлы для всех терминов категории.