我有一个WordPress查询并按类别过滤复选框:
if( isset( $_POST['vertragsart'] ) && isset ($_POST['zeitmodell']) ) {
$args['tax_query'][] = array(
array(
'taxonomy' => 'category',
'field' => 'id',
'terms' => $_POST['vertragsart']
),
array(
'taxonomy' => 'category',
'field' => 'id',
'terms' => $_POST['zeitmodell']
),
);
} elseif( !isset( $_POST['vertragsart'] ) && isset ($_POST['zeitmodell']) ) {
$args['tax_query'][] = array(
'taxonomy' => 'category',
'field' => 'id',
'terms' => $_POST['zeitmodell']
);
} elseif( isset( $_POST['vertragsart'] ) && !isset ($_POST['zeitmodell']) ) {
$args['tax_query'][] = array(
'taxonomy' => 'category',
'field' => 'id',
'terms' => $_POST['vertragsart']
);
}
这可以正常工作。在页面加载时,他向我显示了所有结果,用户可以通过复选框限制结果。
现在,我想添加第三类过滤器-任何想法该怎么做?我认为它将比if / else更为复杂。
我尝试过这个,但是当涉及到第三个过滤器时,它只显示所有内容:
if( isset( $_POST['vertragsart'] ) && !isset ($_POST['zeitmodell']) && isset ($_POST['fachbereich']) ) {
$args['tax_query'][] = array(
'taxonomy' => 'category',
'field' => 'id',
'terms' => $_POST['vertragsart']
);
$args['tax_query'][] = array(
'taxonomy' => 'category',
'field' => 'id',
'terms' => $_POST['fachbereich']
);
} elseif( isset( $_POST['vertragsart'] ) && isset ($_POST['zeitmodell']) && !isset ($_POST['fachbereich']) ) {
$args['tax_query'][] = array(
'taxonomy' => 'category',
'field' => 'id',
'terms' => $_POST['vertragsart']
);
$args['tax_query'][] = array(
'taxonomy' => 'category',
'field' => 'id',
'terms' => $_POST['zeitmodell']
);
} elseif( isset( $_POST['vertragsart'] ) && !isset ($_POST['zeitmodell']) && isset ($_POST['fachbereich']) ) {
$args['tax_query'][] = array(
'taxonomy' => 'category',
'field' => 'id',
'terms' => $_POST['vertragsart']
);
$args['tax_query'][] = array(
'taxonomy' => 'category',
'field' => 'id',
'terms' => $_POST['fachbereich']
);
} elseif( !isset( $_POST['vertragsart'] ) && !isset ($_POST['zeitmodell']) && isset ($_POST['fachbereich']) ) {
$args['tax_query'][] = array(
'taxonomy' => 'category',
'field' => 'id',
'terms' => $_POST['fachbereich']
);
} elseif( isset( $_POST['vertragsart'] ) && !isset ($_POST['zeitmodell']) && !isset ($_POST['fachbereich']) ) {
$args['tax_query'][] = array(
'taxonomy' => 'category',
'field' => 'id',
'terms' => $_POST['vertragsart']
);
} elseif( !isset( $_POST['vertragsart'] ) && isset ($_POST['zeitmodell']) && !isset ($_POST['fachbereich']) ) {
$args['tax_query'][] = array(
'taxonomy' => 'category',
'field' => 'id',
'terms' => $_POST['zeitmodell']
);
// this won't work
} elseif( isset( $_POST['vertragsart'] ) && isset ($_POST['zeitmodell']) && isset ($_POST['fachbereich']) ) {
$args['tax_query'][] = array(
array(
'taxonomy' => 'category',
'field' => 'id',
'terms' => $_POST['vertragsart']
),
array(
'taxonomy' => 'category',
'field' => 'id',
'terms' => $_POST['zeitmodell']
),
array(
'taxonomy' => 'category',
'field' => 'id',
'terms' => $_POST['fachbereich']
),
);
}
答案 0 :(得分:1)
一种方法是通过包含所有可能的组合,例如:
if( isset( $_POST['vertragsart'] ) && isset ($_POST['zeitmodell']) && isset ($_POST['third_category']) ) {
$args['tax_query'][] = array(
array(
'taxonomy' => 'category',
'field' => 'id',
'terms' => $_POST['vertragsart']
),
array(
'taxonomy' => 'category',
'field' => 'id',
'terms' => $_POST['zeitmodell']
),
array(
'taxonomy' => 'category',
'field' => 'id',
'terms' => $_POST['third_category']
),
);
} elseif( isset( $_POST['vertragsart'] ) && isset ($_POST['zeitmodell']) && !isset ($_POST['third_category']) ) {
$args['tax_query'][] = array(
array(
'taxonomy' => 'category',
'field' => 'id',
'terms' => $_POST['vertragsart']
),
array(
'taxonomy' => 'category',
'field' => 'id',
'terms' => $_POST['zeitmodell']
),
);
} elseif( isset( $_POST['vertragsart'] ) && !isset ($_POST['zeitmodell']) && isset ($_POST['third_category']) ) {
$args['tax_query'][] = array(
array(
'taxonomy' => 'category',
'field' => 'id',
'terms' => $_POST['vertragsart']
),
array(
'taxonomy' => 'category',
'field' => 'id',
'terms' => $_POST['third_category']
),
);
} elseif( !isset( $_POST['vertragsart'] ) && isset ($_POST['zeitmodell']) && isset ($_POST['third_category']) ) {
$args['tax_query'][] = array(
array(
'taxonomy' => 'category',
'field' => 'id',
'terms' => $_POST['zeitmodell']
),
array(
'taxonomy' => 'category',
'field' => 'id',
'terms' => $_POST['third_category']
),
);
} elseif( isset( $_POST['vertragsart'] ) && !isset ($_POST['zeitmodell']) && !isset ($_POST['third_category']) ) {
$args['tax_query'][] = array(
'taxonomy' => 'category',
'field' => 'id',
'terms' => $_POST['vertragsart']
);
} elseif( !isset( $_POST['vertragsart'] ) && isset ($_POST['zeitmodell']) && !isset ($_POST['third_category']) ) {
$args['tax_query'][] = array(
'taxonomy' => 'category',
'field' => 'id',
'terms' => $_POST['zeitmodell']
);
} elseif( !isset( $_POST['vertragsart'] ) && !isset ($_POST['zeitmodell']) && isset ($_POST['third_category']) ) {
$args['tax_query'][] = array(
'taxonomy' => 'category',
'field' => 'id',
'terms' => $_POST['third_category']
);
}
我必须承认,这是相当重复的编码。如果它保持3类,则上面的方法可以正常工作。否则,您可能会寻找一种更动态的方法。
答案 1 :(得分:1)
似乎重复的代码,我会推荐这样的东西:
select * from students where (CurrentTime - timeOfAdmission) > 3600000.
编辑:
更好的代码,可能适用于2种以上的代码:
// first, set categories
$categories = array('vertragsart', 'zeitmodell', 'third_code');
foreach ($categories as $cat) {
// if category is checked
if (isset($_POST[$cat]) {
// if $cats_array is assigned already, add category array, else, create $cats_array
if (isset($cats_array)) {
array_push(
$cats_array, array(
'taxonomy' => 'category',
'field' => 'id',
'terms' => $_POST[$cat]
)
);
} else {
$cats_array = array(
array(
'taxonomy' => 'category',
'field' => 'id',
'terms' => $_POST[$cat]
)
);
}
}
}
if (isset($cats_array) && is_array($cats_array)) {
$args['tax_query'][] = $cats_array;
}