【WordPress】カスタム投稿のシングルページを生成しない方法

WordPressでは、カスタム投稿タイプを作成する際に、そのシングルページが自動的に生成されます。しかし、場合によってはこれを避けたいこともあります。本記事では、カスタム投稿タイプのシングルページを生成しない方法を4つご紹介します。

has_archiveオプションを使用しない

register_post_type関数のオプションで、has_archiveをfalseに設定します。これにより、カスタム投稿のアーカイブページが生成されなくなります。

function my_custom_post_type() {
    $args = array(
        'label' => 'Custom Post',
        'public' => true,
        'has_archive' => false,
        'rewrite' => false,
    );
    register_post_type('custom_post', $args);
}
add_action('init', 'my_custom_post_type');

rewriteオプションを使用してパーマリンクを無効化

rewriteオプションで、slugを空にし、with_frontをfalseに設定します。これにより、カスタム投稿タイプの個別ページのパーマリンクが生成されません。

function my_custom_post_type() {
    $args = array(
        'label' => 'Custom Post',
        'public' => true,
        'has_archive' => false,
        'rewrite' => array('slug' => '', 'with_front' => false),
    );
    register_post_type('custom_post', $args);
}
add_action('init', 'my_custom_post_type');

template_redirectフックでリダイレクト

シングルページにアクセスされた場合に、404エラーにリダイレクトする方法です。

function redirect_custom_post_type_singles() {
    if (is_singular('custom_post')) {
        wp_redirect(home_url('/404'), 301);
        exit;
    }
}
add_action('template_redirect', 'redirect_custom_post_type_singles');

single-post_type.phpテンプレートファイルを空にする

カスタム投稿タイプのシングルページ用テンプレートファイル(例:single-custom_post.php)を作成し、内容を空にするか、404テンプレートにリダイレクトします。

<?php
// Do nothing or redirect to 404 page
get_template_part('404');

これにより、カスタム投稿タイプのシングルページが生成されるのを防ぎます。