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