web-dev-qa-db-fra.com

Comment puis-je avoir deux URL différentes pour la même page qui chargent deux modèles différents?

J'ai la page suivante:

http://liquidchurch.com/messages/

Il semble bien sur le bureau et le Web mobile.

Je travaille sur une application mobile et j'utilise un affichage Web pour encapsuler la page dans l'application. Le problème est que je ne veux pas que l'en-tête/le pied de page fasse partie de la page lorsqu'elle est affichée dans l'application mobile, mais que ces derniers soient visibles lorsque vous utilisez un ordinateur de bureau ou un navigateur mobile en dehors de l'application.

Des idées sur la façon dont cela peut être accompli ou si je vais à ce sujet tout faux? Merci!

5
davemackey

Vous pouvez accomplir cela avec un noeud final de réécriture et un filtre de modèle.

Commencez par enregistrer un nouveau point de terminaison de réécriture pour le type de publication page:

function wpd_app_view_rewrite_endpoint() {
    add_rewrite_endpoint( 'app-view', EP_PAGES );
}
add_action( 'init', 'wpd_app_view_rewrite_endpoint' );

N'oubliez pas de vider les règles de réécriture après l'ajout (ou visitez simplement la page Permaliens> Paramètres pour le faire sans code).

Vous pourrez désormais ajouter app-view/ à la fin de toute URL de lien permanent, par exemple, votre page sera domain.com/messages/app-view/.

L'étape suivante consiste à détecter la présence de app-view/ et à charger un autre modèle dans ce cas. Pour le type de publication de page, nous utilisons le filtre page_template:

function wpd_app_view_page_template( $template ) {
    global $wp_query;
    if( isset( $wp_query->query_vars['app-view'] )  ) {
        $template = locate_template( array( 'app-view-template.php' ) );
    }
    return $template;
}
add_filter( 'page_template', 'wpd_app_view_page_template' );

Ceci vérifie si query_vars['app-view'] est défini dans l'objet global $wp_query et charge le modèle app-view-template.php dans ce cas. Cela ne sera vrai que lorsque la règle de réécriture app-view correspond à la demande en cours.

7
Milo