web-dev-qa-db-ja.com

カスタム投稿タイプ用の複数のテンプレート

Wordpressを初めて使用するユーザーとして、プリセットテンプレートの構造は、私が使用していた他のテンプレートルーティングCMSの柔軟性による制限を少し制限することに気付きました。

これを言って、私はたくさんの回避策があることを知っています、そして私は現在それらを確立しようとしているところです。

-

私が見つけている主な障害の1つは、コンテンツを複数の場所に集めていることです。現在、同じ投稿タイプのコンテンツを2つのセクションまたはテンプレートに出力しようとしています。

たとえば、私はバルーン関連の投稿を持つカスタム投稿タイプ "ballons"があります。これらの記事を2つの異なるテンプレート/セクション(この例では通常版とモバイル版)に出力したいです。

Url構造は理想的にはこれを表します。

/ {post_type}/{post_slug}

/ ballons/my_red_ballon_post /モバイル/ ballons/my_red_ballon_post

このURL構造を特定のテンプレートにルーティングする方法を私が知っている唯一の方法は、ページを使用することです。ただし可能であれば、ページ固有のコンテンツがないため、ページにエントリを入れないようにしてください。

-

これが設定されたら、私はすべての私の風船のリストページを作成したいです。この設定が上記のような特定の投稿を出力するのと同じか違うかを知りたいのですが。

URL構造は次のようになります。

/風船/ /携帯/風船/

-

あなたの時間をありがとう:D

- ポール

1
paulcol.

モバイルは良い例ではないかもしれません - レスポンシブデザイン がそれを引き受けます。

これが私のプロジェクトであれば、私は少し異なるアプローチをとるでしょう。 URLの前に付ける代わりに、書き換え用のエンドポイントを携帯に付けます。 template_includeフィルタの使用と組み合わせたエンドポイントは機能します。

だから、あなたはこのようなパーマリンク構造で終わることになります

/{post_type}/{post_slug}

/{post_type}/{post_slug}/mobile

他の場所でこれを説明する 多くの答えがあります。 mobileエンドポイント用。

<?php
add_action('init', 'wpse74553_add_endpoints');
function wpse74553_add_endpoints()
{
    // EP_ALL adds the endpoint to everything.
    add_rewrite_endpoint('mobile', EP_ALL);
}

// this makes the naked `mobile` endpoint work vs. having to
// use something `mobile/works`.
add_filter('request', 'wpse74553_filter_request');
function wpse74553_filter_request( $vars )
{
    if(isset($vars['mobile']))
        $vars['mobile'] = true;

    return $vars;
}

mobileクエリ変数が設定されている場合は、そこからtemplate_includeフィルタにフックしてテンプレートを変更できます。

<?php
add_filter('template_include', 'wpse74553_include');
function wpse74553_include($t)
{
    if(get_query_var('mobile'))
    {
         // you have a request with the mobile endpoint
         $t = 'mobile-template.php';
    }

    return $t;
}

注意すべき唯一のことはtemplate_includeがすべてのリクエストで起動するということです。それは具体的ではありません - それであなたがそれを使いたいならば、あなたはおそらく上記より多くのチェックをする必要があるでしょう。より具体的なフィルタもたくさんあります。 wp-includes/template.php を見て、具体的には関数 get_query_template を見てください。 。

シングル投稿の場合は、例えばsingle_templateフィルタを使用できます。

つまり、テンプレートの階層によって制限されることはまったくなく、template_includeまたは任意の{{type}}_templateフィルタを使用して自由に変更できます。

5
chrisguitarguy

私のお気に入りのWordPress参考資料の一つ: http://codex.wordpress.org/File:Template_Hierarchy.png

Archive-"custom-post-type" .phpやsingle- "custom-post-type" .phpなどのカスタム投稿タイプのオプションに注意してください。

あなたがモバイル対標準のプレゼンテーションのために同じコンテンツの異なるバージョンを作成したい場合、これはスタイルシートとメディアクエリの問題ではないですか?あなたのデザインが正しくレイアウトされていれば、あなたはモバイル版のために提示された最小限のコンテンツを持つべきです、そしてそれがモバイルでなければ、あなたはより多くの二次コンテンツと二次デザイン要素を利用可能にします。

レスポンシブデザインを計画するのではなく、モバイル版のページを作成するという長所と短所をまとめた別の記事があります。 http://mobile.smashingmagazine.com/2012/05/ 24 /作成 - モバイル最適化 - ウェブサイト - 使用 - ワードプレス/

お役に立てれば。

pS私は2つのOで「風船」をつづるのに慣れていますが、たぶんそれは彼らが私の出身のところでそれをする方法です。

2
Brent