<span class="new-txt">New!</span>WordPress カスタム投稿タイプ作成 | OFFのパソコン日記

New!WordPress カスタム投稿タイプ作成

WordPressでカスタム投稿タイプを作成しました。

これまで数年間、WordPressで記事を投稿しており、投稿のパーマリンク設定はデフォルトの「基本」のまま使用してきました。

https://****.com/?p=123

現在、既存の投稿は数百件に及ぶため、SEOや既存リンクへの影響を考慮し、パーマリンク設定を変更することには抵抗がありました。

そこで、今回新たに作成したカスタム投稿タイプについては、通常の投稿と区別しやすいよう、以下のようなパーマリンクを採用しました。

https://****.com/?post_type=document&p=123

このようにすることで、URLを見るだけでカスタム投稿タイプ(document)の記事であることが分かるようにしています。

add_action('init', 'custom_document_init');
function custom_document_init() {

// ■ カスタム投稿タイプ「document」の登録
register_post_type(
    'document',
    array(
        'labels' => array(
            'name'          => __('カスタム投稿_ドキュメント'), // 管理画面のメニュー名・ページタイトル
            'singular_name' => __('ドキュメント投稿'),
            'menu_name'     => __( 'カスタム投稿ドキュメント'), // 管理画面の左メニュー名
            'all_items'     => __('ドキュメント一覧'),          // 子メニュー:一覧    
            'add_new_item'  => __('ドキュメント投稿を追加'),
            'edit_item'     => __('ドキュメント投稿を編集'),
        ),
        'public'        => true,  // サイト上および管理画面で利用可能にする
        'has_archive'   => true,  // 一覧(アーカイブ)ページを有効化
        'menu_position' => 5,     // メニューの表示位置(「投稿」のすぐ下)
        'menu_icon'     => 'dashicons-database', // メニューのアイコン
        'show_in_rest'  => true,  // ブロックエディター(Gutenberg)を使用する
        'supports'      => array('title', 'editor', 'thumbnail', 'custom-fields', 'page-attributes', 'revisions'),
        'rewrite'       => false, // パーマリンク「基本」対応:URLの書き換えを無効化
    )
);

// ■ 専用カテゴリー「document_category」の登録
register_taxonomy(
    'document_category',
    'document',
    array(
        'labels' => array(
            'name'         => __('ドキュメント_カテゴリー'),
            'add_new_item' => __('ドキュメント_カテゴリーを追加'),
        ),
        'hierarchical'          => true, // チェックボックス形式(階層構造)にする
        'show_ui'               => true, // 管理画面に編集UIを表示
        'show_in_rest'          => true, // ブロックエディターのサイドバーに表示
        'update_count_callback' => '_update_post_term_count',
        'rewrite'               => false, // パーマリンク「基本」対応:URLの書き換えを無効化
    )
);
}

// 2. URLを「?post_type=document&p=数字」の形に強制統一する
add_filter('post_type_link', 'force_document_numeric_permalink', 10, 2);
function force_document_numeric_permalink($post_link, $post) {
// カスタム投稿「document」の場合のみ、投稿ID(数字)を使ったURLに書き換える
if ($post->post_type === 'document') {
return add_query_arg(
array(
'post_type' => 'document',
'p' => $post->ID
),
home_url('/')
);
}
return $post_link;
}