Запрос на несколько таксономий, извлеченных из массива флажков $ _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); } } } 

}

Solutions Collecting From Web of "Запрос на несколько таксономий, извлеченных из массива флажков $ _GET, не работает?"

Вот:

 $search_values['tax_query'] = array ( 

Вы tax_query значение tax_query для каждого элемента в цикле foreach .

Он также имеет недопустимое значение :

Важное примечание: tax_query принимает массив массивов массивов налоговых запросов (он принимает массив массивов). Эта конструкция позволяет запрашивать несколько таксономий, используя параметр 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 он будет помещен в массив с одним элементом. Таким образом, ваш foreach прежнему будет работать без необходимости обрабатывать один элемент по-разному.

В этом коде есть предположение, что вы хотите, чтобы запрос соответствовал сообщениям, которые имеют все данные «образа жизни». Вот почему я удалил operator IN из вашего кода. Если вы хотите tax_query сообщения, которые имеют какой-либо из приведенных tax_query жизни, вы можете пропустить foreach и просто передать массив в one 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', ) ); }