У меня есть страница круизов , где я могу фильтровать по 2 разным таксономиям (извините, страница на испанском, английская версия не полная).Проблема в том, что я не могу сделать так, чтобы фильтр работал постоянно.Например, если я заставлю двойной фильтр работать, отфильтруйте одну таксономию, но это не так.И если простой фильтр работает, то двойной фильтр не работает.
Это текущий код, который отлично работает для фильтрации по 2 таксономиям, но это не так, если я фильтрую, используя только одну.
function belmondo_modify_cruise_archive_query( $query ) {
if( is_archive() && is_post_type_archive('cruise') && $query->is_main_query() && isset($_GET['ct']) && isset($_GET['co'])) {
$taxquery = array(
'relation' => 'AND',
array(
'taxonomy' => 'cruise_type',
'field' => 'slug',
'terms' => array($_GET['ct']),
'operator'=> 'AND',
),
array(
'taxonomy' => 'cruise_country',
'field' => 'slug',
'terms' => array($_GET['co']),
'operator'=> 'AND',
),
);
$query->set( 'tax_query', $taxquery );
}
}
add_filter( 'pre_get_posts', 'belmondo_modify_cruise_archive_query' );
И до этого у меня был этот другой код, который работал отлично, но не по умолчанию.По умолчанию на странице отображаются все сообщения, и с этим кодом команда «Показать все» показала 0 результатов, но ресто отлично работает.
function belmondo_modify_cruise_archive_query( $query ) {
if( is_archive() && is_post_type_archive('cruise') && $query->is_main_query() && isset($_GET['ct']) && isset($_GET['co'])) {
$taxquery = array(
'relation' => 'AND',
array(
'taxonomy' => 'cruise_type',
'field' => 'slug',
'terms' => array($_GET['ct']),
'operator'=> 'AND',
),
array(
'taxonomy' => 'cruise_country',
'field' => 'slug',
'terms' => array($_GET['co']),
'operator'=> 'IN',
),
);
$query->set( 'tax_query', $taxquery );
} elseif( is_archive() && is_post_type_archive('cruise') && $query->is_main_query() ) {
$taxquery = array(
'relation' => 'OR',
array(
'taxonomy' => 'cruise_type',
'field' => 'slug',
'terms' => array($_GET['ct']),
'operator'=> 'IN',
),
array(
'taxonomy' => 'cruise_country',
'field' => 'slug',
'terms' => array($_GET['co']),
'operator'=> 'IN',
),
);
$query->set( 'tax_query', $taxquery );
}
}
add_filter( 'pre_get_posts', 'belmondo_modify_cruise_archive_query' );
Я много об этом изучал и много пробовалразличных вещей, таких как использование ИЛИ и И вместо IN, и тому подобное.Я думаю, что я действительно близок к решению этого, но есть кое-что, что я не вижу.Я далеко, чтобы быть экспертом по PHP, поэтому я постараюсь ответить на все ваши вопросы.
Спасибо!