Ошибка отправки массива входов

Привет, я получаю сообщение об ошибке WordPress, эта ошибка появляется, когда я публикую несколько значений таксономии

<form role="search" method="post" id="searchform" action="<?php echo home_url( '/' ); ?>"> <select name="books[]" multiple> <option value="a">a</option> <option value="b">b</option> </select> <input type="submit" id="searchsubmit" value="Search" /> </form> 

Предупреждение : strpos () ожидает, что параметр 1 будет строкой, массив указан в www.domain.com \ wordpress \ wp-includes \ query.php в строке 1718

Предупреждение : preg_split () ожидает, что параметр 2 будет строкой, массив указан в www.domain.com \ wordpress \ wp-includes \ query.php в строке 1719

Предупреждение : неверный аргумент, предоставленный foreach () в www.domain.com \ wordpress \ wp-includes \ query.php в строке 1720

  foreach ( $GLOBALS['wp_taxonomies'] as $taxonomy => $t ) { if ( 'post_tag' == $taxonomy ) continue; // Handled further down in the $q['tag'] block if ( $t->query_var && !empty( $q[$t->query_var] ) ) { $tax_query_defaults = array( 'taxonomy' => $taxonomy, 'field' => 'slug', ); if ( isset( $t->rewrite['hierarchical'] ) && $t->rewrite['hierarchical'] ) { $q[$t->query_var] = wp_basename( $q[$t->query_var] ); } $term = $q[$t->query_var]; if ( strpos($term, '+') !== false ) { $terms = preg_split( '/[+]+/', $term ); foreach ( $terms as $term ) { $tax_query[] = array_merge( $tax_query_defaults, array( 'terms' => array( $term ) ) ); } } else { $tax_query[] = array_merge( $tax_query_defaults, array( 'terms' => preg_split( '/[,]+/', $term ) ) ); } } } 

Ошибка не появляется, когда я отправляю ее на searchresults.php или когда я использую, когда я использую одно значение или имя таксономии нет;

 <select name="books"> <select name="NoneTaxonomyName[]" multiple> 

кто-то знает, как это решить?

Solutions Collecting From Web of "Ошибка отправки массива входов"

Как я уже сказал в комментарии выше, установка query_var => false для пользовательской таксономии не является решением, потому что это заставит термины в frontend возвращать ошибку 404. Отказаться от термина страниц в интерфейсе, чтобы сделать простую форму для работы, далеко не для решения.

Наконец, я решил проблему. Вместо того, чтобы задавать имя в элементе select «my_tax []», я установил его как «tax_input ['my_tax»] []. Не спрашивайте меня, зачем WordPress это нужно, но это исправляет проблему.

Просто, если кому-то нужен пример.

Мои выборочные таксономии:

 $taxonomies = array( 'type' => array('label' => 'Types','slug' => 'type','hierarchical' => false,'multiple' => false), 'city' => array('label' => 'Cities','slug' => 'city','hierarchical' => true,'multiple' => false), 'community_features' => array('label' => 'Community features','slug' => 'community_features','hierarchical' => false,'multiple' => true), 'property_features' => array('label' => 'Property features','slug' => 'property_features','hierarchical' => false,'multiple' => true) ); foreach($taxonomies as $taxonomy => $properties){ register_taxonomy( $taxonomy, 'properties', array( 'label' => __( $properties['label'] ), 'hierarchical' => $properties['hierarchical'], 'query_var' => true, ) ); register_taxonomy_for_object_type( $taxonomy, 'properties' ); } 

Вот пример формы:

  <form method="post" action="<?php echo get_post_type_archive_link('properties');?>"> <?php foreach($taxonomies as $taxonomy) { $args = array( 'show_option_all' => __('Select '.$taxonomy['label'],'properties'), 'orderby' => 'NAME', 'order' => 'ASC', 'hide_empty' => 0, 'echo' => 0, 'selected' => '', 'hierarchical' => true, 'name' => 'tax_input['.$taxonomy['slug'].'][]', 'class' => '', 'taxonomy' => $taxonomy['slug'], ); if($taxonomy['multiple']){ $args['show_option_all'] = ''; } $select = wp_dropdown_categories( $args ); if($taxonomy['multiple']){ $select = preg_replace("#<select([^>]*)>#", "<select$1 multiple>", $select); } echo $select; } ?> <input type="hidden" name="action" id="action" value="search"> <button type="submit"><?php _e('Search','properties');?></button> </form> 

Добавлен пользовательский запрос var:

 add_filter('query_vars', 'properties_add_query_vars'); function properties_add_query_vars( $vars) { $vars[] = "action"; // name of the var as seen in the URL return $vars; } 

Мой пример pre_get_posts:

 add_action( 'pre_get_posts', 'properties_pre_get_post' ); function properties_pre_get_post($query){ if(isset($query->query_vars['action']) && $query->query_vars['action'] == 'search'){ if($query->is_main_query() && !is_admin() && $query->is_archive ) { $tax_query = array(); $tax_input = $_POST['tax_input']; if(!empty($tax_input)){ foreach($tax_input as $key => $value){ if(array_key_exists($key, $taxonomies)){ if(!empty($value) && $value[0] != "0"){ $value = array_map('intval', $value); $tax_query[] = array( 'taxonomy' => $key, 'field' => 'id', 'terms' => $value, 'operator' => 'AND' ); } } } $query->set('tax_query',$tax_query); } } } } 

решена с; query_var => false

 register_taxonomy('taxname', 'post_type', array('hierarchical' => true, 'label' => 'lable', 'query_var' => false, 'rewrite' => array('slug' => 'slug')));