web-dev-qa-db-fra.com

Créer des pages intégrées sans créer de pages réelles

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 ...

4
Emma

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 .

6
goldenapples

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?

0
danielwiener