Hola, a ver si he entendido.
Tienes un directorio de médicos, los cuales serán entradas en la web, si cada médico es una entrada en el directorio puedes resolverlo de la siguiente forma.
crea un campo personalizado en las entradas, de forma que para cada médico puedas agregar la ciudad en la que se encuentra.
ahora por ejemplo para rellenar un select en e lcual se muestren las ciudades que aya algun médico registrado puedes utilizar algo como esto.
<?php
global $wpdb;
$ciudades_medic = '';
$ciudades_medic = $wpdb->get_results( $wpdb->prepare( "SELECT DISTINCT meta_value
FROM {$wpdb->postmeta}
WHERE meta_key = 'campo_ciudad'
ORDER BY meta_value ASC
"));
?>
<select class="search-select" id="ciudad" name="ciudad">
<?php
foreach ( $ciudades_medic as $ciudad )
echo "<option value='" . $ciudad->meta_value . "'>" . $ciudad->meta_value . "</option>";
?>
</select>
Con este código rellenas un select en el cual se mostraran todas las ciudades en las que se haya agregado algún médico.
Esto sería tipo formulario junto con los demás campos del criterio de busqueda, luego estos datos se recogen en el archivo searchform.php por ejemplo y se realiza otra consulta con los criterios seleccionado y se devuelven los resultados.
Como ves si lo quieres hacer con código propio es un poco complicado, revisa este plugins quizas te sirva: WP Custom Fields Search
Un Saludo.