カスタム投稿タイプを作成しました。
register_post_type('sample_post_type',array(
'labels' => array(
'name' => _x('Sample Posts', 'post type general name'),
'singular_name' => _x('Sample Post', 'post type singular name')
),
'public' => true,
'show_in_nav_menus' => false,
'exclude_from_search' => true
));
この特定の投稿タイプの単一投稿ビューを無効にする方法単純な404を表示するのは問題ありません、またはホームページにリダイレクトします。これはプラグインの中なので、空のページを設定するためのsingle-sample_post_type.phpファイルを作成することはできません。
カスタム投稿タイプにリダイレクトするにはtemplate_redirect
フックを使用できます。home_url()
の代わりに他のURLを使用し、他の引数にエラーコードを使用できます。
<?php
add_action( 'template_redirect', 'wpse_128636_redirect_post' );
function wpse_128636_redirect_post() {
$queried_post_type = get_query_var('post_type');
if ( is_single() && 'sample_post_type' == $queried_post_type ) {
wp_redirect( home_url(), 301 );
exit;
}
}
?>
更新しました:
別の方法は、@ gustavoが前述したようにカスタム投稿を登録しながら'publicly_queryable' => false
を設定することです。しかし、それは404を直接あなたに与えるだけです、それは基本的にフロントエンドから完全に隠されていて、カスタム投稿のためにのみ設定することができます。
引数を設定するだけ
'publicly_queryable' => false
register_post_type()を呼び出したとき
そのためのより簡単な方法は、カスタム投稿タイプを登録するときに次の引数を渡すことです。
register_post_type('sample_post_type',array(
'labels' => array(
'name' => _x('Sample Posts', 'post type general name'),
'singular_name' => _x('Sample Post', 'post type singular name')
),
'public' => true,
'exclude_from_search' => true,
'show_in_admin_bar' => false,
'show_in_nav_menus' => false,
'publicly_queryable' => false,
'query_var' => false
));
1。 あなたの機能ファイルから。
add_action( 'template_redirect', 'redirect_cpt_singular_posts' );
function redirect_cpt_singular_posts() {
if ( is_singular('your-cpt-slug') ) {
wp_redirect( home_url(), 302 );
exit;
}
}
二。 single.cpt.phpファイルから:
<?php wp_redirect( home_url() ); exit; ?>
Svenの本当に良い答えから作業して、私はifステートメントでin_array()
を使って複数の投稿タイプを追加し、そしてホームページの代わりにアーカイブページにリダイレクトすることをより簡単にするために彼の機能を書き直しました。
(ところで、query_var
やpublically_queryable
をfalseに設定すると、単一のビューだけでなくネイティブのアーカイブビューも無効になり、'has_archive' => true
をオーバーライドすることになります。その場合でも、カスタムWP_queryを設定して独自のアーカイブを作成できます。ページでは、テンプレートで、しかし、メインのクエリはそれ以上それをしないでしょう、それ?
function fq_disable_single_cpt_views() {
$queried_post_type = get_query_var('post_type');
$cpts_without_single_views = array( 'my-post-type', 'my-other-post-type' );
if ( is_single() && in_array( $queried_post_type, $cpts_without_single_views ) ) {
wp_redirect( home_url( '/' . $queried_post_type . '/' ), 301 );
exit;
}
}
add_action( 'template_redirect', 'fq_disable_single_cpt_views' );
上記のものすべてをテストしたので、実際の解決方法は、どのリダイレクトよりも簡単です。
アーカイブにアクセス可能にしてアイテムをリストアップするために、そして単一ポストnotにアクセス可能にして404セットに自動リダイレクトする
'query_var' => false
cPTを登録するときpublicly_queryable
をfalseに設定すると、アーカイブはホームにリダイレクトされ、他のコンボは機能しません。 query_var
をfalseに設定してください。
これが完全なCPTです https://Gist.github.com/danyj/bfd038d3c8d578548c4d700bd0a7942a
ここに述べたように
https://codex.wordpress.org/Function_Reference/register_post_type
注:query_varが空、null、またはブール値のFALSEの場合でも、WordPressはそれを解釈しようとし(4.2.2)、カスタム投稿のプレビュー/ビューは404を返します。