テーマを一から作成する 第12回目
カスタム投稿タイプをプラグインを利用せずに投稿できるようにします。またカスタム投稿タイプの記事一覧ページ(アーカイブページ)なども作成していきます。
第11回目
アイキャッチを利用する[add_theme_support]
スポンサーリンク
今回は「book」という投稿タイプを設定した「書籍」という名前のカスタム投稿タイプを作成していきます。
まずはじめに以下のコードをfunctions.phpに追記して下さい。
functions.phpに追記
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
//カスタム投稿タイプ function create_post_type() { register_post_type( 'book', //投稿タイプ名 array( 'label' => '書籍', 'labels' => array( 'all_items' => '書籍一覧', ), 'description' => '書籍の紹介です', 'public' => true, 'has_archive' => true, 'supports' => array( //投稿編集画面内の機能を引き出す 'title', 'editor', 'author', 'custom-fields', ), ) ); } add_action( 'init', 'create_post_type' ); |
カスタム投稿タイプの追加はregister_post_type関数を利用します。上記コードでは、定義したcreate_post_type関数をinitアクションフックのタイミングで呼び出しています。
上記コードを記述すると、管理画面に「書籍」というメニュー項目が表示されるようになります。実際に記事を投稿することが可能となります。
register_post_type関数には、二つのパラメータを指定します。一つ目は投稿タイプ名(半角英数字20文字以内で大文字や空白は禁止)で、これから作成するsingle-book.phpやarchive-book.phpのテンプレート名のbook部分になります。二つ目は連想配列で、その中には上記で設定したlabelやdescription以外にも様々な引数が存在しますので詳しくは参照ページをご覧下さい。
カスタム投稿タイプのテンプレートを作成する
次にカスタム投稿タイプを表示させるためのテンプレートを作成します。カスタム投稿タイプで利用されるテンプレートには以下の種類があります。
個別記事
single-投稿タイプ名.php
single.php
singular.php
index.php
アーカイブ
archive-投稿タイプ名.php
archive.php
index.php
今回は single-book.php と archive-book.php を作成します。それぞれのテンプレートファイルを用意したらテーマディレクトリ(/wp-content/themes/sample/以下)にアップロードし、以下のコードを記述して下さい。
single-book.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(); ?> <main> <p>single-book.phpテンプレートを利用しています。</p> <?php if(have_posts()): while(have_posts()):the_post(); ?> <h1><?php the_title(); ?></h1> <time datetime="<?php the_time('Y-m-d'); ?>"><?php the_time('Y.m.d'); ?></time> <p><?php the_category(', '); ?></p> <p><?php the_content('Read more'); ?></p> <?php endwhile; endif; ?> <?php previous_post_link('%link','古い記事へ'); ?> <?php next_post_link('%link','新しい記事へ'); ?> </main> <?php get_sidebar(); ?> <?php get_footer(); ?> |
5行目
実際に画面を表示させた際に、single-book.phpテンプレートが利用されていることを明示しています。
<main>〜</main>の部分は下記のように表示されます。
archive-book.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 25 26 27 28 29 30 31 32 33 34 35 36 37 |
<?php get_header(); ?> <main> <p>archive-book.phpテンプレートを利用しています。</p> <p><?php post_type_archive_title(); ?></p> <p><?php echo get_post_type_object('book')->description; ?></p> <p><?php echo get_the_date('Y年n月'); ?></p> <?php if(have_posts()): while(have_posts()):the_post(); ?> <h1><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h1> <time datetime="<?php the_time('Y-m-d'); ?>"><?php the_time('Y.m.d'); ?></time> <p><?php the_category(', '); ?></p> <!--アイキャッチ画像--> <?php if( has_post_thumbnail() ): ?> <a href="<?php the_permalink(); ?>" ><?php the_post_thumbnail('thumbnail'); ?></a> <?php else: ?> <a href="<?php the_permalink(); ?>" ><img src="<?php echo get_template_directory_uri(); ?>/images/no-image.png" ></a> <?php endif; ?> <!--アイキャッチ画像End--> <p><?php the_content('Read more'); ?></p> <?php endwhile; endif; ?> <?php previous_posts_link('新しい投稿ページへ'); ?> <?php next_posts_link('古い投稿ページへ'); ?> </main> <?php get_sidebar(); ?> <?php get_footer(); ?> |
5行目
実際に画面を表示させた際に、archive-book.phpテンプレートが利用されていることを明示しています。
6行目
現在の投稿タイプのアーカイブページのタイトルを表示させています。今回は「書籍」と表示されます。
7行目
register_post_type関数内の引数descriptionに指定した説明文を表示させています。今回は「書籍の紹介です」と表示されます。
<main>〜</main>の部分は下記のように表示されます。
「書籍(投稿タイプ:book)」カスタム投稿タイプのアーカイブページは、下記のアドレスで表示されます。
サイトアドレス/sample(テーマ名)/book/
このアドレスは
1 |
<?php echo home_url('/book/'); ?> |
や
1 |
<?php echo get_post_type_archive_link('book'); ?> |
で出力することができます。
カスタム投稿タイプページへのメニューを作成する
これからヘッダー部分のメニュー(header.php内にカスタムメニューが表示されるコードが記述されている)と、サイドバー(sidebar.php)に「書籍(投稿タイプ:book)」カスタム投稿タイプページへのリンクを貼ります。
まずは以下のページで作成したヘッダー部分(header.php)のカスタムメニューを利用して「書籍(投稿タイプ:book)」カスタム投稿タイプのアーカイブページへのリンクを貼ります。
カスタムメニューを作成する[add_theme_support][wp_nav_menu]
外観>メニュー を選択してヘッダー部分のメニュー(Menu 1)にカスタムリンクで下記のようにカスタム投稿リンクのアーカイブページを追加します。URLの欄は、httpから始まる実際のアドレスを入力して下さい。
カスタムリンクで「書籍」を追加。
ヘッダーに「書籍(book)」カスタム投稿タイプのアーカイブページのメニューが表示されます。
メニューの一番下に「書籍」が表示されました。
最後にサイドバー(sidebar.php)に「書籍(book)」カスタム投稿タイプの記事一覧名とそのリンクを表示させます。
sidebar.phpに以下のコードを追記します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
<!--「書籍(book)」カスタム投稿タイプ記事一覧--> <h2> <a href="<?php echo get_post_type_archive_link('book'); ?>"><?php echo get_post_type_object('book')->label; ?></a> </h2> <ul> <?php $args = array( 'posts_per_page' => 5, //表示する記事の数 'post_type' => 'book' //投稿タイプの指定 ); $posts_array = get_posts( $args ); foreach ( $posts_array as $post ) : setup_postdata( $post ); ?> <li><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li> <?php endforeach; wp_reset_postdata();?> </ul> |
サイドバーの領域の下部に「書籍」カスタム投稿タイプの記事一覧が表示されました。
これまで(第1〜12回目)の解説を、まとめて整理したテーマファイルは以下のリンクからダウンロードできます。
次回は404エラーページを作成します。
第13回目
404エラーページを作成する[404.php][is_404()]
参照ページ
WordPress
Codex日本語版
関数リファレンス/post type archive title