カスタム投稿タイプのテーマ作成について

以前、「カスタム投稿タイプの設定方法」の記事を投稿したが、今回はテーマへの反映方法。

 

カスタム投稿タイプで利用するテーマ

カスタム投稿タイプで利用するテーマは大きく2種類になる。
1つは一覧用ページ。これはarchive.phpを使うことになるが、通常の投稿のでも利用するためarchive-slug名.phpで一覧は構築したほうが望ましい。
もう1つは記事ページ。こちらもsingle.phpを使うことになるが、見せ方を変えたい場合などはsingle-slug名.phpでの構築になる。

 

ちなみに、一覧ページを使う構成の場合はfunctions.phpのカスタム投稿タイプを設定するregister_post_typeの配列設定で’has_archive’をtrueにしないと利用できないので注意。

 

カスタム投稿タイプのテーマ作成(一覧ページ)

カスタム投稿タイプのテーマ作成は、このブログの場合カスタム投稿タイプに通常のカテゴリーも持たせているため、基本的に通常のカテゴリーアーカイブと同じような記述になる。
唯一違うのはposts変数に格納する配列でpost_typeがカスタム投稿タイプのslug名を記述する部分くらいだろうか。

 

<?php
$posts = get_posts(array(
'post_type' => array('fbook'),
'posts_per_page' => 12,
'category' => '4'
));
?>

 

3行目のpost_typeが通常は’post’になるが、カスタム投稿タイプの場合はそのslug名(register_post_typeで設定した名称)になる。このブログの場合は本と映画をカスタム投稿タイプにしており、本がfbook、映画がfmovieとなる。
4行目は表示件数、5行目は表示するカテゴリーとなる。

 

後はいつも通りwhileで繰り返す記述。

 

<?php if(have_posts()): while(have_posts()):the_post(); ?>
繰り返し内容を記述
<?php endwhile; ?>
<?php endif; ?>

 

カスタムフィールドのテーマ表示

さて、今回カスタム投稿タイプを設定した理由は自己学習という目的もあるが、自分が読んだ本、観た映画を忘れないように、思い出せるようにアーカイブにしたく作った。しかし通常の投稿は少し書くことが多かったり、その時の気分で書く内容がぶれたりしそうだったので、タイトルとアイキャッチ画像以外はカスタムフィールドを設定して、項目を固定させている。
カスタムフィールドの設定方法は「WordPressで独自の項目を追加する方法(カスタムフィールドの活用)」https://cosian.com/2017/09/3633に記述している。

 

カスタムフィールドの内容をテーマに表示するには以下のような記述を繰り返し内容を記述する部分に挿入する。

 

<span>著者:<!--?php echo get_post_meta($post-&gt;ID, 'fbook_author', true); ?--></span>
<span>出版社:<!--?php echo get_post_meta($post-&gt;ID, 'fbook_publish', true); ?--></span>
<span><!--?php echo mb_substr(get_post_meta($post-&gt;ID, 'fbook_impressions', true),0,200).'...'; ?--></span>

 

spanでくくっているが、この部分は任意のタグとCSSでレイアウトできる。
カスタムフィールドには著者と出版社、感想を入力するようにしている。感想だけはテキストエリアで複数行入力できるようにしている。
一覧ページで全文表示はできないので200文字の制限をかけている。

 

一覧ページはこんなところ。

 

カスタム投稿タイプのテーマ作成(記事ページ)

 

記事ページも基本的には通常の投稿ページと同じ設計になる。
表示する内容が若干異なるだけ。
本のページの場合は、アイキャッチ画像、タイトル、著者、出版社、感想の5つの項目を表示するようにセットするだけ。
1箇所だけ注意が必要なのは、感想の表示部分。

 

<p><?php echo nl2br(get_post_meta($post->ID, 'fbook_impressions', true)); ?></p>

 

DBからデータを引っ張てきてechoで表示するときに管理画面で改行したように表示するためのおまじない関数nl2brを忘れずに。

コメントを書く