WordPressには「投稿タイプ」と「固定ページタイプ」の2種類のコンテンツがあります。
ブログや更新情報、商品情報などのように、常に記事や情報を追加して、ページが増えていくような場合は「投稿タイプ」を使用し、プロフィールや、お問い合せ欄などのように、1枚のページで収まるような場合は「固定ページ」と、使い分けするようになっています。
「固定ページ」は何個でも新規追加できますが、「投稿タイプ」は1個のWordPressに1個が標準装備です。
通常、ブログ機能は1つしかない。1つじゃ物足りないと思ったことはありませんか?
ブログを複数持ちたい場合は、「WordPressのマルチサイト機能で複数サイトを作る」という手もありますが、新たにWordPressをインストールしたくはない、既に運用しているWordPressに別個のブログをちょっと増やしたいだけ、という場合「カスタム投稿タイプ」が簡単で便利です。
というわけで、固定ページタイプで作成した「読書リスト」ページを、「カスタム投稿タイプ」を使って、ブログ形式のページに作り直してみました。単に「カスタム投稿タイプ」を使ってみたいという好奇心だけでやってみましたので、「カスタム投稿タイプ」を作成する一例として、参考程度にご覧ください。
- 「カスタム投稿タイプ」を利用してブログを一つ追加する。
- 「カスタム投稿タイプ」のカテゴリーを設定できるようにする。
- 「カスタム投稿タイプ」を表示させる固定ページを作成する。
- カテゴリー別の一覧ページが表示されるようにする。
- 「カスタム投稿タイプ」を利用してブログを複数追加する。
- 「投稿が見つかりません」とか「404エラー」画面が表示された場合の対処法
1.「カスタム投稿タイプ」を利用してブログを一つ追加する。
functions.phpに以下のコードを追記します。
下記の「booklist」と「読書リスト」という記述は全て、任意の名前に置き換えてください。
// ===========================
// = カスタム投稿 =
// ===========================
function new_post_type(){
//読書リストページ
register_post_type(
'booklist',
array(
'label' => '読書リスト',
'public' => true,
'hierarchical' => false,
'has_archive' => true,
'supports' => array(
'title',
'editor',
'thumbnail',
'excerpt'
),
'menu_position' => 5
)
);
}
add_action('init', 'new_post_type');
7行目のbooklist |
英数半角の任意の名前。あとから変更するのは面倒なので、最初できっちり決めておく。 |
label |
任意の名前。日本語でOK。管理画面のメニューに表示される。 |
public |
公開、編集の項目 |
has_archive |
trueにするとarchiveが自動的に生成される。 |
supports |
記事編集画面に表示する項目。ここでは、「タイトル」、「本文」、「アイキャッチ画像」、「抜粋」の4項目を指定している。 |
menu_position |
管理画面のメニューに表示する位置。5は「投稿」の下の位置を指定している。
‘menu_position’ で位置指定する数値について
- 5 – 投稿の下
- 10 – メディアの下
- 15 – リンクの下
- 20 – 固定ページの下
- 25 – コメントの下
- 60 – 最初の区切りの下(コメントの下に区切りがある)
- 65 – プラグインの下
- 70 – ユーザーの下
- 75 – ツールの下
- 80 – 設定の下
- 100 – 二つ目の区切りの下(設定の下に区切りがある)
「WordPress Codex 日本語版関数リファレンス/register post type」参照
|
参考サイト:
上記のコードを追加してfunctions.phpをサーバーにアップすると、管理画面のメニューに「読書リスト」の項目が表示されます。

カスタム投稿の投稿編集ページは下図ようになります。

2.「カスタム投稿タイプ」のカテゴリーを設定できるようにする
functions.phpに、さらにコードを追記します。
”タクソノミーの作成”以下がカテゴリーを設定できるようにするコードです。
// ===========================
// = カスタム投稿 =
// ===========================
function new_post_type(){
//読書リストページ
register_post_type(
'booklist',
array(
'label' => '読書リスト',
'public' => true,
'hierarchical' => false,
'has_archive' => true,
'supports' => array(
'title',
'editor',
'thumbnail',
'excerpt'
),
'menu_position' => 5
)
);
//タクソノミーを作成
register_taxonomy(
'booklist_cat',
'booklist',
array(
'label' => '読書リストカテゴリー',
'labels' => array(
'popular_items' => 'よく使う読書リストカテゴリー',
'edit_item' => '読書リストカテゴリーを編集',
'add_new_item' => '新規読書リストカテゴリーを追加',
'search_items' => '読書リストカテゴリーを検索',
),
'public' => true,
'hierarchical' => true,
'rewrite' => array('slug' => 'booklist_cat')
)
);
}
add_action('init', 'new_post_type');
booklist_catは1.で決めた任意の名前のうしろにcatをつけたものです。booklistcatと書いてもOKです。
コードを追記してfunctions.phpをサーバーにアップすると、下図のように、管理画面の「読書リスト」メニューに、「読書リストカテゴリー」の項目が表示されます。
カスタム投稿の投稿編集ページにもカテゴリーの項目が表示されます。

3.「カスタム投稿タイプ」を表示させる固定ページを作成する。
カスタム投稿タイプのarchivesページを表示させる方法は、いろいろあるようですが、ここでは専用の固定ページを作成して表示させることにします。
page-book.phpというように、page-任意の名前.phpというテンプレートを作成します。
page-book.phpの1行目にはテンプレートネーム(任意)を記述します。
<?php /** The template name:booklist */
【page-book.phpの記述一例】
divのidやクラス名などは任意の名前に置き換えてください。
<?php
/**
The template name:booklist
*/
get_header(); ?>
<div id="primary" class="site-content">
<?php if ( have_posts() ) : ?>
<?php /* Start the Loop */ ?>
<?php query_posts( 'post_type=booklist&posts_per_page=10' ); ?>
<?php while ( have_posts() ) : the_post(); ?>
<a href="<?php the_permalink(); ?>"></a><?php echo get_the_term_list( $post->ID, 'booklist_cat', 'Category: ','・','' ); ?>
<?php get_template_part( 'content', 'page' ); ?>
<?php endwhile; // end of the loop. ?>
<!-- ページナビここから -->
<nav class="nav-single">
<span class="nav-previous"> <?php previous_post_link('前の投稿', TRUE); ?><br/>
<?php
$prevPost = get_previous_post(true); //前の記事データを取得
previous_post_link( '%link', $prevThumbnail.'%title' ); //出力
?></span>
<span class="nav-next"><?php next_post_link('次の投稿', TRUE) ?><br/>
<?php
$nextPost = get_next_post(true); //次の記事データを取得
next_post_link( '%link', $nextThumbnail.'%title' ); //出力
?></span> </nav>
<!-- ページナビここまで -->
<?php endif; // end have_posts() check ?>
</div><!-- #primary -->
<?php get_sidebar(); ?>
<?php get_footer(); ?>
ループ内の下記コードは、1ページに表示する最大投稿数を設定するコードを記述しています。上記の例では1ページに投稿を10件表示するよう設定しています。
<?php query_posts( 'post_type=booklist&posts_per_page=10' ); ?>
ループ内の下記コードは、カスタム投稿のカテゴリー表示をしています。
<a href="<?php the_permalink(); ?>"></a><?php echo get_the_term_list( $post->ID, 'booklist_cat', 'Category: ','・','' ); ?>
プラグインWP-PageNaviを導入している場合は、ページナビの部分を下記コードに置き換えてもOKです。
<?php if(function_exists('wp_pagenavi')) { wp_pagenavi(); } ?>
page-book.phpテンプレートを作成してサーバーにアップしたら、管理画面で任意の名前の固定ページを追加します。
タイトルだけ入力し、本文は空白のままで構いません。
テンプレートの選択項目はpage-book.phpの冒頭に記述したテンプレート名を選択します。
もし、カスタム投稿のテンプレートを選択しても何故かデフォルトテンプレートに戻ってしまうというエラーが起きた場合、実際私は経験してしまったのですが、そのような場合の原因と対処法が下記サイトに書かれていて、助かりました。
既存のブログとは異なるデザインのページにしたい場合は、カスタム投稿専用のテンプレートを作成します。
- archive-カスタム投稿名.phpを作成する。(例:archive-booklist.php)
- single-カスタム投稿名.phpを作成する。(例:single-booklist.php)
- cssでスタイルを整える。
必要ならば、headerやfooter、sidebarなども、専用テンプレートを作成してarchive-カスタム投稿名.php、single-カスタム投稿名.phpに読み込ませたら良い、と私は思っていましたが、検索しているうちに、「条件分岐タグ」を使えば、もっとすっきりとカスタマイズできる、と解説しているサイトに行き当たりました。
下記サイトではカスタム投稿を index.php に表示する方法についても書かれています。
4.カテゴリー別の一覧ページが表示されるようにする。
カテゴリーをクリックするとタイトルの一覧ページが表示できるテンプレートを作成してみます。
テンプレートは、taxonomy-カスタム投稿名cat.phpです。
【taxonomy-booklist_cat.phpの一例】
archive-カスタム投稿名.phpを作成していたら、それを複製して名前を変更するだけでもよいようです。
<?php get_header(); ?>
<div id="primary" class="site-content">
<?php if(have_posts()): while(have_posts()): the_post(); ?>
<div class="book">
<?php echo get_the_term_list( $post->ID, 'booklist_cat', 'Category: ','・','' ); ?> <a href="<?php the_permalink(); ?>"><?php the_title(); ?></a>
</div>
<?php endwhile; endif; ?>
</div>
<?php get_sidebar(); ?>
<?php get_footer(); ?>
タイトル一覧が表示されます。

タイトルだけでなく、投稿内容も表示したい場合は、下記コード部分を
<?php echo get_the_term_list( $post->ID, 'booklist_cat', 'Category: ','・','' ); ?> <a href="<?php the_permalink(); ?>"><?php the_title(); ?></a>
下記のように置き換えると投稿内容も表示されるようになります。
<?php echo get_the_term_list( $post->ID, 'booklist_cat', 'Category: ','・','' ); ?>
<?php get_template_part( 'content', 'page' ); ?>
5.「カスタム投稿タイプ」を利用してブログを複数追加する。
functions.phpに以下のようにコードを追記します。
二つ目のカスタム投稿の「document」、「ドキュメント」も任意の名前に置き換えてください。
// ===========================
// = カスタム投稿 =
// ===========================
function new_post_type(){
//読書リストページ
register_post_type(
'booklist',
array(
'label' => '読書リスト',
'public' => true,
'hierarchical' => false,
'has_archive' => true,
'supports' => array(
'title',
'editor',
'thumbnail',
'excerpt'
),
'menu_position' => 5
)
);
//ドキュメント
register_post_type(
'document',
array(
'label' => 'ドキュメント',
'public' => true,
'hierarchical' => false,
'has_archive' => true,
'supports' => array(
'title',
'editor',
'thumbnail',
'excerpt'
),
'menu_position' => 5
)
);
//タクソノミーを作成
register_taxonomy(
'booklist_cat',
'booklist',
array(
'label' => '読書リストカテゴリー',
'labels' => array(
'popular_items' => 'よく使う読書リストカテゴリー',
'edit_item' => '読書リストカテゴリーを編集',
'add_new_item' => '新規読書リストカテゴリーを追加',
'search_items' => '読書リストカテゴリーを検索',
),
'public' => true,
'hierarchical' => true,
'rewrite' => array('slug' => 'booklist_cat')
)
);
//タクソノミーを作成
register_taxonomy(
'document_cat',
'document',
array(
'label' => 'ドキュメントカテゴリー',
'labels' => array(
'popular_items' => 'よく使うドキュメントカテゴリー',
'edit_item' => 'ドキュメントカテゴリーを編集',
'add_new_item' => '新規ドキュメントカテゴリーを追加',
'search_items' => 'ドキュメントカテゴリーを検索',
),
'public' => true,
'hierarchical' => true,
'rewrite' => array('slug' => 'document_cat')
)
);
}
add_action('init', 'new_post_type');
コードを追記してfunctions.phpをアップロードすると、管理画面に「ドキュメント」の項目が追加されます。

6.「投稿が見つかりません」とか「404エラー」画面が表示された場合の対処法
カスタム投稿で作成した記事をプレビューすると、「投稿が見つかりません」といった画面が表示されたりします。この場合、管理画面の「設定」にある「パーマリンクの設定」を更新してみると、表示されるようになります。functions.phpのコードを修正したら、その都度パーマリンクの設定を更新した方が良いようです。
参照サイト:

以前「wp自作テーマでショップをリニューアルしました。」で紹介しました「WordPress3.X 現場のワークフローで覚える ビジネスサイト制作 / MdN(エムディエヌコーポレーション) ハヤシ ユタカ著」を、手元に置いて参考にしつつ、ネット検索で下記のサイトを参照させていただきました。
<参考サイト>