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
.
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' );
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:
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.