【发布时间】:2019-01-30 19:57:43
【问题描述】:
我有一个page of cruises,我可以在其中按 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' );
我对这些进行了很多研究,并尝试了很多不同的方法,例如使用 OR 和 AND 代替 IN,诸如此类。 我想我真的很接近解决它,但有些东西我没有看到。我距离成为 PHP 专家还很遥远,所以我会尽力回答您的所有问题。
谢谢!
【问题讨论】:
标签: php wordpress custom-taxonomy