WordPress

便利すぎ!カスタム投稿タイプ・カスタムタクソノミーでサイトを作ったまとめ!

WordPressカスタム!

多くの商品を紹介するサイトを作る場合、やっぱり商品点数をどんどん増やしたいですよね。ブログ記事のように…。
今回仕事で商品を掲載するだけのサイトを作ったのですが、初めて、カスタム投稿タイプ・カスタムタクソノミー・カスタムフィールドを使ったので、今回はそのまとめです!

コンテンツマップ

カスタム投稿タイプのサンプルサイトマップ
このサイトの特徴は、

  • ブログ
  • お知らせ
  • 取扱アイテムA
  • 取扱アイテムB
  • ……

上記がほぼデイリーで更新するコンテンツ、という点です。
実際は取扱アイテムという項目が現場レベルで増やせるようにする必要があったので、簡単にするためにCustom Post Type UI というプラグインを使ってます。
※プラグイン CPT UI の使い方は他サイトさんが詳しいのでご参照ください!

カスタム投稿タイプを使った理由

カスタム投稿使わないで作るとすると、
『WPの『投稿』に全部記事を入れてカテゴリで分類する』
という方法が一番簡単に思いつくパターンかと思いますが、今回はとにかく分かりやすい管理画面にする必要があったので、
カスタム投稿タイプで専用投稿フォームを作ってフォームごとに管理することにしました。

カスタム投稿タイプでは、専用の投稿フォームを作れます

デフォルトである『投稿』の投稿タイプは『post』です。
カスタム投稿タイプは、新たな投稿タイプを作るので、投稿フォームが別に出来ます。
カスタム投稿タイプ

こうしておくと、WEBとか苦手な人にも分かりやすくなりますよね。

カスタム投稿タイプを、カスタムタクソノミーで分類した理由

これは簡単にプラグインで作れたからです。
カスタム投稿タイプ用にカテゴリ作るために、構築中に私がfunctions.phpに記述するのは簡単ですけど、
現場の人はPHP書けませんからね。ここは、カスタム投稿タイプを作れたプラグインで作れるカスタムタクソノミーを選んだというワケです。

カスタムタクソノミーは、カテゴリのように分類できます

カテゴリーのように追加登録でき、投稿時にも簡単に選択できます。ほぼカテゴリーと一緒です。
カスタムタクソノミーはカテゴリみたい

カスタムタクソノミーの階層設定で変わる

テンプレートは基本、中で条件分岐!

カスタム投稿タイプ用にテンプレートを用意するのではなく、カスタム投稿タイプ用のテンプレートをデフォルトのものにし、その他を条件分岐させて表示しています。

single-item(カスタム投稿タイプ名).php などにすると簡単ですが、新しくカスタム投稿タイプを作るとテンプレートも作る必要があるので、single.php で全て表示させて、条件分岐で操作してます。

archive.php(カスタムタクソノミー:メーカー名のアーカイブ用)

[php]
<?php if(is_tax()): /*タクソノミーアーカイブページの場合*/ ?>

<h2>
<?php $taxonomy = get_taxonomy(get_query_var('taxonomy'));
echo sprintf('%s', single_term_title('', false)); ?>
</h2>
<?php if ( have_posts() ) : /*メインループ*/ ?>

<?php while (have_posts()): the_post(); ?>
<?php the_title(); ?>
<?php the_content(); ?>
<?php endwhile; ?>
<?php else: ?>

<?php endif; ?>
<?php else: /*タクソノミーアーカイブページでない場合...お知らせとかブログとか*/ ?>
<h2><h2><?php echo esc_html(get_post_type_object(get_post_type())->label ); ?></h2></h2>
<?php endif; ?>
[/php]

single.php

[php]
<?php if ( have_posts() ) : /*メインループ*/ ?>
<?php while (have_posts()): the_post(); ?>
<?php the_title(); ?>
<?php the_content(); ?>
<?php if(!(get_post_type() == 'post') and !(get_post_type() == 'news') ):
//『投稿』・『お知らせ』以外の場合(その他のカスタム投稿タイプのみ対応させるため)
$custom_post_type = get_post_type();
if ( has_post_thumbnail()) :
the_post_thumbnail('ssize');
else : ?>
<img src="no-image.png" class="attachment-ssize" width="150" height="150" alt="" title="" />
<?php endif; ?>
<?php endif; ?>
<?php endwhile; ?>
<?php else: ?>
<?php endif; ?>
[/php]

アーカイブじゃなく固定ページを使えば、コンテンツを魅せられる!

アーカイブだと、ただ記事の羅列になってしまいます。
この商品を打ちだしたい!など柔軟に対応できるように、固定ページにしています。

page.php

[php]
<?php if (is_page(array('first','shop'))) : ?>
<?php if (have_posts()) : ?>
<?php while (have_posts()) : the_post(); ?>
<h2><?php the_title(); ?></h2>
<?php the_content(); ?>
<?php endwhile; ?>
<?php else : ?>
<?php endif; ?>
<?php else: ?>
<div id="news">
<h3>最新アイテム</h3>
<?php
$page = get_page(get_the_ID());
$slug = $page->post_name;
$slug = substr($slug,0,-6); //固定ページのスラッグを○○(カスタム投稿タイプのスラッグ)-indexにするルールを作り、アーカイブと分けました。ここでは-indexを除いた部分の抽出=カスタム投稿タイプ
query_posts(
Array(
'post_type' => $slug,
'orderby' => 'date',
'order' => 'DESC',
'paged' => get_query_var('paged')
)
);
echo '<ul>';
if (have_posts()) : while (have_posts()) : the_post(); ?>
<li><?php the_time('Y.n.j'); ?> <a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li>
<?php
endwhile; endif;
wp_reset_query();
echo '</ul>';
?>
</div>
</php endif; ?>
[/php]

使ってみて感じたこと

今回初めてカスタム投稿タイプ・カスタムタクソノミー(カスタムフィールドも)を使いましたが、WordPressって本当に柔軟で、使い方次第で何でもできちゃうなーと改めて感じました。

  • この記事を書いた人

サオリサン

WEB制作のディレクター・制作・運営支援をしてます(フリーランス&会社員)。アクセス解析してサイト改善するのが好き。

-WordPress