在TAX_QUERY中使用多个术语

时间:2015-05-12 作者:Rellston

我正在尝试建立一个房地产搜索网站。

首先,这是搜索表(抱歉,德语课和其他东西太多了):

<form  method="post" action="<?php bloginfo(\'url\');?>/immobilien-suche/">
<?php
$taxonomiesImmo = get_object_taxonomies(\'immobilien\');
$termsImmoBundesland = get_terms($taxonomiesImmo[0]);
?>
    <fieldset name="bundeslaender">
        <input type="checkbox" value="alleBundeslaender">alle Bundesl&auml;nder</input>
        <?php foreach ($termsImmoBundesland as $termImmoBundesland) { ?>
            <label><input type="checkbox" value="<?php echo $termImmoBundesland->slug; ?>" name="checkedBundeslaender[]"><?php echo $termImmoBundesland->name; ?></label>
        <?php } ?>
    </fieldset>
    <input type="submit"/>  
</form>
然后,在我的搜索结果页面模板中,我将这些多个复选框结果(数组)内爆,以获得一个干净的列表,如函数引用中所述:

\'terms\'    => array( \'action\', \'comedy\' ), // wordpress codex
我的内爆

if ( count($_POST[\'checkedBundeslaender\']) > 1 ) {
    $checkedBundeslaenderList = "\'".implode("\', \'", $_POST[\'checkedBundeslaender\'])."\'";
    // string form: \'term1\', \'term2\', \'term3\' ...
} else {
    $checkedBundeslaenderList = $_POST[\'checkedBundeslaender\']);
    // string form: \'term1\'
}
最后是我的查询参数:

$newImmoArgs = array(
    \'post_type\' => \'immobilien\',
    \'posts_per_page\' => -1,
    \'tax_query\' => array(
        array(
            \'taxonomy\' => \'bundesland\',
            \'field\'    => \'slug\',
            \'terms\'    => array( $checkedBundeslaenderList ),
            \'operator\' => \'IN\',
            \'include_children\' => false,
        ),
    ),                              

);
我的问题是,如果选中了2个或更多复选框,我的查询将不会有任何结果。。。仅当选中1个复选框时,它才起作用。

请帮忙!

向你问好,雷尔斯顿。

1 个回复
最合适的回答,由SO网友:TheDeadMedic 整理而成

你把数组搞混了。在你的“我的内爆”中,$checkedBundeslaenderList 根据项目的数量,在字符串和数组之间变化。

然后在查询参数中,将其嵌套在一个数组中:

\'terms\' => array( $checkedBundeslaenderList ),
因此,你最终可能得到的是:

array( array( 1 ) );
。。。或:

array( \'1,2,3,4\' );
两者都不是有效的格式。相反,请始终使用数组:

if ( ! empty( $_POST[\'checkedBundeslaender\'] ) ) {
    $checkedBundeslaenderList = wp_unslash( ( array ) $_POST[\'checkedBundeslaender\'] );
} else {
    $checkedBundeslaenderList = array();
}
然后直接将其传递给您的查询:

\'terms\' => $checkedBundeslaenderList,

结束

相关推荐