web-dev-qa-db-ja.com

2つの異なるテンプレートを読み込む2つの異なるURLを同じページに設定するにはどうすればよいですか。

次のページがあります。

http://liquidchurch.com/messages/

デスクトップやモバイルウェブでは問題ないようです。

私はモバイルアプリに取り組んでおり、アプリ内のページをカプセル化するためにWebビューを使用しています。問題は、モバイルアプリで表示するときにヘッダー/フッターをページの一部にしたくないが、デスクトップまたはアプリの外でモバイルブラウザを使用している場合はそれらを表示したいことです。

どのようにこれを達成することができるか、または私がそれについてすべて間違っているのであれば、何か考えはありますか?ありがとうございます。

5
davemackey

これは、書き換えエンドポイントとテンプレートフィルタを使って実現できます。

まず、投稿タイプpageに新しい書き換えエンドポイントを登録します。

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

書き換えルールをフラッシュすることを忘れないでください これを追加した後に(または単にコードなしでこれを行うにはパーマリンク>設定ページにアクセスしてください).

これで、ページパーマリンクURLの最後にapp-view/を追加できるようになります。たとえば、あなたのページはdomain.com/messages/app-view/になります。

次のステップはapp-view/が存在するときを検出し、その場合は別のテンプレートをロードすることです。ページ投稿タイプには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' );

これは、グローバルquery_vars['app-view']オブジェクトに$wp_queryが設定されているかどうかをチェックし、この場合はapp-view-template.phpテンプレートをロードします。これは、app-view書き換えルールが現在のリクエストと一致する場合にのみ当てはまります。

7
Milo