使用自定义帖子类型和字段创建高级自定义搜索

时间:2017-01-26 09:06:59

标签: php wordpress search custom-post-type advanced-custom-fields

我一直试图想出一种在我的WordPress版本中构建高级自定义搜索的方法。

我一直在查看这个帖子以获取信息:https://wordpress.stackexchange.com/questions/165478/creating-a-search-form-for-custom-fields - 但是它似乎并没有帮助我,而且我已经陷入困境。

表格的规格是:

表单需要有3个选择字段,每个字段都有自己的选项集。 第一个字段需要将搜索结果过滤为自定义帖子类型:postTypeA或postTypeB。 第二个选择字段需要通过在ACF(高级自定义字段)中创建的自定义属性进行过滤,此字段为级别,级别有5个选项:levelA,levelB,levelC,levelD,levelE 最后它需要按扇区过滤(这已经通过类别分类法设置),我们这里也有5个选项,sectorA等。 所以希望搜索结果能得到非常准确的结果。

到目前为止,我的搜索表单示例如下:

<form method="get" id="advanced-searchform" class="course-finder-form" role="search" action="<?php echo esc_url( home_url( '/' ) ); ?>">
    <input type="hidden" name="search" value="advanced">

    <div class="form-row">
        <label for="who"><?php _e( 'I am a', 'textdomain' ); ?></label>
        <select name="user" id="">
            <option value="learner"><?php _e( 'Learner', 'textdomain' ); ?></option>
            <option value="employer"><?php _e( 'Employer', 'textdomain' ); ?></option>
        </select>
    </div> 

    <div class="form-row">
        <label for="level"><?php _e( 'looking for', 'textdomain' ); ?></label>
        <select name="level" id="">
            <option value="apprenticeship-standards"><?php _e( 'Apprenticeships', 'textdomain' ); ?></option>
            <option value="traineeships-and-internships"><?php _e( 'Traineeships and Internships', 'textdomain' ); ?></option>
            <option value="stand-alone-qualification"><?php _e( 'Stand Alone Qualification', 'textdomain' ); ?></option>
        </select>
    </div>

    <div class="form-row">
        <label for="sector"><?php _e( 'in', 'textdomain' ); ?></label>
        <select name="sector" id="">
            <option value="property"><?php _e( 'Property', 'textdomain' ); ?></option>
            <option value="beauty"><?php _e( 'Beauty', 'textdomain' ); ?></option>
            <option value="business"><?php _e( 'Business', 'textdomain' ); ?></option>
            <option value="digital"><?php _e( 'Digital', 'textdomain' ); ?></option>
            <option value="finance"><?php _e( 'Finance', 'textdomain' ); ?></option>
        </select>
    </div> 

    <input type="submit" class="search-submit colourless-button" value="Find Course" />

</form>

PHP - 添加到functions.php搜索结果页面:

function wpse_load_custom_search_template() {
    if( isset($_REQUEST['search']) == 'advanced' ) {
        require('advanced-search-result.php');
        die();
    }
}
add_action('init','wpse_load_custom_search_template');

PHP - 搜索结果:

<?php get_header(); ?>

<?php
// Get data from URL into variables
$_level = $_GET['level'] != '' ? $_GET['level'] : '';

// Start the Query
$course_args = array(
        'post_type'     =>  'learner_courses', // your CPT
        's'             =>  $_user, // looks into everything with the keyword from your 'user field'
        'meta_query'    =>  array(
                                array(
                                    'key'     => 'level', // assumed your meta_key is 'level'
                                    'value'   => $_level,
                                    'compare' => 'LIKE', // finds levels that matches 'level' from the select field
                                ),
                            )
    );
$courseSearchQuery = new WP_Query( $course_args );

// Open this line to Debug what's query WP has just run
 var_dump($courseSearchQuery->request);

// Show the results
if( $courseSearchQuery->have_posts() ) :
    while( $courseSearchQuery->have_posts() ) : $courseSearchQuery->the_post();
        the_title(); // Assumed your cars' names are stored as a CPT post title
    endwhile;
else :
    _e( 'Sorry, nothing matched your search criteria', 'textdomain' );
endif;
wp_reset_postdata();
?>

<?php get_footer(); ?>

有人可以帮助如何通过这些元素过滤搜索,首先:发布类型,第二级:级别(自定义acf属性),最后:扇区(类别)。

我想我已经把所有东西放在这里解释我的困境,让我知道是否需要其他任何东西!

非常感谢提前!

0 个答案:

没有答案