カスタム投稿でアーカイブ/タクソノミー/投稿詳細ページをフロントで出力しない方法
アーカイブページ
register_post_type で ‘has_archive’ => false にする。
functions.php
register_post_type(
'投稿タイプ',
array(
'has_archive' => false,
)
);
Tips
固定ページを扉ページとして使用する場合は固定ページを作成し、post_type をスラッグにする。
タクソノミーアーカイブページ
pre_get_posts フックを利用する。
ちなみに register_taxonomy で ‘public’ => false にしてしまうとフロントだけでなく管理画面からも消えてしまうので注意。
トップページにリダイレクトさせる場合
wp_safe_redirect を使う
functions.php
function my_redirect_xxx_taxonomy_archive_to_home() {
if ( is_admin() ) {
return;
}
if ( is_tax( 'タクソノミー名' ) ) {
wp_safe_redirect( home_url(), 301 );
exit;
}
}
add_action( 'pre_get_posts', 'my_redirect_xxx_taxonomy_archive_to_home' );
404 にする場合
functions.php
function my_404_xxx_taxonomy_archive( $qry ) {
if ( is_admin() ) {
return;
}
if ( is_tax( 'タクソノミー名' ) ) {
$qry->set_404();
}
}
add_action( 'pre_get_posts', 'my_404_xxx_taxonomy_archive' );
投稿詳細ページ
template_redirect フックを利用する。( functions.php に記述 )
トップページにリダイレクトさせる場合
wp_safe_redirect を使う
functions.php
function my_redirect_xxx_single_to_home() {
if ( is_admin() ) {
return;
}
if ( is_singular( '投稿名' ) ) {
wp_safe_redirect( home_url(), 301 );
exit;
}
}
add_action( 'template_redirect', 'my_redirect_xxx_single_to_home' );
設定例
- newsというカスタム投稿
- アーカイブ出力無し
- 詳細出力無し
- 404ページは作らない
- LPのため、トップページにリダイレクトさせる
function my_news_post() {
register_post_type(
'news',
array(
'labels' => array(
'name' => 'お知らせ',
'add_new_item' => 'お知らせを追加',
'edit_item' => 'お知らせを編集',
'all_items' => 'お知らせ一覧',
),
'public' => true,
'show_ui' => true,
'menu_position' => 5,
'supports' => array(
'title',
'editor',
'thumbnail',
'page-attributes',
),
'has_archive' => false, // 一覧を出力しない
'show_in_rest' => true, // Gutenberg.
)
);
}
add_action( 'init', 'my_news_post' );
function my_redirect_xxx_single_to_home() {
if ( is_admin() ) {
return;
}
if ( is_singular( 'news' ) || is_404() ) {
wp_safe_redirect( home_url(), 301 );
exit;
}
}
add_action( 'template_redirect', 'my_redirect_xxx_single_to_home' );
アーカイブ & 投稿詳細ページ
ややこしいのでtemplate_redirect処理の方がいいかも…
管理画面一覧から「表示」ボタンが消える。
register_post_type で ‘publicly_queryable’ => false’ を追加する。
該当ページにアクセスするとトップページにリダイレクトされるようになる?(確認中)
補足
タクソノミーアーカイブはフロント表示されるが、投稿が表示されなくなる。
functions.php
register_post_type(
'投稿タイプ',
array(
'publicly_queryable' => false,
)
);