ОК, что вам нужно сделать, это присоединиться к одной и той же таблице (wp_postmeta) дважды под разными псевдонимами, чтобы вы могли использовать различные условия «ГДЕ».У меня нет ваших таблиц, поэтому я не могу проверить это, но вы должны использовать этот подход:
SELECT wp_posts.*,
(`alias_1`.meta_value) AS `lat`,
(`alias_2`.meta_value) AS `lng`,
(3959 * acos( cos( radians(41.367682) ) * cos( radians( `lat` ) ) * cos( radians( `lng` ) - radians(2.154077)) + sin(radians(41.367682)) * sin( radians( `lat` )))) AS `distance`
FROM wp_posts
LEFT JOIN `wp_postmeta` AS `alias_1` ON wp_posts.ID = alias_1.post_id
LEFT JOIN `wp_postmeta` AS `alias_2` ON wp_posts.ID = alias_2.post_id
WHERE
wp_posts.post_status = 'publish'
AND wp_posts.post_type = 'page'
AND wp_posts.post_date < NOW()
AND `alias_1`.meta_key = 'position'
AND `alias_1`.meta_value LIKE '41.%'
AND `alias_2`.meta_key = 'position'
AND `alias_2`.meta_value LIKE '2.%'
GROUP BY wp_posts.`ID`
ORDER BY `distance` ASC
У меня могут быть некоторые синтаксические ошибки, но я считаю, чтологика примерно верна.Дайте мне знать, если это работает.