Я создаю пользовательский поиск для конкретной таксономии в Wordpress, используя ACF. У меня нет проблем с сортировкой по таксономии или по ключевым словам. Тем не менее, моя проблема, похоже, также включает в себя раскрывающийся список для выбора значения и последующего включения его в $ args для нового WP_Query.
Вот фрагмент того, как поле выбора заполнено на странице:
<form action="<?php echo site_url() ?>/wp-admin/admin-ajax.php" method="GET" id="course-filter">
<div class="input-set">
<label>grade</label>
<select name="grade-filter">
<option value=""></option>
<option value="9">9</option>
<option value="10">10</option>
<option value="11">11</option>
<option value="12">12</option>
</select>
</div>
Вот как я пытаюсь собрать вместе meta_query и $ args для WP_Query:
function filter_courses() {
$args = array(
'orderby' => 'name',
'post_type' => 'course',
);
if( isset($_GET['grade-filter'] ) ) :
$args['meta_query'] = array( 'relation' => 'AND' );
endif;
if( isset( $_GET['grade-filter'] ) ) :
$grade = sanitize_text_field( $_GET['grade-filter']);
$args['meta_query'] = array(
'key' => 'grade',
'value' => $_GET['grade-filter'],
'compare' => '=',
);
endif;
if( isset( $_GET['department-filter'] ) ) :
$args['tax_query'] = array(
array(
'taxonomy' => 'department',
'field' => 'id',
'terms' => $_GET['department-filter'],
)
);
endif;
if( isset( $_GET['search'] ) ) :
$search = sanitize_text_field( $_GET['search']);
$query = new WP_Query( array(
'post_type' => 'course',
'tax_query' => $args['tax_query'],
'meta_query' => $args['meta_query'],
's' => $search,
) );
else :
$query = new WP_Query( $args );
endif;
if( $query->have_posts() ) :
while( $query->have_posts() ) : $query->the_post(); ?>
<div class="course-card">
<h4><?php echo $query->post->post_title; ?></h4>
<div class="course-content">
<?php the_content(); ?>
<p class="grade">Grade Level: <?php the_field('grade'); ?></p>
</div>
</div>
<?php endwhile;
wp_reset_postdata();
else :
// var_dump($query);
echo '<p>Sorry, we could not locate what you were searching for.</p>';
endif;
die();
}
Код работает без значения оценки, так что если это было только поле поиска и таксономия отдела.
Оценка 'ключ' - это флажок ACF в post_type => 'course', и сравниваемые значения должны быть выше упомянутого поля ACF и выбора имени = "grade-filter".
Вкратце - как мне отформатировать $ _GET ['grade-filter'] для запроса $ args, чтобы он работал с двумя другими поисковыми элементами?