В настоящее время у клиента есть веб-сайт, настроенный с тремя отдельными дочерними сайтами (запущенными из одной установки WordPress), каждый из которых имеет немного другую тему (одинаковая компоновка, разная цветовая схема).
В настоящее время я настроил его таким образом, что каждый дочерний сайт представляет собой страницу со всеми его страницами в качестве дочерних. Заголовок.php проверяет, какая страница является родительской, и включает соответствующий стиль.
Проблема возникает со страницами, которые идентичны на всем сайте, и клиент хочет, чтобы они были доступны с каждого дочернего сайта как отдельная страница.
Например, страница about должна быть доступна из /site1/about и /site2/about и использовать тему для сайта, который ее запросил, но отображать один и тот же контент на обоих.
Я мог бы просто создать дочерние страницы и установить rel=»canonical» для ссылки на оригинал, но с точки зрения обслуживания было бы предпочтительнее иметь одну страницу, с которой извлекается контент на каждом из дочерних сайтов.
Итак, на вопрос, как мне получить несколько URL-адресов/страниц для извлечения их содержимого из одного источника?
РЕДАКТИРОВАТЬ: Вот пример желаемой структуры:
- http://www.example.com — отображает ссылки на три основных сервиса, а также общую информацию
- http://www.example.com/about — отображает информацию о клиенте, оформленную в соответствии с http://www.example.com.
- http://www.example.com/service1 — отображает навигацию, относящуюся к конкретной услуге, оформленную в ее собственном цвете, вместе с общими ссылками (о нас, контакты).
- http://www.example.com/service1/about — отображает навигацию и таблицу стилей для /service1, но с использованием содержимого с http://www.example.com/about (и с канонической ссылкой на http://www.example.com/about).
Затем это повторяется для /service2 и /service3.
Нужны ли вам функции WordPress Multisite, или возможно, что вам действительно нужно, чтобы один сайт реагировал по-разному в зависимости от того, с какого домена к нему обращаются?
Подсайты являются частью одного и того же домена, они просто представляют различные предлагаемые услуги, я отредактирую исходный пост с примерами структуры.
Сколько страниц типа «о» ? Только один или много? Являются ли они стандартными для каждого сайта, или на некоторых сайтах могут быть страницы «A», «B» и «C», тогда как на других сайтах есть «A», «D» и «E» ? Будете ли вы устанавливать их один раз, и пользователь никогда их не изменит, или пользователям нужно будет гибко назначать и переназначать? Будут ли URL-слаги всегда совпадать на разных сайтах? Будет ли «сервис» настраиваемым типом записи (или, если в настоящее время страницы, они могут быть CPT?)
@MikeSchinkel Есть несколько подобных, которые должны быть одинаковыми на каждом дочернем сайте. (/ о, / контакт, / отзывы, / счета-платежи, / требования). Все они будут на каждом сайте, и они являются фиксированными, URL-адреса будут одинаковыми, поэтому /service1/about, /service2/about. Клиенту не нужно иметь возможность создавать новые или изменять их. Спасибо!
Похоже, это должно быть именно то, что мне нужно! Я посмотрю через пару дней и вернусь к вам. Спасибо за вашу помощь @MikeSchinkel.
@Ross Bearman — надеюсь, это сработает для вас.
Спасибо за отличный совет, код и пошаговое руководство @MikeSchinkel, это было бесценно.
@Росс Бирман — Ура! Рад, что смог помочь. (Я люблю отвечать на такие вопросы!)
@MikeSchinkel Извините, что прошу большего, но, как объяснено в исходном вопросе, у каждой службы есть своя тема. В настоящее время это обрабатывается несколько хакерски в заголовке, используя следующий код:
<?php elseif(is_page(site_service1_page()) || $post->post_parent == site_service1_page()): ?> <link href="<?php bloginfo('stylesheet_directory'); ?>/css/screen-service1.css" rel="stylesheet" type="text/css" />
Это не работает с системой базовых служб, поэтому есть ли лучший способ получить корневой путь (например, service1) в заголовке?Я все еще борюсь с точными требованиями, но если я правильно понимаю, я думаю, что вы можете добиться своих целей, если будете использовать код, который я вам привожу ниже, а затем выполните следующие действия:
Создайте страницу для каждой из ваших услуг (что, похоже, вы уже сделали):
/service1/
,/service2/
, и т. д.Создайте «базовую» страницу службы с URL-адресом
/base-service/
; не волнуйтесь, никто никогда не увидит это за пределами сайта.Назначьте
/base-service/
родительской (или прародительской) страницей все «виртуальные общие» дочерние страницы, которые вы хотите реплицировать в каждой службе.Создайте любые страницы для конкретных служб, которые вы также можете захотеть иметь, и назначьте их соответствующей странице (например, «Сервис 2»).
Создайте шаблон страницы в своей теме для вызываемых вами служб
page-service.php
и убедитесь, что каждая из ваших служебных страниц использует этот шаблон страницы (это необходимо, чтобы мы могли определить, какие из ваших страниц предназначены для служб).Итак, вот код класса, который я назвал,
Yoursite_SharedChildPages
который вы можете хранить в файле вашей темыfunctions.php
или в.php
файле плагина, который вы можете написать для своего сайта:И вот несколько скриншотов, которые могут проиллюстрировать упомянутые выше шаги:
Дайте мне знать, если это не то, что вы искали, и/или если вы столкнулись с чем-то, что необходимо решить с помощью этого решения в дополнение к тому, что я закодировал. Удачи!