銀河鉄道

【WordPress】カスタム投稿を複数作成し、カスタムタクソノミーも追加する

サムネイル
カスタム投稿複数作成する

register_post_type()

投稿タイプを作成または変更します。

カスタム投稿を1つまたは複数作成する

<?php
// ★カスタム投稿の数だけarrayを用意する★
$post_aaa_array = array(
    'post_type' => 'aaa',
    'name'      => 'aaa',
    'icon'      => 'dashicons-editor-paste-word',
);

$post_bbb_array = array(
    'post_type' => 'bbb',
    'name'      => 'bbb',
    'icon'      => 'dashicons-editor-paste-word',
);

// ↓ここから共通↓
function create_custom_post($array) {
    // 配列を返す関数で、配列を受け取る
    $args_post = return_custom_post_args($array);
    $args_category = return_custom_cat_args($array);
    $args_tag = return_custom_tag_args($array);

    // カスタム投稿の設定
    register_post_type(
        $array['post_type'],
        $args_post,
    );

    // カスタムタクソノミー(カテゴリー)の登録
    register_taxonomy(
        $array['post_type'] . '-category',  // 1.スラッグ:$term->slug
        $array['post_type'],                // 2.利用する投稿タイプ
        $args_category,                     // 3.オプション
    );

    // カスタムタクソノミー(タグ)の設定
    register_taxonomy(
        $array['post_type'] . '-tag',
        $array['post_type'],
        $args_tag,
    );
}
add_action('hook_create_custom_post', 'create_custom_post', 10, 1);
// ↑ここまで共通↑

// ★カスタム投稿の数だけdo_actionを用意する★
do_action('hook_create_custom_post', $post_aaa_array);
do_action('hook_create_custom_post', $post_bbb_array);

配列を返す関数|投稿

<?php
function return_custom_post_args($array) {
    $post_type = $array['post_type'];
    $name = $array['name'];
    $icon = $array['icon'];

    $supports = array(
        'title',      // タイトルフォーム
        'editor',     // エディター(内容の編集)
        'thumbnail',  // アイキャッチ画像
        'revisions',  // リビジョンを保存
    );
    $args = array(
        'labels' => [
            'name'          => $name,
            'singular_name' => $post_type,
            'add_new'       => $name . 'の新規追加',
            'edit_item'     => '投稿を編集', // 日本語表記に変更
        ],
        'public'        => true,    // 管理画面に追加
        'has_archive'   => true,    // 投稿した記事の一覧ページを作成する
        'menu_position' => 5,       // 管理画面メニューの表示位置(投稿の下に追加)
        'rewrite'       => array('slug' => $post_type, 'with_front' => false),
        'show_in_rest'  => true,    // true:「Gutenberg」/ false:「ClassicEditor」
        'menu_icon'     => $icon,
        'supports'      => $supports,
    );
    return $args;
}

配列を返す関数|カテゴリ

<?php
function return_custom_cat_args($array) {
    $name = $array['name'];
    $args = array(
        'hierarchical' => true,
        'label' => $name . 'のカテゴリー',
        'public' => true,
        'show_in_rest' => true,   // 管理画面に追加
    );
    return $args;
}

配列を返す関数|タグ

<?php
function return_custom_tag_args($array) {
    $name = $array['name'];
    $args = array(
        'hierarchical' => true,
        'label' => $name . 'のタグ',
        'public' => true,
        'show_in_rest' => true,   // 管理画面に追加
    );
    return $args;
}

functions.php

<?php
include(get_template_directory() . '/xxx/return_custom_post_args.php');
include(get_template_directory() . '/xxx/return_custom_cat_args.php');
include(get_template_directory() . '/xxx/return_custom_tag_args.php');
include(get_template_directory() . '/xxx/create_custom_post.php'); // ※必ず上記3つより下に記述する

/

著者

author
月うさぎ

編集後記:
この記事の内容がベストではないかもしれません。

記事一覧