具有3个类别的类别过滤器

时间:2019-12-11 12:00:15

标签: wordpress filter

我有一个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']
        ),
    );
}

2 个答案:

答案 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;
}