参考記事
カテゴリー順で並べる!WP_Query応用テクニック
WordPressの標準機能では直接カテゴリー順に投稿を並べることができませんが、カテゴリー一覧を取得してループ処理を組み合わせることで実現できます。複数のカテゴリーを含む投稿一覧を、カテゴリー順に並べて表示する実践的なテクニックを詳しく解説します。
前回の記事では、独自のタクソノミーを作成し、投稿の分類を細かく管理する方法を学習しました。
今回は、WordPressの標準投稿とは別の「投稿タイプ」を作成するカスタム投稿タイプについて詳しく解説します。
2回に分けて学習し、今回はカスタム投稿タイプの作成と投稿、次回は表示方法を扱います。
今回の目標
目次
企業サイトや複合的なWebサイトを運営していると、以下のような課題に直面することがあります。
このような場合、WordPressの標準機能である「カテゴリー」で分類することは可能です。しかし、根本的に性質の異なるコンテンツを同じ「投稿」として扱うことで、以下の問題が生じます。
/投稿名/
の形式になり、コンテンツタイプを表現できないこの問題を解決するのがカスタム投稿タイプです。
WordPress標準の「投稿」とは完全に独立した新しい投稿タイプを作成することで、コンテンツの性質に応じた最適な管理・表示環境を構築できます。
今回は実例として「カフェメニュー」のカスタム投稿タイプを作成します。
※この記事では、WordPressのナビゲーションメニューと区別するため「カフェメニュー」と表現します。
functions.phpに以下のコードを追加します。
add_action('init', function() {
register_post_type(
'menu_post',
array()
);
});
PHPこれがカスタム投稿を作成する最低限のコードですが、実用的ではありません。実際は多くの設定を追加する必要があります。
add_action('init', function() {
register_post_type(
'menu_post',
array(
'labels' => array(
'name' => __('カフェメニュー'),
'all_items' => __('カフェメニュー一覧'),
'add_new' => __('カフェメニューを追加する'),
'add_new_item' => __('カフェメニューの追加'),
'edit_item' => __('カフェメニューの編集'),
'singular_name' => __('カフェメニュータイプ'),
'new_item' => __('新しいカフェメニュー'),
'view_item' => __('カフェメニューを見る'),
'search_items' => __('カフェメニューを探す'),
'not_found' => __('カフェメニューはありません'),
'not_found_in_trash' => __('ゴミ箱にカフェメニューはありません'),
),
'public' => true,
'hierarchical' => false,
'supports' => array(
'title',
'editor',
'page-attributes'
),
'rewrite' => array(
'slug' => 'menu',
'with_front' => false,
),
'menu_icon' => 'dashicons-food',
)
);
});
PHPmenu_post
)register_post_type('menu_post', ...);
PHP'labels' => array(
'name' => __('カフェメニュー'), // メニュー名
'all_items' => __('カフェメニュー一覧'), // 「すべての○○」
'add_new' => __('カフェメニューを追加する'), // 「新規追加」ボタン
'add_new_item' => __('カフェメニューの追加'), // 新規作成ページタイトル
'edit_item' => __('カフェメニューの編集'), // 編集ページタイトル
// ... 以下省略
),
PHPこれらの設定により、管理画面の表示が自然な日本語になります。
'public' => true,
PHPtrue
:Webサイト上で表示可能、管理画面にメニュー表示false
:管理画面のみで使用(非公開)'hierarchical' => true,
PHPfalse
:投稿タイプ(ブログ記事のような扱い)true
:固定ページタイプ(親子関係を持てる)'supports' => array(
'title', // タイトル欄
'editor', // 本文編集欄
'page-attributes' // 並び順設定
),
PHPメニューの場合、タイトル(メニュー名)、説明文(editor)、表示順序が重要なため、この3つを指定しています。
その他の指定可能な項目:
'thumbnail'
:アイキャッチ画像'excerpt'
:抜粋'comments'
:コメント機能標準のカテゴリーとタグを使用可能にします。
'rewrite' => array(
'slug' => 'menu',
'with_front' => false,
),
PHPslug
:URLに使用されるスラッグ(例:/menu/ブレンド/
)with_front
:WordPressのパーマリンク設定の前部分を含むかどうか 投稿のパーマリンク設定が /news/%post_id%
の場合
with_front => true
:/news/menu/ブレンド/
with_front => false
:/menu/ブレンド/
今回は「投稿(お知らせ)」と「カフェメニュー」は関連性のない独立したコンテンツのため、false
に設定して /menu/ブレンド/
のように独立したURL構造にしています。
rewrite
設定を行わない場合、投稿タイプ名「menu_post
」がそのままURLに使用されます(例:/menu_post/ブレンド/
)。ユーザーにとって分かりやすいURL構造にするため、
で「slug
menu
」に変更しています。
'menu_icon' => 'dashicons-food',
PHP管理画面のサイドメニューに表示されるアイコンを指定します。利用可能なアイコンは WordPress Dashiconsページ で確認できます。
functions.phpにコードを追加後、WordPress管理画面を確認してみましょう。
カスタム投稿タイプには、標準投稿のようにカテゴリーやタグが最初から付いていません。カフェメニューを「ドリンク」や「フード」のように分類するためには、自分でタクソノミーを追加する必要があります。
ようするに標準の投稿は
register_post_type
で投稿タイプ「post
」を作成register_taxonomy
で階層型タクソノミー「category
」を「post
」に追加register_taxonomy
で非階層型タクソノミー「post_tag
」を「post
」に追加していることになります。
なおタクソノミーの基本概念については前々回の記事で解説していますので、詳細はそちらをご確認ください。ここでは、カフェメニュー専用のタクソノミーを実装していきます。
functions.phpに以下のコードを追加します。
add_action('init', function() {
register_taxonomy(
'tax-menu', // タクソノミーのスラッグ
'menu_post', // 適用先の投稿タイプ
array(
'labels' => array( // 表示ラベル設定
'name' => 'メニューカテゴリー', // 一覧名
'singular_name' => 'メニューカテゴリー', // 単数形
'search_items' => 'メニューカテゴリーを検索', // 検索時ラベル
'all_items' => 'すべてのメニューカテゴリー', // 一覧表示ラベル
'parent_item' => '親メニューカテゴリー', // 親要素ラベル(階層ありの場合)
'parent_item_colon' => '親メニューカテゴリー:', // 親要素ラベル(フォーム用)
'edit_item' => 'メニューカテゴリーの編集', // 編集画面ラベル
'update_item' => 'メニューカテゴリーを更新', // 更新時ラベル
'add_new_item' => '新しいメニューカテゴリーを追加', // 追加時ラベル
'new_item_name' => '新しいメニューカテゴリー名', // 新規名ラベル
'menu_name' => 'メニューカテゴリー', // 管理メニューでの表示名
),
'hierarchical' => true, // 階層設定
'public' => true, // 公開設定
'show_in_rest' => true, // REST API対応
'show_admin_column' => true, // 管理画面表示
'show_in_quick_edit' => true, // クイック編集対応
'show_in_nav_menus' => true, // メニュー表示
'query_var' => 'menu-category', // クエリ変数名
'rewrite' => array( // パーマリンク設定
'slug' => 'menu-category', // URLのスラッグ
'with_front' => false, // 投稿の先頭スラッグを付ける
),
)
);
});
PHPカスタム投稿にタクソノミーを追加する場合は、2番目のパラメーターに投稿タイプ名を指定します。ここではカスタム投稿「menu_post
」に階層型「tax-menu
」タクソノミーを追加しています。
作成したカスタム投稿タイプを使って、実際のメニューデータを投稿してみましょう。操作方法は標準の投稿と同じです。
カフェメニューの検証用データとして以下のメニューを追加してください。
カテゴリーを登録したら、以前紹介した Category Order and Taxonomy Terms Order
プラグインで並び替えをしておきます。
カスタム投稿のタイトルにメニュー名を入力して、カテゴリーを選択、順序を入力してください。
Admin Columns
プラグインでカフェメニュー一覧に順序を表示すると管理しやすくなります。
しかし並び替え順については、追加順になってしまいます。そこで、投稿を任意の順序で並び替えすることができるプラグイン「Post Types Order
」を導入します。
今回は、WordPressのカスタム投稿タイプの基本概念と実装方法を学習しました。
重要なポイント
次回は、作成したカスタム投稿タイプのデータをWebサイト上で表示する方法を詳しく解説します。
次回の記事では以下を学習します。
カスタム投稿タイプを実際のWebサイトで活用するための実践的な表示テクニックをマスターしましょう!
この記事で作成した成果物は、以下のページでまとめて確認することができます。
WordPressで作成した独自タクソノミーを実際にWebページで表示・活用する方法を詳しく解説します。既存知識を活用して効率的に学習できます。お知らせページでの一覧表示、店舗別投稿ページの作成、複数タクソノミー運用時のテンプレート設計まで、実践的な実装方法を段階的に習得できる内容です。
Webサイトにカフェメニューを表示するシステムを構築します。一覧ページ、個別ページ、カテゴリー別表示の実装から、パーマリンク設定によるページ表示エラーの解決まで、実際の開発で遭遇するトラブルシューティングも含めて詳しく解説。実用的なメニュー管理システムを完成させる実践的な内容です。
WordPressを効率よく確実に学ぶためには、学習の順序が大切です。知識が自然に積み上がるよう、学習ステップに沿って記事を順番に並べています。
学習ストーリー第37話まで掲載中