У меня есть поле поиска, которое позволяет пользователю искать места и почтовые индексы. Когда пользователь вводит значение поиска, у меня есть два скрытых поля ввода, которые заполняют широту и долготу на основе выбора пользователя.Изменить поисковый запрос в Wordpress
Я хочу выполнить запрос, который осуществляет поиск сообщений с скрытыми входными значениями -. latitude
и longitude
и не каких типов пользователей в
<form role="search" method="get" id="searchform" class="searchform" action="">
<div class="search">
<input type="text" value="" name="s" id="search-input" class="s" placeholder="Enter your Location or Postcode" />
<input type="hidden" value="profile" name="post_type" id="post_type" />
<input type="hidden" value="country" name="taxonomy" />
<input type="hidden" name="latitude" id="latitude" />
<input type="hidden" name="longitude" id="longitude"/>
<input type="submit" id="searchsubmit" value="Search" class="submit btn" />
</form>
Как я могу заменить поисковый запрос полностью с другим запросом на поиск сообщений, основанных на выборе пользователем широты и долготы?
Это SQL-запрос, который я хочу, чтобы заменить главный запрос с:
SELECT SQL_CALC_FOUND_ROWS wp_posts. *
FROM wp_posts
WHERE 1 =1
AND wp_posts.ID
IN (
SELECT post_id
FROM lat_lng_post
WHERE (3959 * ACOS(COS(RADIANS(- 27.922459)) * COS(RADIANS(lat)) * COS(RADIANS(lng) - RADIANS(153.334793)) + SIN(RADIANS(- 27.922459)) * SIN(RADIANS(lat)))) <=125
)
LIMIT 0 , 30
У меня есть функция готова, но я не уверен, Wordpress крючок я должен использовать, чтобы изменить поисковый запрос в другой один without modifying the search template:
function custom_search()
{
global $wpdb;
if (is_search())
$latitude = filter_input(INPUT_GET, "latitude", FILTER_SANITIZE_STRING);
$longitude = filter_input(INPUT_GET, "longitude", FILTER_SANITIZE_STRING);
$radius = 125;
$sql = "SELECT SQL_CALC_FOUND_ROWS wp_posts. *
FROM wp_posts
WHERE 1 = 1
AND $wpdb->posts.ID IN (SELECT post_id FROM lat_lng_post WHERE
(3959 * acos(cos(radians(%f))
* cos(radians(lat))
* cos(radians(lng)
- radians(%f))
+ sin(radians(%f))
* sin(radians(lat)))) <= %s)";
$sql = $wpdb->prepare($sql, $latitude, $longitude, $latitude, $radius);
//$wpdb->show_errors();
$results = $wpdb->get_results($sql);
//$wpdb->print_error();
return $results;
}
Любая помощь будет оценена.
Можете привести пример? Поскольку я хочу полностью изменить запрос, а не только его части. – input
Ах, извините - post_clausules будет лучше. См. Обновленный ответ. –