web-dev-qa-db-ja.com

何も選択されていない場合、tax_queryは結果を表示しません

私はWordPressで不動産Webサイトを作成しています。私はカスタム検索を作成しています。そして、 "States"と "Suburbs"を表示するためにtax_queryを使用して検索結果を絞り込みます。

オプションが選択されていると、検索はうまくいきます。何も選択されていないと、検索結果はまったく表示されません。これは不動産Webサイトの問題です。なぜなら、ユーザーが「州」を選択しても「郊外」を選択しない、またはまったく何も選択しない可能性があるからです。

正しい方法はありますか、それとも何も選択されていない場合に結果が表示されるようにするにはどうすればよいですか。

これが私の郊外への選択ドロップダウンです。

<!-- Suburbs dropdown -->
            <select name="suburbs">

                <option value="any" selected>Any</option>

                <?php

                $suburb_terms = get_terms(array(
                    'taxonomy' => 'suburb',
                    'hide_empty' => true,
                    'orderby' => 'name',
                ) );

                foreach( $suburb_terms as $term ) {
                    echo '<option value="' . $term->slug . '">' . $term->name . '</option>';
                }

                ?>

            </select>

そしてフォームを処理する:

// Suburbs
    if( !empty( $_GET['suburbs'] ) ) {
        $suburbs = $_GET['suburbs'];
    }

    // States
    if( !empty( $_GET['states'] ) ) {
        $states = $_GET['states'];
    }


    // the query
    $property_query = new WP_Query(
        array(
            'post_type'      => 'properties',
            'posts_per_page' => 10,
            'tax_query'      => array(

                array(
                    'taxonomy' => 'state',
                    'field' => 'slug',
                    'terms' => $states,
                ),
                array(
                    'taxonomy' => 'suburb',
                    'field' => 'slug',
                    'terms' => $suburbs,
                )

            ),
        )
    );

そのため、ドロップダウンが選択されているときに検索が正しく機能することを確認するためだけに使用します。しかし私の場合は 何も が選択されていない場合に表示する結果が必要です。誰もがこれを達成する方法を知っていますか?ありがとうございました。

2
Notorious

これまでのところ、suburbsstatesの値をチェックして分類条件を追加します。

// Suburbs
if( !empty( $_GET['suburbs'] ) ) {
    $suburbs = $_GET['suburbs'];
}

// States
if( !empty( $_GET['states'] ) ) {
    $states = $_GET['states'];
}

// Query arguments.
$args = array(
            'post_type'      => 'properties',
            'posts_per_page' => 10,
        );

$taxquery = array();

// if $state variable is selected.
if(!empty($states) || isset($suburbs)  ){
    array_Push($taxquery,array(
            'taxonomy' => 'state',
            'field' => 'slug',
            'terms' => $states,
        ));
}

// if $suburbs variable is selected.
if(!empty($suburbs) || isset($suburbs) ) ){
    array_Push($taxquery,array(
            'taxonomy' => 'suburb',
            'field' => 'slug',
            'terms' => $suburbs,
        ));
}

// if $taxquery has array;
if(!empty($taxquery)){
    $args['tax_query'] = $taxquery;
}

// And finally fetch the all post.
$property_query = new WP_Query($args);

あなたのPHPコードをこれに置き換えてください。それは間違いなくあなたの問題を解決します:)

2
Govind Kumar