ワードプレスでサイトを作成する際に、特に商用サイトでは複数のブログ投稿を管理できれば、より効率的に運営できることもあります。
そういった場合に、カスタム投稿が便利になってきますが、初めて取り組んだ頃はいろいろとつまずくことがありました。
ということで、今回はカスタム投稿でサイトを作成する際に「コピペで使えるコード」をまとめておきたいと思います。
なお、一応補足しておきますが、本カスタマイズは比較的デリケートなfunctions.phpをいじったりもするので、バックアップを取り自己責任にてご利用くださいませ。
この記事の目次
ワードプレスのカスタム投稿をプラグインなしで作成する
まずはじめに、ワードプレス本体の中でカスタム投稿を有効化させます。
手順としては、後述のコードをfunctions.phpにコピペするのですが、ひとまず、何の情報を管理するかを先に決めておく必要があります。
僕が今までに実装した例としては、病院の「患者様の声」や会社の「製品情報」などといった、いわゆる通常のブログ投稿とは分離して管理すべき時に、このカスタマイズを行いました。
今回は分かりやすく↓の例で書いてみます。
カスタム投稿タイプ:honyarara
(分かりやすい、か?)
上記の「患者様の声」なら「voice」に、「製品情報」なら「product」に、といった具合でカスタム投稿タイプを定義します。
そして、functions.phpにコピペするコードは↓です。
「ほにゃらら」と「honyarara」は適宜、置換してご使用ください。
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 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 |
// カスタム投稿 ほにゃらら投稿 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - add_action( 'init', 'register_cpt_honyarara' ); function register_cpt_honyarara() { $labels = array( 'name' => _x( 'ほにゃらら投稿', 'honyarara' ), 'singular_name' => _x( 'ほにゃらら投稿', 'honyarara' ), 'add_new' => _x( '新規作成', 'honyarara' ), 'add_new_item' => _x( '新規作成', 'honyarara' ), 'edit_item' => _x( 'ほにゃらら投稿を編集', 'honyarara' ), 'new_item' => _x( '新しいほにゃらら投稿', 'honyarara' ), 'view_item' => _x( 'ほにゃらら投稿を見る', 'honyarara' ), 'search_honyarara' => _x( 'ほにゃらら投稿を検索', 'honyarara' ), 'not_found' => _x( 'ほにゃらら投稿が見つかりません', 'honyarara' ), 'not_found_in_trash' => _x( 'ゴミ箱の中にほにゃらら投稿が見つかりません', 'honyarara' ), 'parent_item_colon' => _x( 'Parent:', 'honyarara' ), 'menu_name' => _x( 'ほにゃらら投稿', 'honyarara' ), ); $args = array( 'labels' => $labels, 'hierarchical' => false, 'supports' => array( 'title', 'editor', 'thumbnail', 'custom-fields', 'excerpt', 'page-attributes' ), 'taxonomies' => array( 'cat_honyarara','tag_honyarara' ), 'public' => true, 'show_ui' => true, 'show_in_menu' => true, 'menu_position' => 5, 'show_in_nav_menus' => true, 'publicly_queryable' => true, 'exclude_from_search' => true, 'has_archive' => true, 'query_var' => true, 'can_export' => true, 'rewrite' => true, 'capability_type' => 'post' ); register_post_type( 'honyarara', $args ); register_taxonomy( 'cat_honyarara', 'honyarara', array( 'labels' => array( 'name' => 'カテゴリー', 'add_new_item' => 'カテゴリーを追加', 'edit_item' => 'カテゴリーの編集', ), 'hierarchical' => true, 'show_admin_column' => true, ) ); register_taxonomy( 'tag_honyarara', 'honyarara', array( 'labels' => array( 'name' => 'タグ', 'add_new_item' => 'タグを追加', 'edit_item' => 'タグの編集', ), 'hierarchical' => true, 'show_admin_column' => true, ) ); } |
上記をコピペすると、ワードプレスの管理画面上には↓のように、通常の『投稿』とは別に『ほにゃらら投稿』という区切りが出現します。
これで晴れて、通常のブログとは分離した形で、コンテンツを管理できるようになります。
カスタム投稿の記事一覧を表示させる
さて、今度は作成したカスタム投稿の記事を表示させる方法についてです。
ここでは2通りのケースについて例を挙げます。
カスタム投稿用のテンプレートファイルを作成する
まずは基本となるやり方ですが、下記のようなテンプレートファイルを作ってあげると、だいたい事足ります。
(こちらのhonyararaも同様に適宜変更してください)
- archive-honyarara.php
- single-honyarara.php
- taxonomy-cat_honyarara.php
- taxonomy-tag_honyarara.php
- sidebar-honyarara.php
と言っても1から作るのは面倒なので、↓のファイルをベースにコピーして、ファイル名だけ変えると早く作成できると思います。
- index.php
- single.php
- category.php
- tag.php
- sidebar.php
あとは必要箇所を変更修正してFTPで上げると、カスタム投稿用のテンプレートファイルとして機能します。
※index.phpなどの記事一覧を表示させるテンプレートファイルに、カスタム投稿用の条件分岐を書く方法なんてのがあるのかもしれませんが、すみません、それについては未確認未検証です。
トップページなど特定ページにカスタム投稿記事を一部表示させる
コーポレートサイトやポータルサイトのトップページなど、多様な情報を表示させる場所なんかに下記のコードが役立ちます。
1行目の『honyarara』を適宜変えてください。
また『showposts』の数を変更すれば、表示させたい数を決めることができます。
1 2 3 4 5 6 7 8 9 10 11 12 |
<?php query_posts('post_type= honyarara&showposts=10'); ?> <?php if (have_posts()):while(have_posts()):the_post(); ?> <a href="<?php the_permalink(); ?>"> <div class="box"> <h3><?php the_title() ?></h3> <p class="date"><?php echo get_the_date(); ?></p> </div> </a> <?php endwhile; endif; ?> <?php wp_reset_postdata(); wp_reset_query(); ?> |
ただ、このやり方は以前書いた記事、コピペOK!ワードプレスでページ送りがうまく動かない時に(カスタム投稿も可)にも書きましたが、非推奨タグであるquery_postsを使用しているので、あまりオススメできる方法ではなりかもしれません。
今のところこの方法で作成したサイトに不具合等は見つかっていないので続行していますが、本来であればpre_get_postsを用いたコードを書くべきのようです。
ただ、pre_get_postsは固定ページでうまく動かない、といった壁にぶち当たったままなので放置しています。
どなた様かご教授ください。
カスタム投稿のカテゴリー・タグを取得する
カスタム投稿のめんどうな所は、カテゴリー・タグを取得する際に記述するタグが、通常の投稿とは異なることです。
ですが、下記のコードを書けば、難なく動きます。
カスタム投稿でカテゴリーとタグを取得するためのコードは↓です。
カテゴリー編
リンク付きのカテゴリーを取得
1 |
<?php echo get_the_term_list($post->ID,'cat_honyarara'); ?> |
リンク無しのカテゴリーを取得
1 2 |
<?php if ($terms = get_the_terms($post->ID, 'cat_honyarara')) { foreach ( $terms as $term ) { echo esc_html($term->name); }} ?> |
タグ編
リンク付きのタグを取得
1 |
<?php echo get_the_term_list($post->ID,'tag_honyarara'); ?> |
リンク無しのタグを取得
1 2 |
<?php if ($terms = get_the_terms($post->ID, 'tag_honyarara')) { foreach ( $terms as $term ) { echo esc_html($term->name); }} ?> |
さいごに
以上が比較的簡単にワードプレスでカスタム投稿を実現できる方法だと思いますが、実際に細かく進めていくと、色々と壁にぶつかる瞬間が出てくるかもしれません。
その辺りはまた何か思い出したら補足していきたいと思います。
ただ、最後になりますが、冒頭に少し書いたように何のためにカスタム投稿を使用する必要があるのかを見極めてから利用した方が良いと思います。
あくまで1つのブログ投稿内でコンテンツを管理できるのであれば、カテゴリーの条件分岐を使うといったアイデアもありますし、わざわざカスタム投稿用のテンプレートを用意したりといった必要もなくなります。
ひとまず、うまく活用できる参考になれば幸いです。
それではまた。