こんにちは
実現したいことがちょっとピンとこないところがあるのですが、同じ投稿について、何らかの条件でテンプレートを切り替えたいということでしょうか?
もしそうだとすれば、どのような場合にどちらのテンプレートを使うかという条件はどのようなものでしょうか?
例)午前中は A 午後は B
など
それとも単に投稿によってテンプレートを変更したいということでしょうか?
お返事ありがとうございます。
現在フランチャイズの加盟情報を投稿欄のカスタムフィールドに登録して、
各店舗ごとのページを生成しています。
このカスタムフィールドのデータベースをもとに、各店舗ごとのLPも別に作成したいと考えております。
条件によって表示を切り替えるのではなくて、別のURLによって異なるデザインのページができたらいいなと考えています。
簡単そうにみえるのですが、仕様的に難しいという意見があり、
以下のようなプラグインで対応するように検討をしているところではあります。
https://design-remarks.com/wp-multisite-broadcast/
加盟店情報の投稿IDを指定すればカスタムフィールドの値を取得することが出来ますので、固定ページ(LP)で投稿のカスタムフィールド値を取得して表示することが出来ます。
LP の固定ページ投稿画面に加盟店情報の投稿IDを設定するカスタムフィールドを追加し、固定ページ表示時にそのIDをもとに加盟店情報を取得して表示します。
カスタムフィールドは何かのプラグインで実現されているのでしょうか?
Advanced Custom Fields であればLPの固定ページで各店舗の投稿を選択するように出来るので、投稿IDを調べて指定する必要がなく便利です。
ありがとうございます。
良かった。Advanced Custom Fieldsをカスタムフィールドに使っております。
ちょっと、イメージがつかないのですが。
例えば、30件の加盟店があり、その数(30件)の投稿記事が登録されています。
固定ページを利用してのLPを表示するとなると、30件分の固定ページを用意することに
なりますでしょうか?
よろしくお願いいたします。
私の説明ですと、そうなります。
URL のパラメータで加盟店の 投稿 ID を渡すことで、1つの固定ページで実現することも可能です。
URL で加盟店ごとの内容を固定ページとして表示される場合、以下のような感じで LP にアクセスされることを想定しています。
https://example.com/shop?shop_id=123
ここでのパラメータ123
は加盟店情報の投稿IDです。
このURLでアクセスされる固定ページのテンプレートには以下のよう加盟店の情報を取得できます。
if ( isset( $_GET['shop_id'] ) && ctype_digit( $_GET['shop_id'] ) ) {
$shop_id = $_GET['shop_id'];
$shop_name = get_field( 'name', $shop_id );
$shop_description = get_field( 'description', $shop_id );
}
shop_id が渡されなかった場合や、IDに該当する加盟店情報が無い場合の分岐も何か必要と思います。
ありがとうございます。
固定ページに、カスタムフィールドのデータを利用するアイデアは思いつかなったです。
https://example.com/shop?shop_id=123
このURLについてお伺います。
現在以下のようなURLに、各店舗情報を投稿テンプレートによって生成しています。
http://example.com/shop/sapporo/
LPのアドレスを以下のようにする場合は、やはり、固定ページは各店舗ごと用意した方がよろしいでしょうか?」
http://example.com/shop/lp/sapporo/
よろしくお願いいたします。
LPのアドレスを以下のようにする場合は、やはり、固定ページは各店舗ごと用意した方がよろしいでしょうか?
http://example.com/shop/lp/sapporo/
という URL によるアクセスをどのような方法で実現するかによると思います。
リライトルールの追加で実現し、且つsapporo
という文字列と加盟店情報を紐づけ可能であれば、固定ページは1つで可能だと思います。
例えば、加盟店情報がsapporo
という値を持つカスタムフィールドを持っているなど。
タクソノミーで階層を実現するのであれば、sapporo
という部分のスラッグで固定ページが決まってしまうので各店舗ごとに用意するしかないと思います。
ありがとうございました!
イメージつかみました。マルチサイトを用意よりもスマートです。
実際にこの方法で作成していきたいと考えます。
ところで、一番最初の疑問に戻りますが、
一つの「カスタム投稿」に対して、対応する「テンプレート(phpファイル)」は一つなのは、
WP仕様として事実でしょうか?
仕様です。
仕様ですが、条件によってget_template_part
やinclude
を使ってインクルードするファイルをかえることで、テンプレートを切替えて表示内容をコントロールすることが出来ます。
今回で言えば、加盟店情報のスラッグがsapporo
であれば、
http://example.com/shop/sapporo/
でアクセスされている場合と、リライトルールを追加して
http://example.com/shop/lp/sapporo/
でアクセスされている場合とでインクルードファイルを変えるなどです。
これは最初に申し上げた、
同じ投稿について、何らかの条件でテンプレートを切り替えたい
ということにへの対応になります。
しかし、スラッグ(sapporoにあたる部分)は加盟店情報と店舗では同じではない場合もあるかもと思い、この方法の紹介は避けました。
ありがとうございます。やはり、そこは仕様なのですね。
でも表示は、調整できるということですね。
だいぶ理解できるようになりました。
参考にさせて制作を進めてまいります。
数日もの間、お付き合いいただきありがとうございました。