Ну, реализацию вам тут вряд ли кто-то будет делать - задача более-менее объемная и скорее для фриланса, нежели Тостера. Логика в целом проста:
- Делаете селект с городами
- Выбор сохраняете в куку на клиенте
- При заходе получаете куку
- Исходя из значения в куке подгружаете нужные данные
- Сами данные храните как удобно, скорее всего это будет Options API. Для этого создаете свою страницу настроек, в ней поля для каждого города. Значения сораняете с идектификатором города, который и будет храниться в куке (или лучше вообще сериализованным массивом в одном поле).
Недостатки подхода без геолокации:
- пользователю нужно руками выбрать город
- куки не сильно долговременное хранилище, их часто чистят, поэтому после чистки выбор надо делать повторно
Для зарегистрированных и авторизованных пользователей можно добавить дополнительную фичу - сохранять их выбор в wp_usermeta для их пользователя, тогда не будет зависимости от кук. В идеале, конечно, лучше использовать и то, и другое - это позволит сохранить выбор пользователя даже если он вышел из аккаунта. Тут еще нужна дополнительная логика для сравнения и обработки значений в куке и в базе (потому что пользователь мог сменить выбор в куке, когда был не авторизован). Плюс надо куку когда-то обновлять.
Геолокация не решит вопрос полностью, я бы советовал все равно комбинировать с кукой. Геолокация всего лишь позволит не заставлять пользователя выбирать вручную. И в большинстве случаев, когда его местонахождение соответствует нужному ему городу, ему не придется никогда ничего менять.