Tạo bộ tìm kiếm cho BĐS

Hướng dẫn tạo bộ tìm kiếm cho site Bất động sản WordPress P.3

Bài viết này thuộc phần 3 trong tổng số 3 bài viết trong Serie Tạo bộ tìm kiếm BĐS cho Wordpress

 

 

 

 

Hướng dẩn thêm câu lệnh query để search

Thêm đoạn này vào

add_filter( 'pre_get_posts','bogtintonghop_custom_search_filter');
function bogtintonghop_custom_search_filter( $query ) {
if( $query->is_search && !is_admin() ) // 
{
if( isset($_GET['s'] ) ) {
            $query->set( 'post_type', array( 'nha_dat' ) );// ô search text. 
        }

 if( $query->is_main_query() ) {

}
}
 return $query;
}

Thêm đoạn này vào trong if $query->is_main_query()

$args[] = array( 'relation' => 'AND' );
      	if( isset( $_GET[ 'loai_nha_dat' ] ) && $_GET[ 'loai_nha_dat' ] != 'all' ) {

      		$args[] = 
      		array(
      			'taxonomy' => 'loai_nha_dat',
      			'field' => 'slug',
      			'terms' => $_GET['loai_nha_dat']
      			
      		);

      	}
      	if( isset( $_GET[ 'tinh_tp' ] ) && $_GET[ 'tinh_tp' ] != 'all' && $_GET[ 'xa_huyen' ] == 'all') {
      		$args[] = 
      		array(
      			'taxonomy' => 'dia_diem',
      			'field' => 'slug',
      			'terms' => $_GET['tinh_tp']
      		);
      	}
      	if( isset( $_GET[ 'xa_huyen' ] ) && $_GET[ 'xa_huyen' ] != 'all') {
      		$args[] = 
      		array(
      			'taxonomy' => 'dia_diem',
      			'field' => 'slug',
      			'terms' => $_GET['xa_huyen']
      		);
      	}
      	
      	$query->set( 'tax_query', $args );

đoạn này xử lý các taxonomy.

Tiếp tục thêm đoạn code này vào để search các field

if( isset( $_GET['huong_nha'] ) || isset( $_GET['giathap'] ) || isset( $_GET['giacao'] ) ) {


  $meta_query = array( 'relation' => 'AND' );

      // Hướng nhà
  if( isset( $_GET[ 'huong_nha' ] ) && $_GET[ 'huong_nha' ] != 'all' ) {
    $meta_query[] = array(
      'key' => 'huong',
      'value' => $_GET['huong_nha'],
      'compare' => '='
    );
  }

      // Giá
  if( isset( $_GET[ 'giathap' ] ) &&  $_GET[ 'giathap' ] != 0 ) {
    
    $meta_query[] = array(
      'key' => 'price',
      'value' => $_GET[ 'giathap' ],
      'type' => 'numeric',
      'compare' => '>='
    );
  }
  if( isset( $_GET[ 'giacao' ] ) &&  $_GET[ 'giacao' ] !=0  ) {
    
    $meta_query[] = array(
      'key' => 'price',
      'value' => $_GET[ 'giacao' ],
      'type' => 'numeric',
      'compare' => '<='
    );
  }
     
  $query->set( 'meta_query', $meta_query );
}

Tổng kết code search ngắn gọn chỉ có thể này thôi 

add_filter( 'pre_get_posts','bogtintonghop_custom_search_filter');
function bogtintonghop_custom_search_filter( $query ) {

  if( $query->is_search && !is_admin() ) {

    if( isset($_GET['s'] ) ) {
            $query->set( 'post_type', array( 'nha_dat' ) );// box text search
        }


        if( $query->is_main_query() ) { 
        	$args[] = array( 'relation' => 'AND' );
        	if( isset( $_GET[ 'loai_nha_dat' ] ) && $_GET[ 'loai_nha_dat' ] != 'all' ) {

        		$args[] = 
        		array(
        			'taxonomy' => 'loai_nha_dat',
        			'field' => 'slug',
        			'terms' => $_GET['loai_nha_dat']
        			
        		);

        	}
        	if( isset( $_GET[ 'tinh_tp' ] ) && $_GET[ 'tinh_tp' ] != 'all' && $_GET[ 'xa_huyen' ] == 'all') {
        		$args[] = 
        		array(
        			'taxonomy' => 'dia_diem',
        			'field' => 'slug',
        			'terms' => $_GET['tinh_tp']
        		);
        	}
        	if( isset( $_GET[ 'xa_huyen' ] ) && $_GET[ 'xa_huyen' ] != 'all') {
        		$args[] = 
        		array(
        			'taxonomy' => 'dia_diem',
        			'field' => 'slug',
        			'terms' => $_GET['xa_huyen']
        		);
        	}
        	
        	$query->set( 'tax_query', $args );

        	if( isset( $_GET['huong_nha'] ) || isset( $_GET['giathap'] ) || isset( $_GET['giacao'] ) ) {


        		$meta_query = array( 'relation' => 'AND' );

                // Hướng nhà
        		if( isset( $_GET[ 'huong_nha' ] ) && $_GET[ 'huong_nha' ] != 'all' ) {
        			$meta_query[] = array(
        				'key' => 'huong',
        				'value' => $_GET['huong_nha'],
        				'compare' => '='
        			);
        		}

                // Giá
        		if( isset( $_GET[ 'giathap' ] ) &&  $_GET[ 'giathap' ] != 0 ) {
        			
        			$meta_query[] = array(
        				'key' => 'price',
        				'value' => $_GET[ 'giathap' ],
        				'type' => 'numeric',
        				'compare' => '>='
        			);
        		}
        		if( isset( $_GET[ 'giacao' ] ) &&  $_GET[ 'giacao' ] !=0  ) {
        			
        			$meta_query[] = array(
        				'key' => 'price',
        				'value' => $_GET[ 'giacao' ],
        				'type' => 'numeric',
        				'compare' => '<='
        			);
        		}
                // đoạn code nào dành cho bạn nào tạo giá trong khoảng VD: 1ty - 2ty 
        		// if( isset( $_GET[ 'gia' ] ) && $_GET[ 'gia' ] != 'all' ) {

        		// 	$price = explode( "-", $_GET['gia'] );

        		// 	if( $_GET[ 'nhu-cau' ] == 'mua-ban' ) {
        		// 		$key = 'real_estate_price_for_sell';
        		// 	} else if( $_GET[ 'nhu-cau' ] == 'thue' ) {
        		// 		$key = 'real_estate_price_for_rent';
        		// 	}

        		// 	$meta_query[] = array(
        		// 		'key' => $key,
        		// 		'value' =>array( floatval( $price[0] ), floatval( $price[1] ) ),
        		// 		'type' => 'numeric',
        		// 		'compare' => 'BETWEEN'
        		// 	);
        		// }
        		$query->set( 'meta_query', $meta_query );
        	}

        }

    }

    return $query;
}

Các bạn cài plugin  All-in-One WP Migration để giải nén source ra nhé. download tại đây

Nguồn: https://blogtintonghop.com/huong-dan-tao-bo-search-bat-dong-san-wordpress-p-3/

Series Navigation<< Hướng dẫn tạo bộ tìm kiếm cho site Bất động sản WordPress P.2

1 thought on “Hướng dẫn tạo bộ tìm kiếm cho site Bất động sản WordPress P.3”

  1. chào bạn! mình cám ơn bạn vì bài viết khá hữu ích cho mình. nhưng mình là dân tay ngang không phải IT nên cũng không hiểu lắm, bạn có thể cho mình sđt liên lạc hoặc FB để trong quá trình mình làm không đc có thể hỏi bạn đc k ,, cám ơn bạn nhiều mong bạn hồi đáp

Leave a Comment

Email của bạn sẽ không được hiển thị công khai.