Ich habe einen benutzerdefinierten Beitragstyp erstellt:
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
));
Wie kann ich die Einzelbeitragsansicht für diesen bestimmten Beitragstyp deaktivieren? Das Anzeigen eines einfachen 404 ist in Ordnung oder das Weiterleiten auf die Homepage. Dies befindet sich in einem Plugin, daher kann ich keine single-sample_post_type.php-Datei erstellen, um eine leere Seite einzurichten.
Sie können template_redirect
hook verwenden, um für einen benutzerdefinierten Beitragstyp umzuleiten. Sie können eine beliebige andere URL anstelle von home_url()
und den Fehlercode in einem anderen Argument verwenden.
<?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;
}
}
?>
Aktualisierte:
Ein alternativer Ansatz wäre, 'publicly_queryable' => false
beim Registrieren des benutzerdefinierten Posts festzulegen, wie bereits von @gustavo erwähnt. Aber das gibt dir nur 404 direkt, es würde sowohl einzelne als auch Archive verbergen, im Grunde genommen komplett vom Front-End verborgen und kann nur für benutzerdefinierte Posts eingestellt werden.
Setzen Sie einfach das Argument
'publicly_queryable' => false
wenn Sie register_post_type () aufrufen
Eine einfachere Möglichkeit, dies zu tun, besteht darin, die folgenden Argumente bei der Registrierung des benutzerdefinierten Beitragstyps zu übergeben
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
));
Ein. Aus Ihrer Funktionsdatei.
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;
}
}
Zwei. Aus deiner single.cpt.php Datei:
<?php wp_redirect( home_url() ); exit; ?>
Nach der wirklich guten Antwort von Sven habe ich seine Funktion umgeschrieben, um das Hinzufügen mehrerer Beitragstypen zu vereinfachen, indem ich in_array()
in der if-Anweisung verwende und dann auf die Archivseite anstatt auf die Homepage umleitung.
(Ich denke übrigens, die Einstellung query_var
und/oder publically_queryable
auf false deaktiviert nicht nur die einzelnen Ansichten, sondern auch die native Archivansicht, die 'has_archive' => true
überschreibt. In diesem Fall können Sie weiterhin eine benutzerdefinierte WP_query einrichten und Ihr eigenes Archiv erstellen Seite, in einer Vorlage, aber die Hauptabfrage macht das nicht mehr, oder?)
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' );
Getestet alle oben genannten und die tatsächliche Lösung ist einfacher als alle vorgeschlagenen Weiterleitungen.
Damit das Archiv zugänglich ist und die Elemente aufgelistet werden, muss ein einzelner Beitrag nicht zugänglich sein und die automatische Weiterleitung auf 404 erfolgen
'query_var' => false
bei der Registrierung Ihres CPT. Wenn Sie publicly_queryable
auf false setzen, werden Ihre Archive umgeleitet nach Hause, jede andere Kombination funktioniert nicht. Setzen Sie den query_var
auf false und fertig.
Hier ist die vollständige CPT https://Gist.github.com/danyj/bfd038d3c8d578548c4d700bd0a7942a
siehe Zeile 50 https://Gist.github.com/danyj/bfd038d3c8d578548c4d700bd0a7942a#file-thz_cpt_items_single_view_redirect-php-L50
wie hier angegeben
https://codex.wordpress.org/Function_Reference/register_post_type
Hinweis: Wenn query_var leer, null oder ein boolescher Wert FALSE ist, versucht WordPress immer noch, es zu interpretieren (4.2.2), und Vorschauen/Ansichten Ihres benutzerdefinierten Beitrags geben 404s zurück.