質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

1回答

681閲覧

「カスタム投稿タイプ内の特定の分類にだけ」という条件付けの方法がわかりません

Euri_K

総合スコア32

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

1クリップ

投稿2021/11/24 03:36

編集2021/11/24 04:50

前提・実現したいこと

WORDPRESSにカスタム投稿タイプ「location」を配置し、
中に「店舗(タクソノミー名:store)」という分類を設け、それぞれに「nagoya」「tokyo」といった地域名でスラッグを設定しました。
このスラッグを利用し、各店舗ごとの詳細ページやアーカイブページに対して
特定のHTMLソースを追加したいのですが、
どのようにheader.phpに記載してよいかわかりません。

発生している問題・エラーメッセージ

カスタム投稿タイプの個別ページ・アーカイブページに対して、 上記分類に応じた内容を表示したいが、なにも表示できない状態

該当のソースコード

function.php

add_action( 'init', 'create_post_type' ); function create_post_type() { register_post_type( 'location', [ // 投稿タイプ名の定義 'labels' => [ 'name' => '店舗ブログ', // 管理画面上で表示する投稿タイプ名 'singular_name' => 'location', // カスタム投稿の識別名 ], 'public' => true, // 投稿タイプをpublicにするか 'has_archive' => true, // アーカイブ機能ON/OFF 'menu_position' => 5, // 管理画面上での配置場所 'supports' => array( 'title', 'editor', 'thumbnail', 'revisions', 'excerpt', 'custom-fields', ), 'rewrite' => array('slug' => 'location', 'with_front' => false), 'show_in_rest' => true, // 5系から出てきた新エディタ「Gutenberg」を有効にする ]); //カテゴリを投稿と共通設定にする // register_taxonomy_for_object_type('info-cat', 'infopage'); // //タグを投稿と共通設定にする // register_taxonomy_for_object_type('post_tag', 'infopage'); } // // カスタム分類(カスタムタクソノミー) // function add_taxonomy() { //店舗 register_taxonomy( 'store', 'location', array( 'label' => '店舗', 'singular_label' => '店舗', 'labels' => array( 'all_items' => '店舗一覧', 'add_new_item' => '店舗を追加' ), 'public' => true, 'show_ui' => true, 'show_in_nav_menus' => true, 'hierarchical' => true ) ); //カテゴリー register_taxonomy( 'location_cat', 'location', array( 'label' => 'カテゴリー', 'singular_label' => 'カテゴリー', 'labels' => array( 'all_items' => 'カテゴリー一覧', 'add_new_item' => 'カテゴリーを追加' ), 'public' => true, 'show_ui' => true, 'show_in_nav_menus' => true, 'hierarchical' => true ) ); } add_action( 'init', 'add_taxonomy' );

header.php

<?php if (get_post_type() === 'location' && is_single('')): ?> 「特定のHTMLソース」 <?php endif; ?>

これで詳細ページ全てに表示できるのはわかったのですが、
個別の店舗ごとにソースを分ける必要があり、
is_singleに上記のスラッグ名を入れたところ条件外となってしまいます。

また、各店舗ごとのアーカイブページについては方法が全くわかっていない状態です。

よろしくおねがいします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nekora

2021/11/24 04:41

肝心な、カスタム投稿を定義しているソースコードが提示されていません。 このままでは、答えるに答えられません。質問は編集できますので、 カスタム投稿を定義しているソースと、カテゴリーやタグに該当するカスタムタクソノミーを設定している場合は、 それのイメージも公開してください。そうすれば答えられます。
Euri_K

2021/11/24 04:52

function.phpの、該当箇所らしき部分を追記しました。 途中から運用を引き継いでおり、不足分がまだあるかもしれません。ご指摘いただければ幸いです。
Euri_K

2021/11/29 02:47

追記頂いてありがとうございます。お返事が遅くなりましてすみません。 いただいた内容をもとに、各店舗ごとにコンバージョンタグをechoで出力する形で、うまくいきました。 非常に助かりました…!
nekora

2021/11/29 03:55

上手くいったみたいでよかったです。
guest

回答1

0

ベストアンサー

回答を修正しました。header.phpに追記するコードを追記しました。

ああ、そういうことでしたか。では、header.phpに以下のコードを追記してみてはどうでしょう。
環境が違うので、テストまでは出来ませんでしたので、値が取れてない等ありましたら、
コメントでお知らせください。

header.php

php

1 if( is_post_type_archive( 'location' ) || is_singular( 'location' )) { //アーカイブページかシングルページの投稿タイプがlocationだった場合 2 $terms = get_the_terms( $post->ID, 'store' ); 3 if ( $terms && ! is_wp_error( $terms ) ){ 4 foreach ( $terms as $term ) { 5 switch ($term->slug) { 6 case 'nagoya': 7 nagoyaのGoogleのコンバージョンタグ等を出力 8 break; 9 case 'tokyo': 10 tokyoのGoogleのコンバージョンタグ等を出力 11 break; 12 default: 13 あり得ないけど、ここにstoreが設定されていなかった場合の処理を記述 14 break; 15 } 16 } 17 } 18 }

ここから下は必要ないとのことでしたが、他の方の参考になれば幸いなので残しておきます

まず、このカスタム投稿を表示したい場合、アーカイブがtrueになっているので

archive-location.php

php

1 <?php if ( have_posts() ) : ?> 2 <?php 3 $post_count = $wp_query->post_count; //実際にそのページで取得した件数 4 $found_posts = $wp_query->found_posts; //条件に当てはまる全件数 5 if( is_user_logged_in() ) { 6 echo "post_count=$post_count<br>"; 7 echo "found_posts=$found_posts<br>"; 8 } 9 ?> 10 11 12 <?php while ( have_posts() ) : ?> 13 <?php the_post(); ?> 14 <div> 15 ここに表示コードを書く 16 </div> 17 <?php endwhile; ?> 18 <?php else: ?> 19 <p class="nodata">投稿はありません。</p> 20 <?php endif; ?> 21

で、表示できます。

次に、ユーザーが店舗を指定してきた場合は、
taxonomy-store.php

php

1コードは特別なこと(サブループとかしない限り)archive-location.phpと同じです

で、storeごとのアーカイブページとなってstoreごとの記事一覧が出ます。
何故なら、ユーザーがそのストアを選択した場合このtaxonomy-store.phpにたどり着く前に
WordPressが必要なクエリーを発行して自動的にそのストアに絞り込んだデータを渡してくるからです。

そして、個別の記事を表示したい場合は、
single-location.php

php

1 ここに各店舗の個別記事表示用のコードを書く

これで、OKです。header.phpは関係ありません。

一応概略で回答しましたが、storeを選ばせるにはどうするの?等、わからないことがあれば、コメントください。
出来る範囲で対応します。

投稿2021/11/24 05:43

編集2021/11/26 01:43
nekora

総合スコア501

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nekora

2021/11/24 05:46

回答が役になったなら回答の横の数字をポイントすると回答の評価の増減ができます。 また解決につながった回答はベストアンサーに指定できます。 この設定は個別に指定できまし、同時に設定することもできます。
Euri_K

2021/11/24 06:17

すみません、taxonomy-store.phpやsingle-location.phpを利用したアーカイブページや個別のページは最初から運用ができておりまして、なぜheader.php内で条件分岐を記載したいかということについては<head>タグの中に店舗ごとに異なるGoogleのコンバージョンタグやビーコンの類を追加したいからなのです。 最初にこのページを作成した方も、それが実現できなかったのかフォローが全くされておりませんでして、困っています。
nekora

2021/11/25 02:32

そういうことでしたか。回答を編集してみました。 動作確認は、環境が違うので出来ていませんが、値が取れてない等ありましたら、コメントください。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問