WordPress:基于metaboxes值的自定义搜索表单

时间:2019-01-27 22:51:19

标签: wordpress search meta-boxes

我需要帮助,以了解如何在WordPress网站上构建自定义搜索表单。

我创建了一个metabox。这是一个选择下拉列表。我的目标是为用户提供按类别(使用默认类别元框)和地区搜索帖子的可能性。这是functions.php文件中的地区metabox。

add_action( 'add_meta_boxes','init_metabox' );
function init_metabox() {
    add_meta_box( 'arr_type', 'Arrondissement et type', 'arr_type', 'post', 'side' );

}

function arr_type( $post ) {
    wp_nonce_field( basename( __FILE__ ), 'paris_meta_box_nonce' );
    $arrondissement = get_post_meta( $post->ID, 'arrondissement', true );

    echo '<label for="arrondissement">Définir un arrondissement</label>';
    echo '<select name="arrondissement">';
        echo '<option ' . selected( '1er arrondissement', $arrondissement, false ) . ' value="1er arrondissement">1er arrondissement</option>';
        echo '<option ' . selected( '2ème arrondissement', $arrondissement, false ) . ' value="2ème arrondissement">2ème arrondissement</option>';
        echo '<option ' . selected( '3ème arrondissement', $arrondissement, false ) . ' value="3ème arrondissement">3ème arrondissement</option>';
        echo '<option ' . selected( '4ème arrondissement', $arrondissement, false ) . ' value="4ème arrondissement">4ème arrondissement</option>';
        echo '<option ' . selected( '5ème arrondissement', $arrondissement, false ) . ' value="5ème arrondissement">5ème arrondissement</option>';
        echo '<option ' . selected( '6ème arrondissement', $arrondissement, false ) . ' value="6ème arrondissement">6ème arrondissemen</option>';
        echo '<option ' . selected( '7ème arrondissement', $arrondissement, false ) . ' value="7ème arrondissement">7ème arrondissement</option>';
        echo '<option ' . selected( '8ème arrondissement', $arrondissement, false ) . ' value="8ème arrondissement">8ème arrondissement</option>';
        echo '<option ' . selected( '9ème arrondissement', $arrondissement, false ) . ' value="9ème arrondissement">9ème arrondissement</option>';
        echo '<option ' . selected( '10ème arrondissement', $arrondissement, false ) . ' value="10ème arrondissement">10ème arrondissement</option>';
        echo '<option ' . selected( '11ème arrondissement', $arrondissement, false ) . ' value="11ème arrondissement">11ème arrondissement</option>';
        echo '<option ' . selected( '12ème arrondissement', $arrondissement, false ) . ' value="12ème arrondissement">12ème arrondissement</option>';
        echo '<option ' . selected( '13ème arrondissement', $arrondissement, false ) . ' value="13ème arrondissement">13ème arrondissement</option>';
        echo '<option ' . selected( '14ème arrondissement', $arrondissement, false ) . ' value="14ème arrondissement">14ème arrondissement</option>';
        echo '<option ' . selected( '15ème arrondissement', $arrondissement, false ) . ' value="15ème arrondissement">15ème arrondissement</option>';
        echo '<option ' . selected( '16ème arrondissement', $arrondissement, false ) . ' value="16ème arrondissement">16ème arrondissement</option>';
        echo '<option ' . selected( '17ème arrondissement', $arrondissement, false ) . ' value="17ème arrondissement">17ème arrondissement</option>';
        echo '<option ' . selected( '18ème arrondissement', $arrondissement, false ) . ' value="18ème arrondissement">18ème arrondissement</option>';
        echo '<option ' . selected( '19ème arrondissement', $arrondissement, false ) . ' value="19ème arrondissement">19ème arrondissement</option>';
        echo '<option ' . selected( '20ème arrondissement', $arrondissement, false ) . ' value="20ème arrondissement">20ème arrondissement</option>';
    echo '</select>';

}

add_action( 'save_post','save_metabox' );
function save_metabox( $post_id ) {
    // verify meta box nonce
    if ( !isset( $_POST['paris_meta_box_nonce'] ) || !wp_verify_nonce( $_POST['paris_meta_box_nonce'], basename( __FILE__ ) ) ) {
        return;
    }

    // return if autosave
    if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) {
        return;
    }

    // Check the user's permissions.
    if ( ! current_user_can( 'edit_post', $post_id ) ) {
        return;
    }
    if ( isset( $_POST['arrondissement'] ) ) {
        update_post_meta( $post_id, 'arrondissement', $_POST['arrondissement'] );
    }

}

对于每个帖子,我都使用该元框定义了一个帖子区域。

现在,我需要在自定义搜索表单中构建相同的下拉菜单,以使用户可以按地区搜索帖子。

<form method="get" id="advanced-searchform" role="search" action="<?php echo esc_url( home_url( '/' ) ); ?>">

    <h3><?php _e( 'Rechercher votre balade', 'paris' ); ?></h3>

    <!-- PASSING THIS TO TRIGGER THE ADVANCED SEARCH RESULT PAGE FROM functions.php -->
    <input type="hidden" name="s" value="">

    <p>
        <label for="arrondissement">Choisissez votre arrondissement</label>    
        <select name="arrondissement" id="arrondissement">
            <option value="1er arrondissement">1er arrondissement</option>';
            <option  value="2ème arrondissement">2ème arrondissement</option>';
            <option  value="3ème arrondissement">3ème arrondissement</option>';
            <option  value="4ème arrondissement">4ème arrondissement</option>';
            <option  value="5ème arrondissement">5ème arrondissement</option>';
            <option  value="6ème arrondissement">6ème arrondissemen</option>';
            <option  value="7ème arrondissement">7ème arrondissement</option>';
            <option  value="8ème arrondissement">8ème arrondissement</option>';
            <option  value="9ème arrondissement">9ème arrondissement</option>';
            <option  value="10ème arrondissement">10ème arrondissement</option>';
            <option  value="11ème arrondissement">11ème arrondissement</option>';
            <option  value="12ème arrondissement">12ème arrondissement</option>';
            <option  value="13ème arrondissement">13ème arrondissement</option>';
            <option  value="14ème arrondissement">14ème arrondissement</option>';
            <option  value="15ème arrondissement">15ème arrondissement</option>';
            <option  value="16ème arrondissement">16ème arrondissement</option>';
            <option  value="17ème arrondissement">17ème arrondissement</option>';
            <option  value="18ème arrondissement">18ème arrondissement</option>';
            <option  value="19ème arrondissement">19ème arrondissement</option>';
            <option  value="20ème arrondissement">20ème arrondissement</option>';
        ;?>
        </select>
    </p>

    <p>
        <label for="type">Que voulez-vous voir ?</label>
        <?php wp_dropdown_categories( 'show_option_none=Select' ); ?>
    </p>
    <input type="submit" id="searchsubmit" value="Search" />
</form>

那么,现在,如何进行搜索查询来考虑用户,类别和地区的选择? 这是我的pre_gest_post函数。我知道我想念什么,但不知道。有人可以帮我吗?

function search_filter( $query ) {
    if ( !is_admin() && $query->is_main_query() ) {
        if ( $query->is_search ) {
            $meta_query = array();

            if ( isset( $_POST['arrondissement']) && $_POST['arrondissement'] ) {

                $meta_query[] = array(
                  'key'     => 'arrondissement',
                  'value'   => $_POST['arrondissement'],
                  'compare' => '=',
                );

            }

            $cat = empty( $_GET['cat'] ) ? '' : (int) $_GET['cat'];
            add_query_arg( 'cat', $cat );

            $query->set('meta_query', $meta_query);
        }
    }
}

add_filter( 'pre_get_posts', 'search_filter' );

0 个答案:

没有答案