Дублировать запрос, построенный с помощью PHP и Mysql, но теперь в WordPress

Im пытается дублировать php mysql-скрипт, который я создал, но для работы в WordPress. Мой обычный PHP-скрипт с mySQL, который работает и возвращает результаты просто отлично со следующими варами, был

$currLat = "43.653226"; $currLong = "-79.383184"; $blank = ""; $byDistance = "25"; $params = Array($currLat,$currLong,$currLat,$blank,$byDistance); $sql = $appDb->rawQuery('SELECT *, ( 6371 * acos( cos( radians(?) ) * cos( radians( bLat ) ) * cos( radians( bLong ) - radians(?) ) + sin( radians(?) ) * sin( radians( bLat ) ) ) ) AS distance FROM business WHERE business.bLat != ? HAVING distance < ? ORDER BY distance' , $params); 

Мне не удалось создать WP_Query с помощью args, чтобы сделать то же самое в WordPress?

 $args = array( 'post_type' => 'el2business', // What else goes here to build the same query as my PHP mySQL Query Above // I Have a meta box called bLat in my custom post type // I have a meta box called bLong in my custom post type ); 

поэтому я могу работать, чтобы получить результаты?

 $query = new WP_Query( $args ); if( $query->have_posts() ){ while( $query->have_posts() ){ $query->the_post(); $string .= '<li>' . get_the_title() . '</li>'; } } wp_reset_postdata(); return $string; 

Похоже, что ваш запрос выходит за пределы сферы, что «нормально» для WP API.

Существует два общих подхода:

  1. Держите его полностью в SQL. Если вы можете понять, как адаптировать его к схеме WP, вы можете использовать $wpdb->get_results() для запуска произвольного запроса, получения того, что вам нужно, и оттуда оттуда.
  2. Выполнение этого с помощью WP_Query является более сложным, поскольку параметры пользовательского поля не работают с более сложной математикой / логикой. Вам нужно будет использовать фильтры WP для внесения изменений в SQL, которые он генерирует «на лету».

В целом я бы сказал, что вариант 2 – это то, что имеет смысл для более опытного разработчика с конкретным WP.

Если вам нравится общий PHP и SQL, но не так много с WP, то просто переход к 1, вероятно, будет быстрее для начинающих.