web-dev-qa-db-fra.com

Puis-je créer un modèle de page, l'utiliser une fois, puis masquer/supprimer l'option de l'utiliser à nouveau?

Je travaille sur un thème/projet WP qui comprend plusieurs modèles de page personnalisés qui ne seront utilisés qu'une seule fois. Par exemple, il existe une page avec une carte et un formulaire de recherche permettant de rechercher des éléments sur la carte. Il est clair que la page de carte nécessite un modèle de page unique, mais ce modèle ne sera jamais utilisé pour d'autres pages. Je souhaite masquer ou supprimer ce modèle de page dans le menu déroulant "Modèle". Ainsi, lorsque le client sélectionne des modèles de page, il ne voit que les options parmi lesquelles il doit sélectionner. Quelqu'un sait comment faire cela, ou devrais-je aborder cette question sous un angle totalement différent?

Merci, Kirkland

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

MISE À JOUR - Solution:

Pour chacun des modèles de page que je voulais utiliser une seule fois (c'est-à-dire: lors de l'installation, avant que le client ait accès), j'ai simplement supprimé ...

/*
Template Name: NAME_HERE
*/

Pour que cela ne s'affiche pas comme une option lors de l'ajout d'une nouvelle page. Puis j'ai tout remplacé dans page.php par ceci ...

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'); }

Tout ce qui était dans page.php est déplacé vers page-default.php. Ou vous pouvez simplement tout mettre dans la déclaration else à la fin. D'une manière ou d'une autre.

Cela fonctionne pour moi car je vais effectuer la configuration pour le client. Je vais donc créer les pages "une seule fois" avant de leur confier ce projet. Je connaîtras les ID de page.

BTW ... Vous n'avez pas besoin de conserver le schéma de nommage page-XXX.php pour que cela fonctionne. Je viens de faire cela pour pouvoir les regrouper plus facilement.

J'ai laissé le commentaire "Nom du modèle" dans les pages que je souhaite que le client puisse sélectionner lors de l'ajout de pages (par exemple: "largeur totale" page-full.php) sans ajouter de condition if ni l'inclure dans page.php.

2
Kirkland

Si une page ne fonctionne pas sans un modèle spécifique, je supprime simplement la nécessité pour eux de sélectionner un modèle. Filtrez template_include et sélectionnez le modèle en fonction de la page demandée:

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' );
4
Milo

WordPress a déjà une hiérarchie de modèles de page intégrée pour gérer cette situation exacte. Vous n'avez pas besoin de modifier votre code page.php ou d'ajouter un filtre, il vous suffit de suivre les conventions de dénomination de la hiérarchie:

  • fichier de modèle personnalisé: modèle de page attribué à la page. Voir get_page_templates ().
  • page- {slug} .php - Si le slug de page est recent-news, WordPress cherchera à utiliser page-recent-news.php
  • page- {id} .php - Si l'ID de la page est 6, WordPress cherchera à utiliser page-6.php
  • page.php
  • index.php

depuis http://codex.wordpress.org/Template_Hierarchy

Le moyen le plus flexible consiste à utiliser le slug de page. Créez un modèle, par exemple: page-my-slug.php, puis créez une nouvelle page avec my-slug en tant que slug.

Dans votre exemple, "page-quelquechose.php" sera automatiquement chargé par WordPress pour la page avec le slug "quelque chose". Si vous souhaitez utiliser l'ID de page à la place, à partir de votre exemple, créez "page-22.php" comme modèle.

4
Sandra