ツイート
シェア
LINEで送る
B! はてぶでブックマーク
Pocketでブックマーク
RSSフィード

WordPress, カテゴリと投稿の階層(親子関係)をもてる投稿タイプを作る

wordpress image
イラストダウンロードサイト【イラストAC】
の画像をもとに加工しています。

デフォルト投稿タイプの『投稿』はカテゴリ(タクソノミー)が使えるけど階層構造(親子関係)は持ってない。『固定ページ』は階層構造は持ってるけどカテゴリは使えない。

この2つをもったオールラウンダーな投稿タイプを作っていきます。ただ若干の課題があり、アーカイブページの修正も必要です。

デフォルトの投稿、固定ページには制限がある。

WordPressには2つの投稿タイプがあります。『投稿』と『固定ページ』。この2つはお互い使えるものと使えないものがあります。

まず真っ先に使うのは『投稿』。投稿はブログの記事を書くもので、記事をグループ化するタクソノミーのカテゴリとタグの設定ができます。

その次は固定ページ。どんどんページを増やしていくというものではなく、ホームやプライバシポリシーなどあまり変更のないページを作るもの。

企業の紹介サイトであるコーポレートサイトなどは固定ページを多く使うでしょう。

固定ページはデフォルトではカテゴリ・タグのタクソノミーの設定はなく、その代わりページ同士の親子関係があります。

(投稿は親子関係がない。)

投稿と固定ページにはガチガチの制限がある。

つい最近気づいたことなんですが、デフォルトの投稿と固定ページにはガチガチの制限があります。

試しに投稿の設定で親子関係を有効化したんですが、編集画面の投稿のメニューが固定ページになっちゃいました。逆に固定ページの親子関係を無効化したんですが、今度は固定ページが投稿になっちゃいました。

どうやら投稿と固定ページはページの性格をガチガチに固めてるところがあるらしく、親子関係の有無で無理やり投稿タイプを変えるらしい。

ちなみに固定ページはタクソノミーを関連付けることができます。デフォルトのカテゴリ・タグも可能。

ただこうなると『固定ページ』という名前がネックになります。そこに柔軟性を加えると名前とのギャップが生まれて編集者の混乱を招く。

ということで、タクソノミーが使えて投稿の親子関係も使える新たな投稿タイプを作ります。

新規のカスタム投稿を作る

まずは新規のカスタム投稿を作ります。

add_action('init', function() {
  $labels = array(
    'name'                => '汎用',
    'singular_name'       => '汎用',
    'add_new_item'        => '新しい汎用を追加',
    'add_new'             => '新規追加',
    'new_item'            => '新しい汎用',
    'view_item'           => '汎用を表示',
    'not_found'           => '汎用はありません',
    'not_found_in_trash'  => 'ゴミ箱に汎用はありません。',
    'search_items'        => '汎用を検索',
  );
  $args = array(
    'labels'              => $labels,
    'public'              => true,
    'show_ui'             => true,
    'query_var'           => true,
    'hierarchical'        => true,
    'menu_position'       => 5,
    'has_archive'         => false,
    'show_in_rest'        => true,
    'supports'            => array(
      'title',
      'editor',
      'thumbnail',
      'page-attributes'
      )
  );
  register_post_type('generic', $args );
} );

くわしい作り方は割愛して、これで『汎用』という投稿タイプが作られます。ちなみに、本来日本語の文字列は翻訳関数でくくるべきです。サンプルなのでこれも割愛。

カテゴリ・タグを『汎用』で使えるようにする。

今度は、タクソノミーを汎用で使えるようにしましょう。

add_action('init', function() {
    register_taxonomy_for_object_type( 'category', 'generic');
    register_taxonomy_for_object_type( 'post_tag', 'generic');
});

一応これで編集ページで設定できるようになったんですが、カテゴリやタグのアーカイブページのリストには含まれません。

アーカイブページのリスト取得のクエリーを作り直す必要があります。

(固定ページでカテゴリ・タグを使えるようにしても同じ。)

でもこれだとややこしいので、汎用専用のカテゴリやタグを新たに作ったほうが良いかも。デフォルトのカテゴリ・タグは『投稿』専用だとしたほうが良さそうです。

アーカイブページで、カテゴリやタグに含まれるすべての投稿タイプのページを取得するというチャレンジをしてもいいけど。

前の投稿
WordPress, 『投稿』は親子関係(階層)ができない。値を変えると固定ページになっちゃう!
WordPress, テーマのfunctions.phpに機能を実装するのは止めよう!
次の投稿

WordPressの本

post-cta-image

たくさんあるなかで、WordPressの基本が学べる、目的別に学べる本を選びました。

  • WordPressの基本。
  • Webサイト作成から運用まで全体的に学ぶ。
  • かんたんなカスタマイズを学ぶ。
  • 何も分からないところから学ぶ。
  • WordPressからPHPプログラミングを学ぶ。

の5冊です。どうしてもネット上で調べて勉強するのが苦手という人におすすめです。

この内容をモノにすればほかの本は必要ありません。あとは自分の力で、書籍を使わずにインターネット上にある情報だけで学んでいけます。

コメントを残す

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください