Par exemple:
site.com/contact
(ou site.com/?page=contact
si vous n'utilisez pas de liens permanents)
quand quelqu'un va sur cette page, je veux charger un template de thème, comme page-contact.php
Mais je ne veux pas créer de page dans le tableau de bord pour ce travail. Comment puis-je faire cela en interne, dans functions.php?
Je sais que c'est possible parce que le plugin bbpress le fait d'une manière ou d'une autre pour les/utilisateurs/pages, qui ne sont pas des pages wordpress standard ...
C'est la technique que j'utilise actuellement sur un site. Cela implique d'enregistrer une requête var pour "template", et d'enregistrer un noeud final appelé /contact
, qui réécrit en interne en ?template=contact
. Ensuite, il vous suffit de rechercher cette variable de requête au niveau du hook template_redirect. Si elle existe, incluez le modèle de page que vous souhaitez charger et quitter.
/* Add a query var for template select, and and endpoint that sets that query var */
add_action( 'init', 'wpse22543_rewrite_system' );
function wpse22543_rewrite_system() {
global $wp, $wp_rewrite;
$wp->add_query_var( 'template' );
add_rewrite_endpoint( 'contact', EP_ROOT );
$wp_rewrite->add_rule( '^/contact/?$',
'index.php?template=contact', 'bottom' );
$wp_rewrite->flush_rules();
}
/* Handle template redirect according the template being queried. */
add_action( 'template_redirect', 'wpse22543_select_template' );
function wpse22543_select_template() {
global $wp;
$template = $wp->query_vars;
if ( array_key_exists( 'template', $template ) &&
'contact' == $template['template'] ) {
/* Make sure to set the 404 flag to false, and redirect
to the contact page template. */
global $wp_query;
$wp_query->set( 'is_404', false );
include( get_stylesheet_directory().'/contact.php' );
exit;
}
}
Cela servira votre fichier contact.php pour toute demande de? Template = contact ou/contact.
Il y a probablement un moyen plus rapide de le faire, mais cela fonctionne. Voici un tutoriel plus complet: Créer de fausses pages dans WordPress .
Vous pouvez le faire comme vous l'avez dit. Il est intégré à la hiérarchie des modèles de Wordpress depuis la 2.9.
Si vous avez une page nommée Contact, créez un modèle de page appelé page-contact.php différent de page.php. Et voila, ça marche.
De la documentation WP.
Modèles par page-ID ou page-Slug
Vous pouvez utiliser différentes archives "page", avec ID ou slug à votre nom. Disponible uniquement avec la version 2.9.
exemples:
page-{id}.php page-{slug}.php
C'est ce que tu voulais?