WordPress Meta Query из нескольких полей выбора - PullRequest
0 голосов
/ 21 марта 2019

Я создаю пользовательский поиск для конкретной таксономии в 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, чтобы он работал с двумя другими поисковыми элементами?

...