Arquivo de tema para todas as páginas que são filho de uma página específica

É possível dentro da hierarquia de nomenclatura do arquivo de tema atual definir um modelo para todas as páginas que são filho de uma página específica? Por exemplo, nesta navegação:

Sobre nós

  • Contato
  • Quem nós somos
  • Declaração de mensagem

Existe alguma maneira de fazer um arquivo de tema chamado algo como:

page-about-us-all.php

Isso seria aplicado automaticamente a todas as páginas que são crianças de Quem Somos?

ATUALIZAR

Fui com uma versão modificada do que sugeriu Bainternet. Aqui está a function descendente que acabei com:

function is_descendant($ancestor, $tofind = 0) { global $post; if ($tofind == 0) $tofind = $post->ID; $arrpostids = get_post_ancestors($tofind); $arrpostslugs = array(); foreach($arrpostids as $postid) { $temppost = get_post($postid); array_push($arrpostslugs, $temppost->post_name); } return (in_array($ancestor, $arrpostids) || in_array($ancestor, $arrpostslugs)); } // Example use: is_descendant('about-us'); is_descendant(123); is_descendant('about-us', 134); 

Isso me permite verificar se é um descendente usando a ID do pai ou o slug. Eu estava preocupado que usar apenas o ID pode levar a um problema se uma página principal tivesse sido acidentalmente destruída, não haveria uma boa maneira de conseguir que isso funcionasse novamente sem ter que editar os arquivos do Tema. Com a lesma, pelo menos, há a opção de apenas entrar e fazer uma nova página com a mesma slug e hierarquia.

Solutions Collecting From Web of "Arquivo de tema para todas as páginas que são filho de uma página específica"

Eu tenho uma pequena function condicional customizada que faria o trabalho para você.

A function:

 function is_child_page($page = NULL){ global $post; if ($page == NULL){ $p = get_post($post->ID); if ($p->post_parent > 0 ){ return true; }else{ return false; } } $args = array( 'child_of' => (int)$page); $pages = get_pages($args); foreach ($pages as $p){ if ($p->ID == $post->ID){ return true; break; } } return false; } 

Uso:

 if (is_child_page()){ //this page has a parent page } if (is_child_page(23)){ //this page is a child page of the page with the ID of 23 } 

Agora você pergunta como isso pode ajudá-lo?

Depois de ter esta function guardada no arquivo functions.php do seu tema, page.php arquivo page.php do seu tema e adicione no máximo algo como isto:

 if (is_child_page(12)){ include (TEMPLATEPATH . '/page-about-us-all.php'); exit(); } 

E você terminou! Nota: este código está assumindo que o seu id sobre a página é: 12 e seu arquivo de tema é nomeado: page-about-us-all.php .

Isso pode ser muito mais simples e não dependerá de funções separadas.

Supondo que desejemos verificar se a página atual é filho da página 134 , deixando cair o seguinte na parte superior da sua page.php seria suficiente:

 < ?php if (134 == $post->post_parent) { include (TEMPLATEPATH . '/page-mysubpagetemplate.php'); // Name this for your child page template name exit(); } else { // Do something else // You might want to stick your regular page.php code in here, or alternatively, you could call another template }; ?> 

Isso não é possível, por padrão, no sistema de modelos WordPress. A hierarquia do modelo não detecta o relacionamento da página pai-filho. No entanto, eu encontrei esta publicação no blog , explicando um método para automatizar o processo. Não tentei implementá-lo, então não comprovo a sua eficácia, mas vale pelo menos uma leitura.

(Nota: esta input do blog gera sua function em ‘save_post’, o que significa que a troca do Modelo de Página acontece somente quando a postagem é salva. Isso geralmente deve funcionar, uma vez que a alteração da Página Principal requer uma ação de salvar. No entanto, você pode precisar de um diferente gancho, se você precisar atualizar retroactivamente o modelo da página.)