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

  • このエントリーをはてなブックマークに追加
WordPressカスタム!

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

コンテンツマップ

カスタム投稿タイプのサンプルサイトマップ
このサイトの特徴は、
  • ブログ
  • お知らせ
  • 取扱アイテムA
  • 取扱アイテムB
  • ……

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


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

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

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

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

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


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

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

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

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

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


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

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

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


archive.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; ?>



single.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; ?>


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

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

page.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; ?>

使ってみて感じたこと

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

Comment

  1. rei

    こんにちは。

    WPのこの辺あたりで奮闘しているので、とても参考になりました!

    すいません、1つ質問させていただいてもいいでしょうか。

    single.phpで記事を表示すると同時に、左側にその記事と同じタームに属している記事一覧を出したい場合は、
    再度 get_posts($args) もしくは、WP_Queryで出していますが、
    ページング(次へ、前へ)ができませんでした。。

    single.php内で同タクソノミの同タームに属している記事一覧も表示し、その記事一覧にはページング機能を付けるにはどうしたらいいか教えていただけますか?
    イメージとしては、

    その他adidasの記事一覧

    adidas1
    adidas2
    adidas3

    次のadidas記事一覧へ


    adidas1の内容 /*左側のリンクを押したときの内容*/


    長い質問で申し訳ありません。

    よろしくお願いします。

    返信
  2. rei

    すいません。HTMLタグがESCPされなかったです。。
    divにそれぞれの内容を囲んだ書き方しました。。

    返信
  3. rei

    kairingさん、

    遅い返信となってしまい、大変申し訳ないです。
    返信していただき、本当にありがとうございます。

    >『左側(サイドバー)にあるリストをページング処理して、そこでページ遷移してもメインコンテンツは同じ記事が表示されている』ということでしょうか?

    まさにそれです。。

    あれから奮闘しましたが、難しくてできていないです。

    jQueryは苦手ですが、ちょっとやってみます!

    色々ありがとうございました。

    返信

Leave a Reply

  • (will not be published)

CAPTCHA