来自多个选择字段的Wordpress元查询

时间:2019-03-21 15:02:48

标签: php wordpress search meta-query

我正在使用ACF在Wordpress中创建针对特定分类法的自定义搜索。我没有按分类或关键字排序的问题。但是,我的问题似乎还包括一个下拉列表,用于选择一个值,然后将其合并到新WP_Query的$ args中。

以下是选择字段如何在页面上归档的摘要:

<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>

这是我尝试将WP_Query的meta_query和$ args一起获取的方法:

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();

}

该代码在没有等级值的情况下起作用,因此,如果只是搜索字段和部门分类法。

等级'key'是post_type =>'course'上的ACF复选框,要比较的值应在上述ACF字段和选择名称=“ grade-filter”处。

简而言之-如何格式化$ _GET ['grade-filter']来使$ args查询与其他两个搜索元素一起使用?

0 个答案:

没有答案