カスタム投稿タイプの表示–テンプレートとクエリ
公開: 2016-09-26これは、カスタム投稿タイプ(CPT)に関するシリーズの3番目で最後の記事です。 最初の2つで説明したトピックは次のとおりです。
- カスタム投稿タイプ(作成方法)
- カスタム分類法
1番目と2番目の記事では、お客様の声のカスタム投稿タイプとお客様の声のカスタム分類法を登録しました。 私たちは今、私たちのサイトに推薦状を表示する必要があります。 そこで、お客様の声のテンプレートを作成する方法、それらをクエリする方法、およびサイトの任意の場所に表示する方法を見ていきます。
デフォルトのカスタム投稿タイプテンプレート
パラメータhas_archive
をtrueに設定してCPTを作成しました。これにより、すべての紹介文がアーカイブページに表示されます。
WordPressは、テンプレート階層を使用して、さまざまなタイプのコンテンツを表示します。 カスタム投稿タイプの場合、次を検索します。
アーカイブ-{post_type} .php
シングル-{post_type} .php
これらのテンプレートがテーマで定義されていない場合は、一般的なテンプレートが検索されます。
archive.php
single.php
これらのテンプレートでさえ定義されていない場合は、デフォルトでindex.phpテンプレートになります。
この場合、Shakaテーマにはsingle.phpがありますが、 archive.phpテンプレートはありません。 これは、デフォルトで、単一の紹介文ページにsingle.phpテンプレートを使用することを意味します。 また、 index.phpテンプレートを使用して、お客様の声のアーカイブページにすべてのお客様の声を表示します。
お客様の声は、次のページにあるお客様の声のアーカイブページに表示されます。
http://your-domain-goes-here.com/?post_type = testimonials
かなりのパーマリンクを有効にしている場合は、次のURLでページにアクセスすることもできます。
http://your-domain-goes-here.com/ testimonials
(注:きれいなパーマリンクが機能しない場合は、wp-admin->設定->パーマリンクに移動して設定し、希望どおりに設定して設定を保存してください)
まず、新しく登録したCPTの紹介文にいくつかの紹介文を書き込む必要があります。これにより、表示するデータがいくつかあります。 3つの紹介文を追加しました。これは、お客様の声のアーカイブページのデフォルトのレイアウトがShakaテーマでどのように表示されるかを示しています。
ご覧のとおり、レイアウトは問題ありませんが、「作成者別」や日付など、表示されるデータの一部は必要ありません。 また、testimonial_serviceカスタム分類法は表示されないため、カスタムテンプレートに追加します。
CPTのカスタムテンプレートを作成する
前のセクションで述べたように、2つのテンプレートを作成する必要があります。 archive-testimonials.phpとsingle-testimonials.php 。 この例では、 archive-testimonials.phpテンプレートのみを作成します。
これらのファイルは子テーマで作成する必要がありますが、簡単にするために、 archive-testimonials.phpファイルをShakaテーマに直接追加します。 開始点となるindex.phpファイルをコピーし、名前をarchive-testimonials.phpに変更します。
「作成者別」、日付コード、サイドバーを削除しました。 注目の画像とお客様の声サービスのカスタム分類法を追加しました。 特定のWP用語(この場合はカスタム分類法)のリストを表示するthe_terms
関数を使用しました。

美的には見栄えが良くないことは知っていますが、それは重要ではありません。 さまざまなデータを使用して、お客様の声のアーカイブページのさまざまな構造/レイアウトを作成したかったのですが、それは数分で達成されました。
単一の紹介文のページでも同じことができます。 single.phpファイルをコピーして名前をsingle-testimonials.phpに変更し、そこからコードを変更します。
コード例はテーマごとに異なり、テンプレートのコーディングにはHTMLとPHPの基本的な知識が必要なため、ここではコードを示しませんでした。 ただし、既存のテンプレートを変更する方が常に簡単であるため、index.phpを開始点として使用しました。
カスタム投稿タイプのクエリ
サイトにカスタム投稿タイプを表示する別の方法は、WP_Queryクラスを使用してカスタム投稿タイプをフェッチすることです(ループして表示します)。
カルーセル内のすべての紹介文を表示するウィジェットを作成するとします。 または、関連する紹介文(同じ紹介文サービスの分類法)を1つの紹介文ページに表示することもできます。 WP_Query
クラスを使用して、関連する紹介文を取得します。
この例では、「ダイビング」の紹介文サービスのカスタム分類に含まれるすべての紹介文を取得し、リストに出力します。
<?php $args = array( 'post_type' => 'testimonials', 'post_status' => 'publish', 'tax_query' => array( array( 'taxonomy' => 'testimonial_service', 'field' => 'slug', 'terms' => 'diving' ) ) ); $testimonials = new WP_Query( $args ); if( $testimonials->have_posts() ) : ?> <ul> <?php while( $testimonials->have_posts() ) : $testimonials->the_post(); ?> <li><?php printf( '%1$s - %2$s', get_the_title(), get_the_content() ); ?></li> <?php endwhile; wp_reset_postdata(); ?> </ul> <?php else : esc_html_e( 'No testimonials in the diving taxonomy!', 'text-domain' ); endif; ?>
上記のコードでわかるように、最初に引数設定の配列を準備します。これは後でWP_Query
の初期化で使用されます。 この配列では、以下を取得するように定義します。
- `お客様の声` CPT、
- 公開されている紹介文のみを取得し、
- ダイビングのカスタム分類法 `testimonial_service`にあるお客様の声のみを取得します。
new WP_Query
が呼び出されると、関連する紹介文が取得され、それらをループできます。 ループでは、タイトル(著者名に使用)と紹介文の内容を単純なリストに出力するだけです。 また、WP_Queryループを使用する場合は、常にwp_reset_postdata
関数を使用して、元のループにリセットする必要があります。 これにより、カスタムクエリの終了後にすべてが確実に機能するようになります。
これらはカスタム投稿タイプの基本であり、これらがどのように機能するかを理解していただければ幸いです。 他のトピックと同様に、詳細については常に説明します。 これらの例で使用したすべての関数とクラスについて、公式のWPドキュメントを確認することをお勧めします。 ご不明な点がございましたら、下のコメント欄でお知らせください。