WP_query – Фильтровать по tax_query и meta_query с помощью нескольких select

У меня есть тип публикации публикаций, таксономия писателей и значение «Мета-бокс» в публикациях. parent_id .

В моем archive-publictions-post.php я пытаюсь отфильтровать класс WP_Query с параметрами tax_query и meta_query .

В приведенном ниже коде я могу получить все публикации, которые будут отображаться при загрузке страницы, и я могу получить отфильтрованные результаты, когда я выбираю как термин, так и родитель вместе, но не при выборе отдельно?

Я не уверен, как в этом случае использовать параметр relationship meta_query & tax_query ?

 <?php // The code from: archive-publictions-post.php // Set Var Filter $publications_filter = $_POST['publications']; // Set Terms Arguments $term_args = array( 'orderby' => 'name', 'order' => 'ASC', 'hide_empty' => false, 'parent' => 0, ); // Get Publications Terms $terms = get_terms('publications-tax', $term_args); $writers_args = array( 'post_type' => 'writers-post', 'posts_per_page' => -1, 'post_status' => 'any', 'order' => 'DESC', ); // Get Writers Posts $writers = get_posts($writers_args); echo '<select name="publications[]" multiple>'; // Set var as an array $all_writers = array(); foreach($writers as $writer){ // Set all terms to our array $all_writers[] = $writer->ID; echo '<option value="'.$writer->ID.'">'.$writer->post_name.'</option>'; } foreach($terms as $term){ // Set all terms to our array $all_terms[] = $term->name; echo '<option value="'.$term->name.'">'.$term->name.'</option>'; } echo '</select>'; echo '<input type="submit" value="go">'; ?> </form> 

WP_QUERY $args :

  //Start Args $publications_results = isset($_POST['publications']) ? $publications_filter : $all_terms; $publication_values=array(); $writers=array(); foreach ($publications_results as $key => $value) { if (is_numeric($value)) { $writers_values[] = $value; } else{ $publications_values[] = $value; } } $args = array( 'post_type' => array('publications-post','writers-post'), 'order' => 'DESC', 'post_status' => 'any', 'orderby' => 'date', 'tax_query' => array(array( 'taxonomy' => 'publications-tax', 'field' => 'slug', 'terms' => $publications_values )) ); if($_POST['publications']){ $args['meta_query'][] = array( 'key' => 'parent_id', 'value' => $writers_values, 'type' => 'numeric', ); } 

благодаря

Мой исходный код не предоставил параметры аргумента WP_query умолчанию, WP_query параметр «Выбрать» не был установлен – пустой параметр «отфильтровать все».

Насколько это возможно, я применял значения параметров по умолчанию из начальных запросов Post и Term, и теперь фильтр выбора работает.

Я был бы рад узнать, может ли мой код улучшиться 🙂

  /* *Get Publications Filters */ $writers_filter = array(); $publications_filter = array(); if (isset($_POST['publications'])) { $publications_filter = $_POST['publications']; // Separate Numeric from String - ie Post ID and Term Name foreach ($publications_filter as $key => $value) { if (is_numeric($value)) { $writers_filter[] = $value; } else{ $terms_filter[] = $value; } } } // If Either Select Option is Empty, // Assign Final Value With All Queried Results - Avoid Empty Value $final_writers = array(); $final_terms = array(); $final_writers = (!empty($writers_filter)) ? $writers_filter : $all_writers; $final_terms = (!empty($terms_filter)) ? $terms_filter : $all_terms; /* *Set WP_Query Argument Parameters */ $args = array( 'post_type' => array('publications-post','writers-post'), 'order' => 'DESC', 'post_status' => 'any', 'orderby' => 'date', 'tax_query' => array(array( 'taxonomy' => 'publications-tax', 'field' => 'slug', 'terms' => $final_terms )) ); if($_POST['publications']){ $args['meta_query'][] = array( 'key' => 'parent_id', 'value' => $final_writers, 'type' => 'numeric', ); }