goodee
@goodee
начинающий веб-разработчик

Как реализовать региональность сайта в WordPress?

6bbef51ec4c846868d173a1534efbd13.png
Каким образом можно реализовать региональность сайта на WordPress 4?
Во время решения задачи столкнулся с с проблемами:
  1. Если организовывать таксономию по принципу: "site.ru/город/рубрика/страница", то в главном меню будет отображаться города, а рубрики будут их подменю.
    Как сделать так, чтобы в произвольном меню в шапке сайта можно было выбрать город, и тогда:
    • путь сменился бы, например, на "site.ru/moskva/"
    • навигационное меню сменилось бы на то, что в конкретном городе
    • виджет с адресом и телефоном в шапке сменился заданный по городу?

  2. Проблемы с одинаковыми слагами страниц и постов.
    Например: "site.ru/moskva/page" и "site.ru/newyork/page", где "moskva" и "newyork" - это категории таксономии в WordPress, а "page" - это страница.

Возможно, есть какие-то готовые и хорошие решения и плагины для реализации данной задачи?
  • Вопрос задан
  • 4281 просмотр
Решения вопроса 1
goodee
@goodee Автор вопроса
начинающий веб-разработчик
Повозился немного и решил проблему.
Сначала проблема с одинаковыми слагами страниц в WordPress:
Все до смешного просто, создаем страницы, а у нужных выбираем "Родительский элемент".
Например:
site.ru/moskva/article
site.ru/kazan/article
где moskva и kazan - это родительские страницы соотвественно двух разных страниц article.
С этим всё просто и понятно.

Далее я создал "произвольные поля" у страниц городов - "tel" и "address".
В functions.php темы WordPress добавил следующие строчки:
// узнаем самый первый родительский элемент (страницу города)
function parent_postID() {
	global $post;
	$postID = $post->ID;
	if ($post->post_parent) {
		$anc = get_post_ancestors($postID);
		$root = count($anc)-1;
		$parentID = $anc[$root];
	} else {
		$parentID = $postID;
	}
	return $parentID;
}

// узнаем самую корневую страницу
function show_gorod() {
	global $post;
	$postID = $post->ID;
	$parentID = parent_postID();
	if (!is_front_page() and ($parentID or $postID)) {
		$city_name = get_the_title($parentID);
		$city_link = get_the_permalink($parentID);
		$city_class = 'gorod';
		$city_string = '<a class="'.$city_class.'" href="'.$city_link.'">'.$city_name.'</a>';
	} else {
		$city_name = 'Выберите город:';
		$city_class = 'gorod small';
		$city_string = '<p class="'.$city_class.'">'.$city_name.'</p>';
	}

	return $city_string;
}

После чего на любой дочерней странице и странице города отображалась информация записанная в родительской странице.
Достаточно было указать в шаблоне <?php echo show_gorod() ?>
и выводилась нужная информация.

Так что всем спасибо за ответы-советы *sarcasm*.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы