(примечание: изначально этот вопрос был о пользовательских полях, но у @MikeSchinkel было лучшее решение с использованием пользовательских типов записей)
На моем сайте есть несколько страниц, на которых я хочу показать те же данные в боковой панели. Например, в такой структуре:
-Home
-Cars
-Volvo 850 overview
-Volvo 850 tech spec
-Volvo 850 pictures
-Porsche 911 overview
-Porsche 911 tech spec
-Porsche 911 pictures
-Roads
-Route 66 overview
-Route 66 history
-Route 66 pictures
-Pan-American Highway overview
-Pan-American Highway history
-Pan-American Highway pictures
Я хотел бы, чтобы все страницы Volvo 850 отображали одинаковые данные на боковой панели, а все страницы Porsche - разные наборы данных (например, Speed, Maker и т. Д.).
Страницы дороги будут иметь свой собственный набор данных для каждой дороги. Автомобили и дороги также будут иметь собственный шаблон страницы, и, как я полагаю, он получит правую боковую панель, что-то вроде этого в sidebar.php:
if ( is_page_template('car-profile-template.php') ) :
// show car widgets
Вот примерная страница, страница изображений Volvo 850. Та же самая (левая) боковая панель должна появиться на других страницах Volvo 850, в то время как справа - просто содержимое страницы.
| Home •Cars Roads |
--------------------------------------------------------
| Overview | Volvo 840 Pictures |
| Tech Spec | (some pics) |
| •Pictures | |
------------------ |
| -Specs- | |
| Volvo 850 | |
| Speed:150mph | |
| Maker:Volvo | |
| Download PDF | |
------------------ |
| -Rating- | |
| Style:3 | |
| Safety:5 | |
| Reliablity:4 | |
------------------ |
В этом примере два виджета боковой панели, спецификации и рейтинг должны получать информацию из пользовательского типа сообщения. Есть ли способ, который было бы легко отредактировать конечным пользователям, что означает, что ему придется вводить эти пользовательские данные только один раз? Возможно, нет необходимости разделять каждое из полей (т. Е. Все спецификации могут быть введены в поле редактора, а все рейтинги могут быть помещены в поле отрывка ... возможно)
источник
Ответы:
ОБНОВИТЬ:
Основываясь на обновлении вопроса, я думаю, что мне нужно явно указать, что то, что задано в вопросе, может быть сделано с ответом ниже, просто использовали настраиваемые поля в пользовательском типе записи «Автомобиль» для каждого из элементов, которые вы хотите отобразить на все страницы для данного автомобиля.
Если вы хотите сделать это, просто жестко закодируйте боковую панель в
single-car.php
файл шаблона, который я включил ниже, а затем используйте своеif
заявление, чтобы определить, какой контент отображать для разных URL-адресов. Вы могли бы приложить усилия, чтобы виджетизировать вашу боковую панель и разработать собственный виджет, в котором виджет извлекал бы информацию для текущего идентификатора сообщения, но почему бы и то и другое, если вы не создаете это как тему для использования другими людьми?На самом деле есть несколько хитроумных способов сделать это, но тот, который я предлагаю, должен удивительно удивиться вашим потребностям.
Привет @ cannyboy:
Я на самом деле не знаю, как лучше всего делиться пользовательскими полями между постами. Но это может быть просто красный флаг, который вам нужен. Если что-то кажется слишком сложным, может быть ...
Альтернативный подход?
... вы могли бы задуматься об этом по-другому ? Я думаю , вы будете гораздо лучше создать пользовательское сообщение Тип из «Автомобиля» , а затем вы можете хранить все для каждой «страницы» в посте одного типа автомобиля. Вот несколько примеров URL:
Изучение пользовательских типов сообщений
Вы можете узнать больше о пользовательских типах постов, ответив на следующие вопросы:
Пользовательский тип сообщения и правило переписывания
Для реализации пользовательских типов постов и нескольких страниц вы должны использовать код, подобный следующему, который регистрирует ваш пользовательский тип поста «Автомобиль», а затем устанавливает правило перезаписи для ваших автомобильных страниц . Поместите этот код в
functions.php
файл вашей темы или в плагин, в зависимости от того, что вы предпочитаете:Автомобиль -специфической Тема Файл шаблона
Тогда вам понадобится файл шаблона, специфичный для автомобиля, в вашей теме ; имя по умолчанию для этого будет
single-car.php
. Я написал для вас стартовый шаблон, который отображает все три URL-адреса ( (обзор) , «технические характеристики» и «картинки» ) в одном шаблоне, используя оператор if, чтобы определить, какой контент отображать:Обратите внимание, что в приведенном выше примере я очень упрощен с использованием
get_post_meta()
; реальный сайт должен был бы иметь намного больше сложности там.Теги шаблона ака вспомогательные функции
Конечно, я использовал некоторые теги шаблона или вспомогательные функции, чтобы минимизировать сложность файла шаблона в условиях оператора if . Вот они, и вы можете поместить их в
functions.php
файл вашей темы :Скриншоты заполнены Custom Post Type Love
Когда у вас есть весь этот код и вы добавили пост автомобиля, такой как Volvo 850, вы можете заставить его работать, как на следующих скриншотах:
Обзорная страница
(источник: mikeschinkel.com )
Страница технических спецификаций
Страница изображений
источник
Я думаю, что кто-то уже мог ответить на этот вопрос по другому вопросу, который вы разместили (о родительских страницах / промежуточных страницах), но вот то, что я думаю, лучший способ структурировать ваши данные на основе того, что вы описали:
Таким образом, вам нужно всего лишь один раз ввести мета-поля - на родительской странице - и на дочерних страницах вы можете извлечь эти метаданные из родительской страницы:
Конечно, еще лучший способ организовать это - иметь один отдельный тип поста для каждой модели автомобиля, в котором хранится вся информация об автомобиле, и отображать различные подстраницы на основе запроса GET, который передается на страницу и используется в шаблон страницы как переключатель, чтобы определить, какой шаблон отображать. Таким образом, вы можете полностью избежать дублирования данных и упростить добавление дополнительной информации в шаблон позже ...
Подробнее ...
Я сделал это несколькими разными способами. На одном сайте, где у меня были агенты (представители компаний) в качестве пользовательских типов сообщений, я использовал их сообщения для хранения всех данных, относящихся к этому человеку, но на самом деле никогда не отображал эту страницу. Вместо этого у меня была страница «Список операторов», страница «Отчет о производительности агента» и страница «Связаться с этим агентом», которые всегда вызывались с помощью переменной GET и отображали информацию из соответствующего поста. Таким образом, постоянная ссылка будет выглядеть примерно так: site.com/agent-listing/?agent=john-smith .
На другом сайте я установил всю информацию на одной странице и встроил все три представления для этой страницы в шаблон страницы. В вашем случае это будет выглядеть примерно так: site.com/cars/volvo-850/?pictures .
И в шаблон страницы вы должны включить проверку этой переменной в верхней части содержимого:
источник
Если вы не хотите создавать пользовательские типы сообщений и просто хотите добавить пользовательскую боковую панель для каждой страницы или сообщения, вы можете использовать плагин Graceful Sidebar. Это позволяет создавать пользовательский контент боковой панели прямо из экрана редактирования сообщения или страницы, используя дополнительные поля, называемые изящным заголовком и изящным содержимым. Затем они отображаются в области боковой панели как виджет, когда эта запись или страница отображается в вашем блоге. Более подробная информация об этом плагине доступна на http://www.mlynn.org/graceful-sidebar-plugin
источник