Posso criar um modelo de página, usá-lo uma vez e ocultar / remover a opção de usá-lo novamente?

2

Estou trabalhando em um tema / projeto do WP que inclui vários modelos de página personalizados que serão usados apenas uma vez em cada. Por exemplo, há uma página com um mapa e um formulário de pesquisa para encontrar coisas no mapa. Claramente, a página do mapa precisa de um modelo de página exclusivo, mas esse modelo nunca será usado para outras páginas. Gostaria de ocultar ou remover esse modelo de página do menu suspenso "Modelo". Por isso, quando o cliente está selecionando modelos de página, eles veem apenas as opções de seleção. Alguém sabe como fazer isso, ou eu deveria estar se aproximando disso de um ângulo totalmente diferente?

Obrigado Kirkland

++++++++++++++++

ATUALIZADO - Solução:

Para cada um dos modelos de página que eu queria usar apenas uma vez (ou seja: durante a configuração, antes de o cliente ter acesso), eu simplesmente removi ...

/*
Template Name: NAME_HERE
*/

Para que não seja exibido como uma opção ao adicionar uma nova página. Então eu substituí tudo em page.php com isso ...

if ( is_front_page() ) { include('page-home.php'); }
elseif ( is_page(22) ) { include('page-something.php'); }
elseif ( is_page(48) ) { include('page-whatever.php'); }
else{ include('page-default.php'); }

Tudo o que estava em page.php é movido para page-default.php . Ou você poderia simplesmente colocar tudo dentro da instrução else no final. De qualquer forma.

Isso funciona para mim porque eu farei a configuração para o cliente, então eu irei criar as páginas "one time only" antes de entregar esse projeto para eles - eu irei saber os IDs das páginas.

BTW ... Você não precisa manter o esquema de nomenclatura page-XXX.php para que isso funcione. Eu fiz isso para poder agrupá-los mais facilmente.

Eu deixei o comentário "Nome do modelo" nas páginas que eu quero que o cliente possa selecionar ao adicionar páginas (ex: "largura total" page-full.php ) e não adicione uma condição if ou inclua-as em page.php .

    
por Kirkland 27.04.2012 / 18:47

2 respostas

4

Se uma página não funcionar sem um modelo específico, apenas removerei a necessidade de selecionar um modelo. Filtre template_include e selecione o modelo com base na página solicitada:

function wpse50455_template_include( $template ) {
    // check if it's a page
    if ( is_page() ):
        $this_page_id = get_query_var( 'page_id' );
        // check for presence of meta data to determine what template you need
        // return the desired template if required
        return get_stylesheet_directory_uri() . '/my-special-template.php';
    endif;

    return $template;
}
add_filter( 'template_include', 'wpse50455_template_include' );
    
por Milo 27.04.2012 / 19:32
4

O WordPress já tem uma hierarquia interna de modelos de páginas para lidar com essa situação exata. Você não precisa manipular seu código page.php ou adicionar um filtro, basta seguir as convenções de nomenclatura para a hierarquia:

  • arquivo de modelo personalizado: o modelo de página atribuído à página. Vejo get_page_templates ().
  • page- {slug} .php - Se o slug da página estiver notícias recentes, o WordPress irá procurar usar o page-recent-news.php
  • page- {id} .php - Se o ID da página for 6, o WordPress irá procurar usar o page-6.php
  • page.php
  • index.php

de enlace

A maneira mais flexível é usar o Page Slug. Crie um template, por exemplo: page-my-slug.php e crie uma nova página com my-slug como se fosse slug.

No seu exemplo, 'page-something.php' será automaticamente carregado pelo WordPress para a página com o slug 'something'. Se você quiser usar o ID da página, no seu exemplo, crie 'page-22.php' como seu modelo.

    
por Sandra 04.11.2014 / 04:42