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

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/