【WordPress】カスタム投稿・カスタムタクソノミーをfunctions.phpで登録する
ワードプレスで制作したサイトをいくつか管理しています。
その中にゲーム攻略・・・というよりゲームのプレイ日記ですね。を書くためのブログとして使用しているものがあります。
仕事でもワードプレスを使用している分、個人的に使うものはできるだけ文章を入力するのみで済ませたくて、高速化に定評のあるルクセリタスをテーマとして利用させて頂いてます。
このブログでも利用してます。
で、ゲームブログとしてのサイト構成や必要そうな記事を考えている時に、カスタム投稿を実装したくなりまして。
プラグインは使わずにfunctions.phpで登録することにした。という記事です。
カスタムフィールドまで一気に作成したんですが、そちらはまた別記事で。
ACFとCPTUIは使い慣れているのです
ただ、仕事中にこのような案件で必要となった場合にインストールしてきたのが、
・カスタムフィールドの定番プラグイン「Advanced Custom Fileds」(以下、ACF)
・カスタム投稿タイプとカスタムタクソノミーの定番プラグイン「Custom Post Type UI」(以下、CPTUI)
なので。慣れしたしんでいることもあり、最初は利用を考えました。
プラグインで済ませられるものは済ませた方が便利で早いですし。
でも、プラグインを増やすことで表示が遅くなるのは避けたい思いもありつつ。
そんなことを考えながらルクセリタスのテーマファイルを眺めてて思ったのが。
「必要以上にファイルを増やしたくないなぁ」です。
機能も充実しているテーマなので、予想以上に色々なファイルがあり。
開発が一段落したら忘れる可能性大w
であれば、functions.phpなら管理画面から編集できるし良いかなと。
あとはテーマの見た目も自分の好みなので、あまり手を入れたくないという気持ちもあります。
ということで、カスタム投稿タイプを登録していきます。
カスタム投稿タイプの追加
カスタム投稿タイプは、
・register_post_type()を使って内容を設定
・アクションフックのinitで関数を実行
することで登録できます。リンク先はリファレンスです。
早速コードですが。
//カスタム投稿タイプの追加
function create_post_type(){
//作成するカスタム投稿タイプ
register_post_type(
'test_type',//カスタム投稿タイプ名
array(
'label' => 'テスト投稿',//管理画面の表示名
'public' => true,//公開するかどうか
'has_archive' => true,//一覧ページを作成するか
'menu_position' => 5,//管理画面左サイドバーの表示位置
'show_in_rest' => true,//ブロックエディタの有効化
'supports' => array(//元々のワードプレスの機能で使用するものを設定
'title',//タイトル
'editor',//編集者
'thumbnail'//アイキャッチ
),
)
);
}
add_action( 'init', 'create_post_type' );
今回設定したカスタム投稿の内容はこの通り。
データベース的に使用することを目的としたカスタム投稿なので、あまり細かい設定は入れていません。
CPTUIのカスタム投稿タイプの作成画面で表示さえている項目を、コードで決めるだけではありますが。
リファレンスを見ると大量のパラメータが設定されていることがわかるので。
プラグイン作成者の方には頭が下がる思いです。
カスタムタクソノミーも一緒に
カスタムタクソノミーもアクションフック’init’を使うので、同じ関数で設定しちゃいます。
使用するワードプレス関数はタクソノミー用のに変更します。
・register_taxonomy()で内容を設定する。
こちらのリンク先もリファレンスです。
冒頭のゲームブログの運営を考えると、カテゴリーとタグの両方がある方が良さそうだなぁと。
ではコードです。同じ関数を使うので、カスタム投稿タイプで使用したコードの、最期の「 } 」の前に挿入します。
//カテゴリー表示のカスタムタクソノミー
register_taxonomy(
'test-cat', //タクソノミー名
'test_type', //関連付ける投稿タイプ
array(
'label' => 'テストカテゴリー',//管理画面での表示名
'public' => true,//公開するかどうか
'hierarchical' => true,//階層を持たせる
'show_in_rest' => true//ブロックエディタの有効化(REST APIの有効化)
)
);
//タグ表示のカスタムタクソノミー
register_taxonomy(
'test-tag', //タグ名
'test-type', //関連付ける投稿タイプ
array(
'label' => 'テストタグ',//管理画面での表示名
'public' => true,//公開するかどうか
'hierarchical' => false,//階層を持たせない
'show_in_rest' => true,
'update_count_callback' => '_update_post_term_count',//おまじない
)
);
}
タクソノミーというのは、やくすると「分類法」というもので。どの用に分類するかを定義します。
つまり、カテゴリーやタグによる分け方はタクソノミーの一つの方法なのです。
カテゴリーは「階層化された分類法」なので、パラメータ’hierarchical => true’に設定し、階層をもたせます。
タグは「階層化されていない分類法」なので、パラメータ’hierarchical => false’に設定し、階層をもたせません。
しっくり来た説明が、カテゴリーで縦に分類し、タグで横に分類する。というものです。
そして、個人的にプログラミングをしているとたまに出会う、「書いておかないと大変な事になる」や「おまじない」という説明書されているコード。
個人的にはとても好きです。
つまり。タグ。好きです。
コード全文
//カスタム投稿タイプの追加
function create_post_type(){
//作成するカスタム投稿タイプ
register_post_type(
'test_type',//カスタム投稿タイプ名
array(
'label' => 'テスト投稿',//管理画面の表示名
'public' => true,//公開するかどうか
'has_archive' => true,//一覧ページを作成するか
'menu_position' => 5,//管理画面左サイドバーの表示位置
'show_in_rest' => true,//ブロックエディタの有効化
'supports' => array(//元々のワードプレスの機能で使用するものを設定
'title',//タイトル
'editor',//編集者
'thumbnail'//アイキャッチ
),
)
);
}
//カテゴリー表示のカスタムタクソノミー
register_taxonomy(
'test-cat', //タクソノミー名
'test_type', //関連付ける投稿タイプ
array(
'label' => 'テストカテゴリー',//管理画面での表示名
'public' => true,//公開するかどうか
'hierarchical' => true,//階層を持たせる
'show_in_rest' => true//ブロックエディタの有効化(REST APIの有効化)
)
);
//タグ表示のカスタムタクソノミー
register_taxonomy(
'test-tag', //タグ名
'test-type', //関連付ける投稿タイプ
array(
'label' => 'テストタグ',//管理画面での表示名
'public' => true,//公開するかどうか
'hierarchical' => false,//階層を持たせない
'show_in_rest' => true,
'update_count_callback' => '_update_post_term_count',//おまじない
)
);
}
add_action( 'init', 'create_post_type' );
このコードをfunctions.phpに入力することで、
カスタム投稿タイプ「テスト投稿」のカテゴリー「テストカテゴリー」とタグ「テストタグ」が使えるようになります。
なお、finctions.phpの編集は十分注意して行いましょう。編集を間違うとサイトが表示されなくなる可能性があります。
・必ず「<?php ~ ?>」内で使用する
・アップロード(やコピペ)する前に構文チェックをする
をやっておけば、表示崩れとエラー表示ぐらいで済むかと。
真っ白世代なので、最近はエラーを返してくれて嬉しい限りですw
また、カスタム投稿タイプを追加した後は、管理画面で「設定」>「パーマリンク」を開き、何も変更せずに更新をしておきましょう。
入れ物はできました
これで、カスタム投稿タイプで投稿を作成し、カスタムタクソノミーで整理できるようになりました。
・・・と、ここまでやってfunctions.phpに入力・・・したものの。
急にあまりコード行を増やしたくなくなってしまい、外部ファイル化して運用することにしました。
一度追加すると増えそうな気がしたのでw
そこまでする必要も無いとは思いますので、コードはここまでに。
次回は内容の入力で使用するカスタムフィールドを自作していこうかなと。
ディスカッション
コメント一覧
まだ、コメントがありません