(nota: esta pergunta era originalmente sobre campos personalizados, mas o @MikeSchinkel tinha uma solução melhor que envolvia tipos de postagem personalizados)
No meu site, tenho várias páginas nas quais quero mostrar os mesmos dados na barra lateral. Por exemplo, em uma estrutura como esta:
-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
Gostaria que todas as páginas do Volvo 850 mostrassem os mesmos dados na barra lateral, todas as páginas da Porsche mostrassem um conjunto diferente de dados (por exemplo, Speed, Maker, etc.).
As páginas de estrada teriam seu próprio conjunto de dados para cada estrada. Carros e estradas também teriam um modelo de página próprio, e a maneira como eu acho que obteria a barra lateral certa é algo como isto no sidebar.php:
if ( is_page_template('car-profile-template.php') ) :
// show car widgets
Aqui está um exemplo de página, a página Volvo 850 Pictures. A mesma barra lateral (esquerda) deve aparecer nas outras páginas do Volvo 850, enquanto o material à direita é apenas o conteúdo da página.
| 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 | |
------------------ |
Neste exemplo, os dois widgets da barra lateral, Especificações e Classificação, devem receber suas informações de um Tipo de postagem personalizado. Existe um método que seria fácil para o usuário final editar, o que significa que eles precisariam inserir esses dados personalizados apenas uma vez? Pode não ser necessário que cada um dos campos seja separado (ou seja, todas as Especificações podem ser inseridas em um campo Editor e toda a Classificação pode ser colocada no campo Trecho .. talvez)
fonte
Respostas:
ATUALIZAR:
Com base na atualização da pergunta, acho que preciso declarar explicitamente que o que é solicitado na pergunta pode ser feito com a resposta abaixo, apenas usei campos personalizados no tipo de postagem personalizada "Carro" para cada um dos itens que você deseja exibir todas as páginas para um determinado carro.
Se você quiser fazer isso, basta codificar a barra lateral no
single-car.php
arquivo de modelo que incluí abaixo e usar suaif
declaração para determinar qual conteúdo será exibido para os diferentes URLs. Você poderia se esforçar para fazer o widget da barra lateral e desenvolver um widget personalizado, onde o widget extrairia as informações para o ID da postagem atual, mas por que ambos, a menos que você esteja criando isso como um tema para outras pessoas usarem?Na verdade, existem várias maneiras sutilmente diferentes de fazer isso, mas a que estou sugerindo deve ser maravilhosa para suas necessidades.
Oi @cannyboy:
Na verdade, não sei qual seria a melhor maneira de compartilhar campos personalizados nas postagens. Mas isso pode ser apenas a bandeira vermelha que você precisa. Se algo parece muito difícil, talvez ...
Uma abordagem alternativa?
... você poderia considerar a arquitetura diferente ? Eu acho que você ficará muito melhor criando um Tipo de postagem personalizado de "Carro" e poderá armazenar tudo para cada "página" no tipo de postagem de um carro. Aqui estão alguns exemplos de URLs:
Aprendendo sobre tipos de postagem personalizados
Você pode aprender mais sobre os Tipos de postagem personalizados nas respostas a estas perguntas:
Um tipo de postagem personalizada e uma regra de reconfiguração
Para implementar tipos de postagem personalizados e as várias páginas, use um código como o seguinte, que registra o tipo de postagem personalizada "Carro" e define uma regra de reescrita para as páginas de seu carro . Coloque esse código no
functions.php
arquivo do seu tema ou em um plug-in, o que você preferir:Um arquivo de modelo de tema específico para carros
Então você precisará de um arquivo de modelo específico do carro no seu tema ; o nome padrão para isso seria
single-car.php
. Eu codifiquei um modelo inicial para você que renderiza todos os três URLs (a (visão geral) , 'especificações técnicas' e 'imagens' ) em um modelo usando uma instrução if para determinar qual conteúdo renderizar:Observe no exemplo acima que estou sendo muito simplista com o uso de
get_post_meta()
; o site real precisaria ter muito mais complexidade lá.Tags de modelo, também conhecidas como Funções auxiliares
É claro que usei algumas tags de modelo, também conhecidas como funções auxiliares, para minimizar a complexidade no arquivo de modelo nas condições da instrução if . Aqui estão elas e você também pode colocá-las no
functions.php
arquivo do seu tema :Capturas de tela preenchidas com Custom Post Type Love
Depois de ter todo esse código em vigor e adicionar um post de carro como o Volvo 850, você poderá fazê-lo funcionar como as seguintes capturas de tela:
Página de visão geral
(fonte: mikeschinkel.com )
Página de especificações técnicas
Página de Imagens
fonte
Acho que alguém já deve ter respondido isso na outra pergunta que você postou (sobre páginas pai / páginas intermediárias), mas aqui está a melhor maneira de estruturar seus dados, com base no que você descreveu:
Dessa forma, você só precisa inserir os meta campos uma vez - na página pai - e nas páginas filhas, é possível extrair esses metadados do pai:
Obviamente, uma maneira ainda melhor de organizar isso seria ter um único tipo de postagem personalizado para cada modelo de carro que armazene todas as informações do carro e exibir as várias subpáginas com base em uma solicitação GET que é passada para a página e usada em o modelo de página como uma opção para determinar qual modelo será exibido. Dessa forma, você pode evitar completamente a duplicação de dados e facilitar a adição de mais informações ao modelo mais tarde ...
Mais detalhes...
Eu fiz isso de duas maneiras diferentes. Em um site em que eu tinha agentes (representantes da empresa) como um tipo de postagem personalizada, usei suas postagens para armazenar todos os dados relacionados a essa pessoa, mas nunca exibi essa página. Em vez disso, eu tinha uma página "Lista de agentes", uma página "Registro de desempenho do agente" e uma página "Entre em contato com este agente", sempre chamadas com uma variável GET e exibindo informações da postagem apropriada. Portanto, o link permanente se pareceria com site.com/agent-listing/?agent=john-smith .
Em outro site, configurei todas as informações em uma página e construí todas as três visualizações dessa página no modelo de página. No seu caso, isso seria algo como site.com/cars/volvo-850/?pictures .
E no modelo da página, você incluiria uma verificação para essa variável na parte superior do conteúdo:
fonte
Se você não deseja criar tipos personalizados de postagem, e simplesmente deseja incluir uma barra lateral personalizada para cada página ou postagem, use o plug-in da barra lateral graciosa. Isso permite criar conteúdo personalizado da barra lateral diretamente da tela de edição de postagem ou página usando campos adicionais chamados título e conteúdo graciosos. Eles são exibidos na área da barra lateral como um widget quando esta postagem ou página está sendo exibida no seu blog. Mais informações sobre este plugin estão disponíveis em http://www.mlynn.org/graceful-sidebar-plugin
fonte