web-dev-qa-db-ja.com

$ _GETチェックボックス配列から取得した複数の分類法でクエリが機能しない

この非常に簡潔にしておきますが、通常の検索は完全に機能しますが、追加機能のチェックボックスを追加したときなどにはtax_queryは機能しませんが、$ _GETはテストのためにページの左上。

ライブサイト: http://costaricalifestyleproperties.com.s221952.gridserver.com/

if(!empty($_GET['ct_lifestyle'])) {
//if(is_array($_GET['feature'])) {
    $ct_lifestyle = $_GET['ct_lifestyle'];

    foreach ($ct_lifestyle as $lifestyle):
        $search_values['tax_query'] = array (
            'taxonomy' => 'lifestyle',
            'field' => 'slug',
            'terms' => $lifestyle,
            'operator'  => 'IN'
        );
        echo $lifestyle;
    endforeach;
//}

}

私はテストのためにis_array()をコメントアウトしました、そして倍数の代わりに一つのチェックボックスを選択することができます。カスタム分類法も機能し、名前を二重と三重にチェックしました。これはレジスタ機能です。

どんな助けでも大いに感謝しています私は何時間もこれを働かせようとしている私の頭を叩いていました、私はそれが私が行方不明で単純な何かでなければならないことを知っています。

if(!function_exists( 'ct_lifestyle_taxonomies'))){

add_action( 'init', 'ct_lifestyle_taxonomies', 0 );

function ct_lifestyle_taxonomies() {

    // Lifestyle
    $lifestylelabels = array(
        'name' => __( 'Lifestyle', 'contempo' ),
        'singular_name' => __( 'Lifestyle', 'contempo' ),
        'search_items' =>  __( 'Search Lifestyles', 'contempo' ),
        'popular_items' => __( 'Popular Lifestyles', 'contempo' ),
        'all_items' => __( 'All Lifestyles', 'contempo' ),
        'parent_item' => null,
        'parent_item_colon' => null,
        'edit_item' => __( 'Edit Lifestyle', 'contempo' ),
        'update_item' => __( 'Update Lifestyle', 'contempo' ),
        'add_new_item' => __( 'Add New Lifestyle', 'contempo' ),
        'new_item_name' => __( 'New Lifestyle Name', 'contempo' ),
        'separate_items_with_commas' => __( 'Separate Lifestyles with commas', 'contempo' ),
        'add_or_remove_items' => __( 'Add or remove Lifestyles', 'contempo' ),
        'choose_from_most_used' => __( 'Choose from the most used Lifestyles', 'contempo' )
    );
    register_taxonomy( 'lifestyle', 'listings', array(
        'hierarchical' => false,
        'labels' => $lifestylelabels,
        'show_ui' => true,
        'query_var' => true,
        'rewrite' => array( 'slug' => 'lifestyle' ),
    ));

    if(!function_exists('lifestyle')) {
        function lifestyle() {
            global $post;
            global $wp_query;
            $terms_as_text = strip_tags( get_the_term_list( $wp_query->post->ID, 'lifestyle', '', ', ', '' ) );
            echo esc_html($terms_as_text);
        }
    }

}

}

1
contempoinc

ここに:

$search_values['tax_query'] = array (

foreachループ内のすべての項目に対してtax_queryの値をリセットしています。

また、 無効な値 に設定されています。

重要な注意: tax_queryは配列の税金照会引数を取ります array (これは配列を取ります)配列の)。この構文により、最初の(外側の)配列でrelationパラメーターを使用して分類法配列間のブール関係を記述することで、複数の分類法を照会できます。

そのため、複数の配列からなるtax_queryを作成するには、$search_values['tax_query']を空の配列に設定してから各配列を追加する必要があります。

if( ! empty( $_GET['ct_lifestyle'] ) ) {
    $ct_lifestyle = (array) $_GET['ct_lifestyle'];

    $search_values['tax_query'] = array();

    foreach ($ct_lifestyle as $lifestyle):
        $search_values['tax_query'][] = array (
            'taxonomy' => 'lifestyle',
            'field'    => 'slug',
            'terms'    => $lifestyle,
        );
    endforeach;
}

このビットにも注意してください。

$ct_lifestyle = (array) $_GET['ct_lifestyle'];

それを配列としてキャストすると、ct_lifestyleパラメータが1つしか存在しない場合、単一の項目を持つ配列に入れられます。そのようにしてあなたのforeachはあなたが一つのアイテムを異なったやり方で扱う必要なしにまだ働くでしょう。

そのコードは、クエリがall与えられた 'lifestyes'を持つ投稿にマッチさせたいという仮定を持っています。これが、コードからINoperatorを削除した理由です。与えられたライフスタイルのanyを持つ投稿を照合したい場合は、foreachを飛ばして配列をtax_queryに渡すだけです。

if( ! empty( $_GET['ct_lifestyle'] ) ) {
    $ct_lifestyle = (array) $_GET['ct_lifestyle'];

    $search_values['tax_query'] = array(
        array(
            'taxonomy' => 'lifestyle',
            'field'    => 'slug',
            'terms'    => $ct_lifestyle,
            'operator' => 'IN',
        )
    );
}
1
Jacob Peattie