サポート » 使い方全般 » 遷移元でテンプレートを変えたい

  • 解決済 t t

    (@tsugubai)


    以下のようなカテゴリ構成を作っています。

    (親)book
    ∟(子)new-book

    (親)doll
    ∟(子)new-book

    そして、ページ上部のナビゲーションバーには、以下のように表示されています。

    | book | doll | new |

    book は、bookカテゴリの投稿を表示(一覧はカテゴリーテンプレートを、単一投稿はシングルテンプレートを使用)
    doll は、dollカテゴリの投稿を表示(一覧はカテゴリーテンプレートを、単一投稿はシングルテンプレートを使用)
    new は、new-book カテゴリの投稿と、new-dollカテゴリの投稿の両方を表示(一覧はページテンプレートを、単一投稿はシングルテンプレートを使用)

    という感じです。

    そして、パンくずも表示させています。(Breadcrumb NavXT)

    いま、newのページで一覧表示させている投稿のリンクから、単一投稿ページを表示させると、記事の親カテゴリのシングルテンプレートで表示されてしまい、困っています。
    newのメニューから入ったときのnew-bookとnew-dollカテゴリの記事は、あたかもnewというカテゴリがあるかのように、newメニューの中で表示を完結したいのですが、たとえばnew-dollの単一投稿を表示させようとすると、それまでnewメニューの中にいたのに、いきなりdollメニューのページに飛ばされてしまうのです。

    親カテゴリを表示させるテンプレート(single.php)の先頭に、「子カテゴリなら子カテゴリのテンプレートを使用」というコードを書いてみたのですが、これだと今度は、bookメニューから入っても、dollメニューから入っても、子カテゴリの記事はみんなnewのページで表示されてしまいます。
    親カテゴリのメニューから入った場合は、子カテゴリも親カテゴリのメニュー内で表示を完結したいのです。

    このように、遷移元で使用するテンプレートを分けたいのですが、このようなことは可能でしょうか?

    また、これが実現可能なカテゴリ構成などもあればアドバイスお願いいたします。

2件の返信を表示中 - 1 - 2件目 (全2件中)
  • 遷移元(リファラ)をチェックしてあげればよさそうです。(以下未検証)

    A案

    <?php
    // single.php の先頭
    if ( isset($_SERVER['HTTP_REFERER']) && strpos($_SERVER['HTTP_REFERER'], 'http://example.com/new' !== false ) {
        return include(TEMPLATEPATH . '/single-new.php');
    }
    ?>

    B案

    // アーカイブ NEW の the_pemalink() を変更
    // パラメータを追加して、「http://example.com/******?ref=new」とする
    <a href="<?php echo esc_url(add_query_arg('ref', 'new', get_permalink())); ?>">
    
    <?php
    // single.php の先頭
    if ( isset($_GET['ref']) &&  'new' === $_GET['ref'] ) {
        return include(TEMPLATEPATH . '/single-new.php');
    }
    ?>

    A案のほうが手軽ですが、ユーザーの環境によってリファラーを取得できない場合もあります。

    B案は、異なるアドレスで同一コンテンツへリンクすることになるので、「rel=”canonical」でURLを正規化したり、Google ウェブマスターツールから 「?ref=new」パラメーターを無視するような設定をされた方がいいかと思います。

    なお、the_pemalink() 部分は JavaScript を利用してレンダリング後にを書き換える、という方法も考えられます。

    スレッド開始 t t

    (@tsugubai)

    レスありがとうございます。
    お返事が遅くなり申し訳ございません。

    A案は、なぜかうまくいかず。
    echo $_SERVER[‘HTTP_REFERER’] するときちんと入っているのが見えるのですが。。

    B案でうまくいきました!!
    やっと前に進めます(涙
    esc_url や add_query_arg の使い方など、とても勉強になりました。
    Codexばかり見ていてもだめですね。。ソースを見て勉強します。

    B案は、異なるアドレスで同一コンテンツへリンクすることになるので、「rel=”canonical」でURLを正規化したり、Google ウェブマスターツールから 「?ref=new」パラメーターを無視するような設定をされた方がいいかと思います。

    ↑こちらが、勉強不足で現在後回しにしているのですが。。
    ビジネスサイトに使うので、きっと必須なのでしょうね。
    こちらもアドバイスありがとうございました!!

2件の返信を表示中 - 1 - 2件目 (全2件中)
  • トピック「遷移元でテンプレートを変えたい」には新たに返信することはできません。