サポート » 使い方全般 » 『カスタム投稿タイプ』VS『ページのテンプレート』それぞれのメリット

  • 首記の件でなやんでおります。

    下記のような状況と目的で、とりあえずの対処をしています。

    しかし、この状況と目的のために、もっと良い対処はございませんでしょうか?

    ———-

    【状況】
    ・固定ページAとBがある。
    ・ABいずれの記事にも同じカスタム投稿タイプXを使う。

    【目的】
    ・Aの記事にはサイドバーaを、Bの記事にはサイドバーbを表示したい。

    【とりあえずの対処】
    ①カスタム投稿タイプはXという1種類だが、phpファイルを複数作る。(「X-A.php」と「X-B.php」)
    ②そうして「X-A.php」には、<?php get_sidebar('サイドバーa'); ?>と書いて
    もう一方のX-B.phpには、<?php get_sidebar('サイドバーb); ?>と書く。

    ———-

    サイドバーのために同じphpファイルを作るところが、いまいちスマートではない印象を受けますし、重くなったりしないか?不安です。

    条件分岐とかプラグインとかあるようですが、何がなぜオススメか、ご教示いただければ幸いです。
    どうぞよろしくお願いいたします。m(__)m

6件の返信を表示中 - 1 - 6件目 (全6件中)
  • meijinochoco さん

    サイドバーの部分で何をしたいかにもよりますが
    わたくしの場合なのですが、サイトバーはかなりの確率で最新記事とかタクソノミーなので
    カスタム投稿タイプの場合は、単純にカスタムタイプのslugを取得して
    取得できたら最新X件って感じで、共通化させています。

    PHPを減らすという感じでしたら、if or switch で切り替えるのが無難じゃないですかね。

    ただ、ひな型化すれば、複雑な処理をしなくて良いのでそれはそれで確実なのでわたくし自身は嫌いではないんですけど、ケース バイ ケースですかね。

    わたくしの場合
    1.先頭行の取得方法で対応できるもの⇒getで対応
    2.条件分岐しなくてはいけなくかつ標準的なもの ⇒ IF
    3.同上 かつ 特殊なもの ⇒ switch・case
    4.クエリーなどあまりに複雑や負荷をかけるもの ⇒ PHPを作成

    みたいな流れで使ってますよ。

    具体的な状況がわかれば、もう少し具体的な回答できるかもしれないです。
    おそらくですが、クエリー使うよりは直に書いた方がDB等に負荷はかからないはずですよ。

    トピック投稿者 meijinochoco

    (@meijinochoco)

    ご回答ありがとうございます。m(__)m
    素人すぎて少し理解が追いつきませんけれど、今後の参考にご提示いただいた使い方パターンはエバーノート行きにさせていただきます。笑

    さて具体的な状況ですが、個人的すぎて書くのは憚られるのですが、、お時間ございましたら聞いてくださいまし。

    まず表示させたい別のサイドバーaとbというのは、同じサイドバーの単なる色違いにすぎないんです。

    で通常は、サイドバーウィジェットにaというサイドバーをドラッグすると、そのサイドバーウィジェットと連携しているページには全てaが表示されてしまいますよね。

    なので私はサイドバーをドラッグする場所をaとb用に作りました。(function.phpに書くやつです)

    さて、次が悩みどころです。

    カスタム投稿タイプはXという1種類なので、Xのphpファイルに2種類のサイドバー呼び出し命令を書いて、状況に応じてどっちか表示してね。とするのが、スマートな印象です。

    つまり、
    <?php get_sidebar(‘サイドバーa’); ?>か、
    <?php get_sidebar(‘サイドバーb’); ?>なんだけど、
    固定ページAならaで、bならbを表示してね。
    という命令をXという1つのphpファイルに書くべきだと思います。

    しかしその指示の書き方が分かりません。

    そこでやったのが【とりあえずの対処】でした。
    X-aとX-bを作って、それぞれに別の命令文を書くというものです。

    X-aには、<?php get_sidebar(‘サイドバーa’); ?>を呼び出してね。
    X-bには、<?php get_sidebar(‘サイドバーb’); ?>を呼び出してね。
    として、2つのphpファイルを作りました。

    で、質問に至ったのわけです。

    こうしてphpファイルを量産するのは悪いことかも?
    どっちか表示してねという命令文の書き方を勉強した方がいいかな?

    という、あぁ、ここまで書いて、なんと人様にどうでもいいことを書いてしまったんだと後悔してますけれど笑、とりあえず、、そんなわけでございました。

    あ。最後に。こんな場合ですと、mura0403さんの4つの方法のうち2番に該当するのでしょうか?

    meijinochoco さん

    サイドバーの作り方というか、どこで条件を定義するかで分岐地点が結構変わると思うのですが。

    1、1つのサイトバーですべて行いたい
    ⇒サイトバーの中でIF

    2、サイトバーの読み方自体を制御したい
    ⇒getをIF文で制御

    となると思うのですが

    どのみち、IFをかますのであれば
    meijinochocoさんのおっしゃる通り、「サイトバーの中でIF」となります。

    多分追加されたもの(functions.php)は「register_sidebar」を使ったものだとおもうのですが

    サイドバーの中身は基本的にはウィジットの認識で進みます。
    例えば、通常ウィジットの取得では以下の方法なんかが一般的だと思います

    ※IF ウィジットに何か入れはウィジットを実行しkますってやつです

    <div id=”side” class=”side”>
    <?php
    if(is_active_sidebar(‘custom_widget1’)){ dynamic_sidebar(‘custom_widget1’); }
    ?>
    </div>

    これに条件を振るのであれば、

    <?php
    if (is_page()) ://もし固定ページ内だったら
    ?>
    <div id="side" class="side">
     <?php
          if(is_active_sidebar('custom_widget1')){ dynamic_sidebar('custom_widget1'); }
     ?>
    </div>
    <?php
    elseif(get_post_type() =='カスタム投稿タイプslug' ):
    ?>
    
    <div id="side-2" class="side">
     <?php
          if(is_active_sidebar('custom_widget2')){ dynamic_sidebar('custom_widget2'); }
     ?>
    </div>
    <?php endif; ?>

    みたいな感じですかね?
    すみません、走り書きで。。。

    っとここまで来て、読み返してみたらなんかずれてました。

    固定ページの条件分岐の場合
    テンプレート OR slug OR IDで分岐すると思うのですが

    私の場合、ページテンプレートで振り分けることが多いのでとりあえず

    <?php
    if(is_page_template('page-a.php')):
      get_sidebar('サイドバーa');
    elseif(is_page_template('page-b.php')):
      get_sidebar('サイドバーb');
    endif;
    ?>

    なんて作りですかね?

    IDの場合 is_page( ’42’ )
    slugやタイトルの場合 is_page( ‘about-me’ )
    って感じで分岐だと思います

    条件分岐はコーデックスを見れば大体乗ってますよ。

    サイトの規模や仕組みによって「phpの優先度 VS 条件分岐」って結構なやみどころですよね。

    意外と利用するのが階層のルールですかね。
    IFよりも優先度が高いので、タクソノミーなどでよく使っています。
    テンプレート階層

    なんか長くなってしまいましたが
    固定ページの振り分けの場合、どこの軸(どの条件)で判断させるかは、運用的なお話なので、そのあたり踏まえて、どのタイミングでIFをつけるか作成頂ければと思います。

    トピック投稿者 meijinochoco

    (@meijinochoco)

    ありがとうございます!

    2番目に書いていただいた
    (is_page_template(‘page-a.php’))
    という2つは、あれ?何を言っていることになるのでしょうか?
    これをカスタム投稿タイプXのphpに書いたけれど、無視されてしまいました。笑

    と、ここで、なんと、、
    まったく今更ちょっとアリエナイことを言うのですが、、

    よく考えたら私の目的は、
    「固定ページAにリンクがついてたら、サイドバーaを出して、Bにリンクがついてたらbを出してね。このカスタム投稿タイプXに。」
    というものでして、つまり、「リンクがついてるか否か」という条件分岐でした。

    そんなの無理ですよね。

    まったく、夜分にお付き合いいただいて、まことに申し訳ございません。

    しかし、(こっちの都合な感想ですけれど笑)とっても勉強になりました。ほんっとうにありがとうございました。

    出先から失礼致します。

    もしかして、こんな感じですかね?

    1.固定ページにカスタムフィールド設定

    1が入力された場合は→条件分岐?
    この組み方なら、結構簡単に出せると思います。

    コンテンツ内だと、結構大変かもしれないです。

    リンクをどう出されてるかで、条件分岐の方法が変わってきますので、その辺りの仕様詳しく教えていただけますでしょうか?

    よろしくお願い致します。

    スレッドタイトルと中身がずれてるんでは?

    仮に固定ページで作るなら、
    固定ページのテンプレートを複数(A,B)作って、
    それぞれのページを作った時にページテンプレートを選べばいいのでは。
    (2)のテンプレートは固定ページのテンプレートになる。
    Aの記事にはaのサイドバーのページテンプレートを。
    Bの記事にはbのサイドバーのページテンプレートを。
    みたいな感じ。

    ページ数が増える(あるいはpostの形式をつかう)なら、
    サイドバー表示分岐用のカスタム分類を作って、
    記事作成時にどちらか選択して、
    それを取得してget_sidebarを変えてあげればどうなんでしょうか。

6件の返信を表示中 - 1 - 6件目 (全6件中)
  • トピック「『カスタム投稿タイプ』VS『ページのテンプレート』それぞれのメリット」には新たに返信することはできません。