カスタム投稿タイプの一覧ページは、アーカイブページのテンプレートをコピーして、スラッグを追加するだけで作ることができます。
アーカイブページの一覧ページはarchive.phpですよね。
カスタム投稿タイプの一覧ページはarchive-slug.phpです。
アーカイブページをコピーして、「-slug」を追加するだけですね。
「slug」のところはカスタム投稿タイプを作成したときのslugです。
プラグインのCustom Post Type UIを使った場合は、「投稿タイプの追加と編集」で設定する投稿タイプスラッグで入力したものになります。
function.phpでregister_post_type()関数を使ってカスタム投稿タイプを登録した場合は、register_post_type()関数で指定した1つ目のパラメータがslugになります。
例:register_post_type(‘abc’,$args);
上の例でいうと、「abc」がslugになります。
ただ、もしカスタム投稿タイプの一覧ページのデザインと同じで良いのであればarchive.phpでもちゃんと表示されます。
WordPressにはテンプレートを適用する優先順位があるのはきっと知っていると思いますが、カスタム投稿タイプの一覧ページを表示するテンプレートの優先順位は以下の通りになります。
テンプレートの優先順位
archive-slug.php
↓
archive.php
↓
index.php
カスタム投稿タイプのサンプルコード
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
//カスタム投稿タイプの一覧ページサンプルコード <?php get_header(); ?> <div class="custom-loop"> <?php if(have_posts()) : while(have_posts()) : the_post(); ?> <header class="content"> <div class="title"> <h3><a href="<?php the_paermalink(); ?>"><?php the_title();?></a></h3> </div> </header> <div class="excerpt"> <?php the_exerpt(); ?> </div> <?php endwhile; else: ?> <p>投稿はありません。</p> <?php endif; ?> </div> <?php get_sidebar(); ?> <?php get_footer(); ?> |
一覧ページの作成に必要な投稿タイプ名の取得・表示方法
カスタム投稿タイプの一覧ページを作るとなると、必要になるのがタイトル。
SEO的にも何のページなのかをはっきりと検索エンジンに伝えることで、ページへのアクセスを呼び込みやすくなります。
カスタム投稿タイプの一覧ページに必要なタイトルの要素としては、投稿タイプ名ですね。
よくある一般的なパターンとしては、「投稿タイプ名|サイトタイトル」。
仮に、投稿タイプが「都道府県」サイトタイトルが「山登り.com」だった場合は、
「都道府県|山登り.com」といった感じです。
カスタム投稿タイプの投稿タイプ名、つまり「都道府県」投稿タイプを作った場合、「都道府県」を取得して、ページの見出しなどに表示する方法を紹介します。
投稿タイプ名の取得方法は、同じ投稿タイプを表示する場合でも、一覧ページと個別投稿ページでは取得方法が異なります。
投稿タイプを個別投稿ページで取得する方法については、次回の記事で紹介します。
一覧ページで投稿タイプ名を取得する関数
さて、投稿タイプ名を表示するためには、post_type_archive_title()という関数を使います。
因みに、この関数は一覧ページでしか動作しないので注意して下さいね。
1 |
post_type_archive_title(‘投稿タイプの前に付けるテキスト’,表示); |
パラメータは2つあって、1つ目は、「投稿タイプの前につけるテキスト」。
そして、2つ目は表示をするかいなかのを決めるパラメータになります。
tureで表示、falseでは非表示になります。
ture:投稿タイプ名をHTMLに出力
false:HTMLには出力されず取得だけ。
プログラムで何か処理をする場合には、falseを使い、普通に表示する場合は、tureになりますが、実際の開発現場では、パラメータなしで使うことがほとんどでしょう。
また、普通に使う分にはfalseを設定する事はあまりないと思います。
さて、先ほどの「都道府県|山登り.com」を作り方ですが、至ってシンプルです。
1 |
<title><?php post_type_archive_title();?>|<?php bloginfo('name');?></title> |
post_type_archive_title()で投稿タイプ名を取得表示して、|を入れて、その後ろにbloginfo(‘name’)でサイト名を入れるだけです。
あとは、titleタグで囲むだけ。
上記のコードを利用する場合は、archive-○○.phpのようなアーカイブページよりも、きっとheader.phpで使うことの方が多くなると思います。
となると、フロントページや個別ページ等でも使うことになるheader.phpなので、アーカイブページで先ほどのタイトルを表示しようと思うと、条件分岐が必要になりますね。
だから、実際に使用するのは
1 2 3 4 5 |
<?php if(is_archive()):?> <title><?php post_type_archive_title();?>|<?php bloginfo('name');?></title> <?php endif: ?> |
になります。
ここで少し注目してもらいたいのがループ外で使っていること。
この関数はルール外でもループ内でもどちらもでも動作してくれます。
また、「表示」パラメータにfalseを指定した場合は、「投稿タイプの前につけるテキスト」の値は無視されることになります。