- Hướng dẫn tạo bộ tìm kiếm cho site Bất động sản WordPress P.1
- Hướng dẫn tạo bộ tìm kiếm cho site Bất động sản WordPress P.2
- Hướng dẫn tạo bộ tìm kiếm cho site Bất động sản WordPress P.3
Để thực hiện làm bộ search cần xác định field search và giá trị của nó
- Tạo form search tương ứng với field cần search.
2. Lấy dữ liệu loại nhà đất, Huyện/ thành phố, Để ý nhỏ, phần huyện/thành phố có đoạn data-idp dùng để lấy id của danh mục đó, tí sử dụng làm ajax
<select name="loai_nha_dat"> <?php echo '<option value="all">Chọn loại nhà đất</option>'; $terms = get_terms( array( 'taxonomy' => 'loai_nha_dat', 'hide_empty' => true, 'parent' => 0 ) ); foreach ($terms as $term ) { ?> <option value="<?php echo $term->slug ?>"><?php echo $term->name ?></option> <?php } ?> </select> <select name="tinh_tp"> <?php echo '<option value="all" data-idp="-1">Chọn Huyện/Thành Phố</option>'; $terms = get_terms( array( 'taxonomy' => 'dia_diem', 'hide_empty' => true, 'parent' => 0 ) ); foreach ($terms as $term ) { ?> <option data-idp="<?=$term->term_id?>" value="<?php echo $term->slug ?>"><?php echo $term->name ?></option> <?php } ?> </select>
Phần ajax giữa huyện/ thành phố và xã/phường
1. Ta tạo trước khung select nhưng chưa lấy dữ liệu gì cả
<select name="xa_huyen"> <?php echo '<option value="all">Chọn xã phường</option>'; ?> </select>
2. vào function thêm đoạn code
function my_scripts_method() { wp_enqueue_script( 'ajax_script', get_stylesheet_directory_uri() . '/vendor/ajax-script.js', array( 'jquery' ) ); wp_localize_script('ajax_script', 'WPURLS', array( 'siteurl' => admin_url( 'admin-ajax.php' ) )); } add_action( 'wp_enqueue_scripts', 'my_scripts_method' );
có ý nghĩa là sử dụng ajax-scripts.js nằm trong thư mục vendor của theme là file chứa jquery . và lấy code ajax trong functions.php
3. Giờ thêm đoạn code ajax vào ajax-scripts.js
(function($) { $(document).ready(function() { $( "select[name='tinh_tp']" ).change(function() { console.log($(this).find(':selected').attr('data-idp')) ; // lấy data idp data = { 'action': 'ajax_danhmuc', //tên action ajax 'id' :$(this).find(':selected').attr('data-idp') }; $.ajax({ url: WPURLS.siteurl, data: data, dataType : "json", type: 'POST', beforeSend: function(xhr) { console.log('ajax chay'); }, success: function(data) { if (data) { console.log(data); $('select[name="xa_huyen"]').html(data.data);//in dữ liệu vào select này } } }); }); }) })(jQuery);
4. Thêm đoạn code php lấy dữ liệu vào functions.php
function ajax_danhmuc() { ob_start(); echo '<option value="all">Chọn xã phường</option>'; if ($_POST['id'] == -1) { } else { $terms = get_terms( array( 'taxonomy' => 'dia_diem', 'hide_empty' => true, // có dữ liệu thì mới in ra 'parent' => $_POST['id'] // id danh mục cha // 'exclude' => array($_POST['id']), // câu lênh này là dùng để loại bỏ danh mục có id = ) ); } foreach ($terms as $term ) { ?> <option value="<?php echo $term->slug ?>"><?php echo $term->name ?></option> <?php } $result = ob_get_clean(); wp_send_json_success($result); die(); } add_action('wp_ajax_ajax_danhmuc', 'ajax_danhmuc'); // wp_ajax_{action} add_action('wp_ajax_nopriv_ajax_danhmuc', 'ajax_danhmuc'); // wp_ajax_nopriv_{action}
Xong phần này ta đã xử lý được việc ajax lấy dữ liệu cho phường xã.
4. Lấy danh sách hướng nhà từ select của acf .
<select name="huong_nha"> <?php echo '<option value="all">Chọn hướng nhà</option>'; ?> <?php $huong =''; $field = get_field_object('huong'); $choices = $field['choices']; $field_key = "field_5bced3bd459f2"; $field = get_field_object($field_key); if( $field ) { foreach( $field['choices'] as $k => $v ) { if (isset($_GET['huong_nha'])) { if ($k == $_GET['huong_nha']) { $huong = 'selected'; } } echo '<option value="' . $k . '"'.$huong.' >' . $v . '</option>'; } } ?> </select>
5. Phần giá này bạn tự nhập hoặc có thể làm các trường dữ liệu lấy danh sách ra cho đẹp. Phần này đơn giản mình nhập tay demo cho nhanh
<div class="box-gia-thap order-lg-7 glg15"> <select name="giathap"> <option value="0">Giá thấp nhất</option> <option value="500000000">500 Triệu</option> <option value="1000000000">1 Tỷ</option> <option value="1500000000">1.5 Tỷ</option> <option value="2000000000">2 Tỷ</option> <option value="2500000000">2.5 Tỷ</option> </select> </div> <div class="box-gia-cao order-lg-8 glg15"> <select name="giacao"> <option value="0">Giá thấp nhất</option> <option value="500000000">500 Triệu</option> <option value="1000000000">1 Tỷ</option> <option value="1500000000">1.5 Tỷ</option> <option value="2000000000">2 Tỷ</option> <option value="2500000000">2.5 Tỷ</option> <option value="3000000000">3 Tỷ</option> <option value="3500000000">3.5 Tỷ</option> <option value="4000000000">4 Tỷ</option> <option value="4500000000">4.5 Tỷ</option> </select> </div>
Tổng kết lại:
1. Form search gồm:
<form role="search" method="get" class="search-form" action="<?php echo home_url( '/' ); ?>"> <div class="box-text-search order-lg-1"> <input type="search" class="search-field" placeholder="<?php echo esc_attr_x( 'Từ khóa…', 'placeholder' ) ?>" value="<?php echo get_search_query() ?>" name="s" title="<?php echo esc_attr_x( 'Search for:', 'label' ) ?>" autocomplete="off" /> </div> <div class="box-loainha order-lg-3 glg15"> <select name="loai_nha_dat"> <?php echo '<option value="all">Chọn loại nhà đất</option>'; $terms = get_terms( array( 'taxonomy' => 'loai_nha_dat', 'hide_empty' => true, 'parent' => 0 ) ); foreach ($terms as $term ) { ?> <option value="<?php echo $term->slug ?>"><?php echo $term->name ?></option> <?php } ?> </select> </div> <div class="tinh_tp order-lg-4 glg15"> <select name="tinh_tp"> <?php echo '<option value="all" data-idp="-1">Chọn Huyện/Thành Phố</option>'; $terms = get_terms( array( 'taxonomy' => 'dia_diem', 'hide_empty' => true, 'parent' => 0 ) ); foreach ($terms as $term ) { ?> <option data-idp="<?=$term->term_id?>" value="<?php echo $term->slug ?>"><?php echo $term->name ?></option> <?php } ?> </select> </div> <div class="box-xahuyen order-lg-5 glg15"> <select name="xa_huyen"> <?php echo '<option value="all">Chọn xã phường</option>'; ?> </select> </div> <div class="box-huong order-lg-6 glg15"> <select name="huong_nha"> <?php echo '<option value="all">Chọn hướng nhà</option>'; ?> <?php $huong =''; $field = get_field_object('huong'); $choices = $field['choices']; $field_key = "field_5bced3bd459f2"; $field = get_field_object($field_key); //var_dump($field['choices']); if( $field ) { foreach( $field['choices'] as $k => $v ) { if (isset($_GET['huong_nha'])) { if ($k == $_GET['huong_nha']) { $huong = 'selected'; } } echo '<option value="' . $k . '"'.$huong.' >' . $v . '</option>'; } } ?> </select> </div> <div class="box-gia-thap order-lg-7 glg15"> <select name="giathap"> <option value="0">Giá thấp nhất</option> <option value="500000000">500 Triệu</option> <option value="1000000000">1 Tỷ</option> <option value="1500000000">1.5 Tỷ</option> <option value="2000000000">2 Tỷ</option> <option value="2500000000">2.5 Tỷ</option> </select> </div> <div class="box-gia-cao order-lg-8 glg15"> <select name="giacao"> <option value="0">Giá thấp nhất</option> <option value="500000000">500 Triệu</option> <option value="1000000000">1 Tỷ</option> <option value="1500000000">1.5 Tỷ</option> <option value="2000000000">2 Tỷ</option> <option value="2500000000">2.5 Tỷ</option> <option value="3000000000">3 Tỷ</option> <option value="3500000000">3.5 Tỷ</option> <option value="4000000000">4 Tỷ</option> <option value="4500000000">4.5 Tỷ</option> </select> </div> <div class="box-sub order-lg-2 "> <input type="submit" class="search-submit" value="<?php echo esc_attr_x( 'Tìm kiếm', 'submit button' ) ?>" /> </div> </form>
2. functions.php gồm
function my_scripts_method() { wp_enqueue_script( 'ajax_script', get_stylesheet_directory_uri() . '/vendor/ajax-script.js', array( 'jquery' ) ); wp_localize_script('ajax_script', 'WPURLS', array( 'siteurl' => admin_url( 'admin-ajax.php' ) )); } add_action( 'wp_enqueue_scripts', 'my_scripts_method' ); function ajax_danhmuc() { ob_start(); echo '<option value="all">Chọn xã phường</option>'; if ($_POST['id'] == -1) { } else { $terms = get_terms( array( 'taxonomy' => 'dia_diem', 'hide_empty' => true, // có dữ liệu thì mới in ra 'parent' => $_POST['id'] // id danh mục cha // 'exclude' => array($_POST['id']), ) ); } foreach ($terms as $term ) { ?> <option value="<?php echo $term->slug ?>"><?php echo $term->name ?></option> <?php } $result = ob_get_clean(); wp_send_json_success($result); die(); } add_action('wp_ajax_ajax_danhmuc', 'ajax_danhmuc'); // wp_ajax_{action} add_action('wp_ajax_nopriv_ajax_danhmuc', 'ajax_danhmuc'); // wp_ajax_nopriv_{action}
3. ajax-scripts.js gồm:
(function($) { $(document).ready(function() { $( "select[name='tinh_tp']" ).change(function() { console.log($(this).find(':selected').attr('data-idp')) ; // lấy data idp data = { 'action': 'ajax_danhmuc', //tên action ajax 'id' :$(this).find(':selected').attr('data-idp') }; $.ajax({ url: WPURLS.siteurl, data: data, dataType : "json", type: 'POST', beforeSend: function(xhr) { console.log('ajax chay'); }, success: function(data) { if (data) { console.log(data); $('select[name="xa_huyen"]').html(data.data);//in dữ liệu vào select này } } }); }); }) })(jQuery);
4. cho thêm tí css vào để dể nhìn 1 tí
form.search-form { padding: 20px 0; display: flex; flex-wrap: wrap; } form.search-form input,form.search-form select { width: 100%; } @media screen and (min-width: 991px) { .box-text-search { width: 80%; margin-right: 10px; margin-bottom: 5px; } .box-sub { width: 15%; } .box-sub input { padding: 7px; background-color: #088f08; color: #fff; font-size: 16px; } .glg15 { width: 15%; margin-right: 13px; } .glg15 input, .glg15 select { padding: 5px; width: 100%; } .glg15:last-child { margin-right: 0; } .box-gia-cao {margin-right: 0;} }
Nguồn: https://blogtintonghop.com/huong-dan-tao-bo-search-bat-dong-san-wordpress-p-2/
Quét mã QR để đọc bài viết này để xem tiếp trên điện thoại