Улучшенный поиск в Classipress
Добавляет улучшенный поиск в боковую панель категории. Позволяет уточнять результаты поиска не только по цене, но и по пользовательским полям тоже, задавая в них границы поиска «от» и «до» через тире.
Откройте на редактирование файл classipress/includes/search.php
и заменить следующие коды:
Код №1
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
default: if ( 'cp_' == substr( $key, 0, 3 ) ) { $field = $wpdb->get_row( $wpdb->prepare( "SELECT * FROM $wpdb->cp_ad_fields WHERE field_name = %s", $key ) ); if ( $field === null ) break; $compare = ( in_array( $field->field_type, array( 'radio', 'checkbox', 'drop-down' ) ) ) ? 'IN' : 'LIKE'; $meta_query[] = array( 'key' => $key, 'value' => $value, 'compare' => $compare ); } break; |
на следующий:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
default: if ( 'cp_' == substr( $key, 0, 3 ) ) { $field = $wpdb->get_row( $wpdb->prepare( "SELECT * FROM $wpdb->cp_ad_fields WHERE field_name = %s", $key ) ); if ( $field === null ) break; if ( strpos($value, '-') ) { $minusPos = strpos($value, '-'); $value = array( trim(substr($value, 0, $minusPos)), trim(substr($value, $minusPos+1, strlen($value) ) ) ); $meta_query[] = array( 'key' => $key, 'value' => $value, 'compare' => 'BETWEEN', 'type' => 'numeric' ); } else { $compare = ( in_array( $field->field_type, array( 'radio', 'checkbox', 'drop-down' ) ) ) ? 'IN' : 'LIKE'; $meta_query[] = array( 'key' => $key, 'value' => $value, 'compare' => $compare ); } } break; |
Код №2
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
default : if ( 'cp_' == substr( $key, 0, 3 ) ) { $field = $wpdb->get_row( $wpdb->prepare( "SELECT * FROM $wpdb->cp_ad_fields WHERE field_name = %s", $key ) ); if ( $field === null ) break; $refine_count++; if ( is_array( $value ) ) $value = implode( "','", $value ); $compare = ( in_array( $field->field_type, array( 'radio', 'checkbox', 'drop-down' ) ) ) ? "IN ('$value')" : "LIKE '%$value%'"; $query .= " AND ("; $query .= "(mt" . $refine_count . ".meta_key = '$key')"; $query .= " AND (CAST(mt" . $refine_count . ".meta_value AS CHAR) $compare)"; $query .= ")"; } break; |
На следующий:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
default : if ( 'cp_' == substr( $key, 0, 3 ) ) { $field = $wpdb->get_row( $wpdb->prepare( "SELECT * FROM $wpdb->cp_ad_fields WHERE field_name = %s", $key ) ); if ( $field === null ) break; $refine_count++; if ( strpos($value, '-') ) { $minusPos = strpos($value, '-'); $value = array( trim(substr($value, 0, $minusPos)), trim(substr($value, $minusPos+1, strlen($value) ) ) ); $compare = "BETWEEN '$value[0]' AND '$value[1]'"; } else { if ( is_array( $value ) ) $value = implode( "','", $value ); $compare = ( in_array( $field->field_type, array( 'radio', 'checkbox', 'drop-down' ) ) ) ? "IN ('$value')" : "LIKE '%$value%'"; } $query .= " AND ("; $query .= "(mt" . $refine_count . ".meta_key = '$key')"; $query .= " AND (CAST(mt" . $refine_count . ".meta_value AS CHAR) $compare)"; $query .= ")"; } break; |
