こんにちは、サイト管理やサーバーの運用業務を担当するエンジニアのWestomです。
WordPress は市場シェアが最も高いコンテンツ管理システム(CMS)として、「プログラム経験者ではない方」を対象とした書籍やコースが多数あります。 今回は自分の経験を整理し、WordPress のカスタマイズで最も利用される機能:コンテンツタイプ(投稿タイプ)を紹介します。
「投稿タイプ」は一般的な翻訳名はですが、投稿は「コンテンツストレージ」の単位ですので、下記は「コンテンツタイプ」を呼びます。
コンテンツタイプがよく利用されるのは、スライドショーカルーセル、および「コレクション」、「ユーザー様の証言」などです。
カスタムコンテンツタイプを登録する
WordPress開発者マニュアルによると、initという「フック」を経由してコンテンツタイプを登録します。基本的なコードは次のとおりです。
add_action( 'init', 'customer_type' );
function customer_type(){
$labels = array( // コンテンツタイプが使用するタグを定義します
"name" => "メニューに表示される名前",
"singular_name" => "メニューに表示される名前",
"all_items" => "「すべての投稿」など、メニューに表示される名前",
"add_new" => "「追加」など",
"add_new_item" => "「新投稿」など",
"edit_item" => "「投稿編集」など",
"new_item" => "ナビバーに新しいアイテムの名前を表示します",
"view_item" => "「投稿を見る」など",
"view_items" => "「投稿を見る」複数形",
);
$args = array(
"label" => "メニューに表示される名前",
"labels" => $labels,
"description" => "",
"public" => true,
"publicly_queryable" => true,
"delete_with_user" => false,
"show_in_rest" => false,
"rest_base" => "",
"rest_controller_class" => "WP_REST_Posts_Controller",
"has_archive" => true,
"show_in_menu" => true,
"show_in_nav_menus" => true,
"exclude_from_search" => false,
"capability_type" => "post",
"hierarchical" => false,
"rewrite" => array(
"slug" => "コンテンツタイプコード",
"with_front" => true
),
"query_var" => true,
"supports" => array( "title", "thumbnail" ),
);
register_post_type( 'コンテンツタイプ名', $args );
}
引用名 | 引用タイプ | 説明 |
label | string | メニューに表示される名前。 |
labels | array | メニューに表示される詳細名。 |
description | string | コンテンツタイプの説明は、「すべての投稿」ページに表示されます。 |
public | boolean | パブリックにアクセスできるかどうか、 false を選択すると、URLからアクセスできなくなります。 |
publicly_queryable | boolean | 「?」パラメーターを経由してクエリできますか。 |
delete_with_user | boolean | ユーザーを削除した後、コンテンツも削除されるかどうか。 |
show_in_rest | boolean | Rest APIを経由してクエリできるかどうか。 |
rest_base | string | Rest APIのクエリエンドポイント(エンドポイント)。 |
show_in_menu | boolean | メニューに表示するかどう。 |
show_in_nav_menu | boolean | 上部のナビゲーションバーに表示するかどうか。 |
exclude_from_search | boolean | 検索から除外するかどうか。 |
has_archive | boolean | コンパイルページはありますか。 |
capability_type | string | 権限。 post は、投稿者以上がアクセスできることを表します。page は編集者する必要があります。 |
hierarchical | boolean | 上位レベルのコンテンツがあるかどうか。各ページに上位レベルのページを含めることができます。 |
rewrite | array | 配列には http://あなたのドメイン/コンテンツタイプコード/投稿のタイトル などの slug と with_front が含まれ、true の場合は、「永続リンク」設定の構造を継承します。 たとえば、http://あなたのドメイン/blog/コンテンツタイプコード/投稿のタイトル。 |
query_var | boolean | 「?」パラメーターを経由して照会できますか。publicly_queryableがfalseの場合、query_var設定は無視されます。 |
supports | array | タイトル title、選択した画像 thumbnail、エディター editor、投稿修正バージョン revisions などのサポート機能。 |
その他の解決策
実は、上記のすべてのパラメーターを記憶する以外に、コンテンツタイプをカスタマイズする簡単な方法があります。 「Custom Post Type UI」というプラグインを使用すると、コントロールパネルのインターフェイスからカスタムコンテンツタイプを直接追加および管理できます。
私自身のアプローチは、Custom Post Type UI を経由してカスタムコンテンツタイプを生成し、「Tools」を利用してコードをエクスポートし、サブテーマテーマの functions.php に入れることです。
カスタムコンテンツタイプを使用するシナリオ
WordPressには、コンテンツタイプに加えて、以下のカスタマイズ方法もあります。ここでは、さまざまなカスタマイズスコープの使用シナリオを紹介します。
カスタマイズされた範囲 | 使用シナリオ |
サイトオプション (option) | ウェブサイト全体に適用される設定値です。 たとえば、ウェブサイトのURL構造、管理者などです。 |
コンテンツタイプ | 「投稿」や「ページ」の他のコンテンツタイプとは異なります。 たとえば、スライドショーカルーセル、よくある質問、ポートフォリオなどです。 |
カスタムフィールド (custom field) | 個々のコンテンツに添付されたメタデータです。 たとえば、各支店の住所と連絡先情報です。 |
ブロック (block) | 個々のコンテンツに添付される「コンテンツ」です。 たとえば、各支店の詳細内容です。 |
これまでに接触した事例に基づいて、以下のコンテンツをカスタムコンテンツタイプで実装することはお勧めです。
- スライドショーカルーセル
- 支店のスタッフ一覧
- ポートフォリオ
- よくある質問(異なるページが同じ質問を参照する場合があります)
さまざまなプラグインをよく見ると、多くのプラグインはコンテンツタイプをカスタマイズします。 Contact Form 7 を例にとると、includes /contact-form.php に次のコードが表示されます。 Contact Form 7 は、コンテンツタイプ「お問い合わせフォーム」をコントロールパネルに追加するためのものです。
register_post_type( self::post_type, array(
'labels' => array(
'name' => __( 'Contact Forms', 'contact-form-7' ),
'singular_name' => __( 'Contact Form', 'contact-form-7' ),
),
'rewrite' => false,
'query_var' => false,
'public' => false,
'capability_type' => 'page',
'capabilities' => array(
'edit_post' => 'wpcf7_edit_contact_form',
'read_post' => 'wpcf7_read_contact_form',
'delete_post' => 'wpcf7_delete_contact_form',
'edit_posts' => 'wpcf7_edit_contact_forms',
'edit_others_posts' => 'wpcf7_edit_contact_forms',
'publish_posts' => 'wpcf7_edit_contact_forms',
'read_private_posts' => 'wpcf7_edit_contact_forms',
),
) );
まとめ
今回紹介したカスタムコンテンツタイプは、さまざまなプラグインやテーマで広く利用されています。通常の場合、サイト構造を作成するときは、サイトにカスタムコンテンツタイプが必要かどうかも考えます。
コンテンツタイプを使用すると、さまざまなデータタイプを非常に柔軟に追加できますが、WordPress が多くの人に批判されているところ:すべてのコンテンツは post 形式で保存されます。WordPressでは、お問い合わせフォーム、商品一覧、よくある質問、コースなどはすべて「投稿」と見なされます。適切な計画がなければ、さまざまなコンテンツタイプを作成することはできません。
次回、カスタマイズされた WordPress をカスタマイズするもう1つの重要なポイント:カスタムフィールド( custom fields )またはメタデータ( meta )を紹介します。