Wie deaktiviere ich die Einzelansicht für einen benutzerdefinierten Beitragstyp?
7 Antworten
- Stimmen
-
- 2014-01-05
METHODE 1:
Umleiten zueinerbenutzerdefinierten URLfüreine einzelne Ansicht. Die Archivseiteist weiterhin öffentlich zugänglich. .
Sie können den Hook
template_redirect
verwenden,umeinen benutzerdefinierten Beitragstyp umzuleiten. Sie können anstelle vonhome_url()
und dem Fehlercodein eine andere URL verwenden,die Siemöchten anderes Argument.<?php add_action( 'template_redirect', 'wpse_128636_redirect_post' ); function wpse_128636_redirect_post() { if ( is_singular( 'sample_post_type' ) ) { wp_redirect( home_url(), 301 ); exit; } } ?>
METHODE 2:
Deaktivieren Sie die Einzel- oder Archivseiteim Front-End vollständig. Funktioniertnurfüreinen benutzerdefinierten Beitrag.
Ein alternativer Ansatzbesteht darin,beim Registrieren desbenutzerdefinierten Beitragseinen Wertfür den Parameter
publicly_queryable
anzugeben,wenn Siemit der Anzeigeeiner 404-Seiteeinverstanden sind. [Danke @gustavo]'publicly_queryable' => false`
Es werden sowohl Einzel- als auch Archivseitenfür das CPT ausgeblendet,dieim Grundegenommen vollständig vor dem Front-End verborgen sind,abernurfürbenutzerdefinierte Postserstellt werden können.
^ Ambestengeeignet für das Szenario,in dem Sieeinen benutzerdefinierten Beitragnurfür die Verwendung durch Administratoren/Backendsbenötigen.
METHOD 1:
Redirect to a custom URL for single view, archive page is still publicly accessible.
You can use
template_redirect
hook to redirect for a custom post type, you can use any other URL you want to in place ofhome_url()
and the error code in other argument.<?php add_action( 'template_redirect', 'wpse_128636_redirect_post' ); function wpse_128636_redirect_post() { if ( is_singular( 'sample_post_type' ) ) { wp_redirect( home_url(), 301 ); exit; } } ?>
METHOD 2:
Completely disable Single or Archive page from front-end; Works for a Custom post only.
A alternative approach is to specify value for param
publicly_queryable
while registering the custom post if you are ok with displaying a 404 page. [ Thanks @gustavo ]'publicly_queryable' => false`
It hides single as well as archive page for the CPT, basically completely hidden from front-end but can be done for custom posts only.
^ Best suitable for the scenario where you need a Custom post for admin/back-end usage only.
-
Einegute Lösung.Ichfandes hilfreich,diese Umleitungnurfürnicht authentifizierte Benutzer durchzuführen,indem überprüft wurde,obget_current_user_id () auf 0 ausgewertet wird.A good solution. I found it was helpful to only perform this redirect for non-authenticated users, by checking to see if `get_current_user_id()` evaluates to 0.
- 0
- 2015-06-29
- RevNoah
-
Bitte überprüfen Sie das Antwortformular @GustavoPlease check the answer form @Gustavo
- 2
- 2016-11-18
- Richard
-
Warumnichtnur "is_singular ("post-type-slug ")"in der "if ()" - Bedingung anstelle von 2 Bedingungen verwenden?why not use only `is_singular('post-type-slug')` in the `if()` condition instead of 2 conditions?
- 2
- 2018-10-22
- Akash K.
-
@ AkashK.Ja,das kann auchfunktionieren,war sich der Funktionnichtbewusst.@AkashK. Yeah that can work as well, wasn't aware of the function.
- 0
- 2018-10-23
- Kumar
-
der remove_rewrite_tag ('%post-type-slug%');Vorschlagisteine gute Lösungthe remove_rewrite_tag( '%post-type-slug%' ); suggestion is a good solution
- 0
- 2020-05-04
- Pbearne
-
Fehlende schließende Klammerim Code - sollte ... if (is_singular ('sample_post_type'))Missing closing bracket in code - should be... if ( is_singular( 'sample_post_type' ) )
- 1
- 2020-08-18
- neilgee
-
@neilgee Ja,danke.@neilgee Yep, thanks.
- 0
- 2020-08-18
- Kumar
-
-
Dies scheint die Antwort zu sein,um zu verhindern,dass Ihr CPTtatsächliche Webseitenerstellt,während weiterhin alle Datenbankreferenzenerstellt werden.This looks like the answer to stop your CPT from creating actual web pages while still creating all database references.
- 1
- 2015-09-17
- Ben Racicot
-
Dies verbirgt auch das ArchivThis hides archive too
- 32
- 2016-10-11
- spaceman
-
Dies sollte die akzeptierte Antwort sein.This should be the accepted answer.
- 1
- 2018-03-16
- SinisterBeard
-
Fürmichführt dies zueiner Weiterleitung auf die Homepage anstelleeiner 404. Irgendwelche Ideen warum?Ich registriere denpost_typebei Piklist,falls dies relevantist.For me this causes a redirect to the homepage instead of a 404. Any ideas why? I'm registering the post_type with Piklist, in case that's relevant.
- 0
- 2018-09-09
- emersonthis
-
-
- 2014-05-24
Eineeinfachere Möglichkeitbesteht darin,diefolgenden Argumente zu übergeben,wenn Sie denbenutzerdefinierten Beitragstyp
registrierenregister_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 ));
A simpler way to do that can be passing the following args when registering the Custom 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 ));
-
Sie würdentatsächlich "public_querable"benötigen,damit "Post Type Archives"funktioniert.You would actually need `publically_querable` to be true for Post Type Archives to work.
- 2
- 2014-11-12
- Howdy_McGee
-
Dasfunktioniertbei mirnicht.Es wirdnur zur Homepage zurückgeleitet,wenn versucht wird,zum Archiv zugelangenThis does not work for me. It justs redirects back to the homepage when trying to go to the archive
- 0
- 2015-07-15
- Yahya Uddin
-
- 2014-05-24
Eins. 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 Ihrer single.cpt.php-Datei:
<?php wp_redirect( home_url() ); exit; ?>
One. From your functions file.
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; } }
Two. From your single.cpt.php file:
<?php wp_redirect( home_url() ); exit; ?>
-
Ichmochte die zweite Option.Aberichmuss wissen,ob diese zweite Optioneinen Nachteil hat.I liked second option. But I need to know is there any drawback with this second option.
- 0
- 2017-10-10
- user2584538
-
@ user2584538 Wenn Sie keinebenutzerdefinierte Datei "single-cpt_name.php" haben,können Sie diesnichttun.Wenn Sie die Funktionin eineeinfache Plugin-Dateieinfügen,können Sie sie aktivieren/deaktivieren,ohneeine Datei zubearbeiten.@user2584538 If you don't have a custom `single-cpt_name.php` file you could not do it. If you put the function in a simple plugin file, you could activate/deactivate without editing any file.
- 0
- 2018-02-05
- EliasNS
-
- 2018-11-16
Alle obengenannten Tests wurden durchgeführt,und dietatsächliche Lösungisteinfacher als alle vorgeschlagenen Weiterleitungen.
Damit das Archiv zugänglichist und die Elemente aufgelistet werden,kannein einzelner Beitrag nicht zugänglich sein und automatisch auf 404 set
umgeleitet werden'query_var' => false
bei der Registrierung Ihres CPT. Wenn Sie
publicly_queryable
auffalse setzen,werden Ihre Archive nach Hause umgeleitet,undjede andere Kombinationfunktioniertnicht. Setzen Sie diequery_var
auffalse und das wars.Hierfinden Sie die vollständige CPT https://gist.github.com/danyj/bfd038d3c8d578548c4d700b /p>
siehe Zeile 50 https://gistj/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 oderboolean FALSEist,wird WordPress diestun Versuchen Sieimmernoch,es zuinterpretieren (4.2.2) und Vorschauen/Ansichten von Ihnen Benutzerdefinierte Postgibt 404s zurück.
Tested all the ones mentioned above and the actual solution is simpler than any redirects suggested.
In order to have archive be accessible and list the items, and single post not be accessible and auto redirect to 404 set
'query_var' => false
when registering your CPT. If you set
publicly_queryable
to false your archives will be redirected to home, any other combo wont work. Set thequery_var
to false and that is it.Here is full CPT https://gist.github.com/danyj/bfd038d3c8d578548c4d700bd0a7942a
as stated here
https://codex.wordpress.org/Function_Reference/register_post_type
Note: If query_var is empty, null, or a boolean FALSE, WordPress will still attempt to interpret it (4.2.2) and previews/views of your custom post will return 404s.
-
Esfühlt sichein bisschen wieein Hack an,aberes scheint zufunktionieren.Ich wünschte,sie würden stattdesseneinfacheine dedizierte has_single-Eigenschaft zusammenmit der vorhandenen has_archive-Eigenschaft hinzufügen.It feels a bit like a hack but it seems to work. Wish they'd just add a dedicated has_single property along with the existing has_archive property instead.
- 1
- 2019-01-31
- powerbuoy
-
- 2016-07-09
Ausgehend von Svens wirklichguter Antwort habeich seine Funktion umgeschrieben,um das Hinzufügenmehrerer Beitragstypenmithilfe von
in_array ()
in derif-Anweisung zu vereinfachen und dann zur Archivseite anstatt zur Startseite umzuleiten Seite.(Ich denke übrigens,dass die Einstellung
query_var
und/oderpublic_queryable
auffalsenichtnur dieeinzelnen Ansichten,sondern auch dienative Archivansicht deaktiviert und <überschreibt code> 'has_archive'=>true In diesem Fall können Sieimmernocheine benutzerdefinierte WP_queryeinrichten und Ihreeigene Archivseitein einer Vorlageerstellen,aber die Hauptabfrage wird dasnichtmehrtun,oder??)-Funktionfq_disable_single_cpt_views () { $ queried_post_type=get_query_var ('post_type'); $ cpts_without_single_views=array ('mein-post-Typ','mein-anderer-post-Typ'); if (is_single () & amp; & amp;in_array ($ queried_post_type,$ cpts_without_single_views)) { wp_redirect (home_url ('/'. $ queried_post_type. '/'),301); Ausfahrt; }} }} add_action ('template_redirect','fq_disable_single_cpt_views');
Working from of Sven's really good answer, I rewrote his function to make it easier to add multiple post types using
in_array()
in the if statement and then redirecting to the archive page instead of the home page.(by the way, I think the setting
query_var
and/orpublically_queryable
to false will disable not only the single views, but also the native archive view, overriding'has_archive' => true
. In that case you can still set up a custom WP_query and create your own archive page, in a template, but the main query won't do that any more, will it?)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' );
-
Dies wareine gute Idee,funktioniert abernicht,wenn Sie Ihre Weiterleitungfür die cpts ändernthis was a good idea, but doesn't work if you change your redirect for the cpts
- 0
- 2020-03-23
- rudtek
-
Ich habe deine wp_redirect-Zeilein `wp_redirect (get_post_type_archive_link ($ queried_post_type),301)geändert;`funktioniertein Zauber!I changed your wp_redirect line to `wp_redirect( get_post_type_archive_link( $queried_post_type ), 301 );` works a charm!
- 1
- 2020-03-23
- rudtek
-
Nett. Gute Verbesserung.Nice. Good improvement.
- 0
- 2020-03-24
- slashbob
-
- 2019-09-25
Wenn Sie die Einzelansichteinesbenutzerdefinierten Beitragstypsim Frontend vollständig deaktivierenmöchten,aber Archivseiten anzeigenmöchten,werden die Dingeetwas kompliziert.
Wenn Sie
publicly_queryable
auffalse
oderrewrite
auffalse
setzen,wird die Anzeige sowohl der Einzel- als auch der Archivansicht verhindert. Die Funktionsargumenteregister_post_type
enthalten kein Flag,um zu verhindern,dassnur Regeln zum Umschreibeneinereinzelnen Ansichterstellt werden.https ://github.com/WordPress/WordPress/blob/5.2.3/wp-includes/class-wp-post-type.php#L540
Sie könnenjedoch das Umschreibetagnach der Registrierung Ihres Beitragstypsentfernen. Dadurchbleiben die Umschreiberegelnfür die Archivansicht unberührt,es werdenjedochnur Umschreibregelnfüreinzelne Ansichtenentfernt.
/** * Register event post type */ function wpse_128636_register_event_post_type() { $labels = array( 'name' => __( 'Events' ), 'singular_name' => __( 'Event' ), 'add_new' => __( 'Add new' ), 'add_new_item' => __( 'Add new' ), 'edit_item' => __( 'Edit' ), 'new_item' => __( 'New' ), 'view_item' => __( 'View' ), 'search_items' => __( 'Search' ), 'not_found' => __( 'Not found' ), 'not_found_in_trash' => __( 'Not found Events in trash' ), 'parent_item_colon' => __( 'Parent' ), 'menu_name' => __( 'Events' ), ); $args = array( 'labels' => $labels, 'hierarchical' => false, 'supports' => array( 'title', 'page-attributes' ), 'public' => true, 'show_ui' => true, 'show_in_menu' => true, 'show_in_nav_menus' => true, 'publicly_queryable' => true, 'exclude_from_search' => true, 'has_archive' => true, 'rewrite' => array('slug' => 'event'), 'capability_type' => 'post', ); register_post_type( 'event', $args ); remove_rewrite_tag( '%event%' ); // This line will remove event rewrite rules for single view } add_action( 'init', 'wpse_128636_register_event_post_type' );
Ein weiterer Bonusist,dass Sie vonnun aneinfache WordPress-Seitenmit der Permalink-Struktur vom Typ Event Post (
event/simple-page
)erstellen können,diebei komplexen Websites hilfreich sein kann.Denken Sie daran,die Umschreiberegelnnach der Codeänderung zu leeren.
In case you want to completely disable custom post type single view on frontend but be able to display archive page things are getting a little complicated.
Setting
publicly_queryable
tofalse
orrewrite
tofalse
will prevent for displaying both single and archive view. There is no flag inregister_post_type
function arguments to prevent creating only single view rewrite rules.https://github.com/WordPress/WordPress/blob/5.2.3/wp-includes/class-wp-post-type.php#L540
However you can remove rewrite tag after registering your post type and this will leave archive view rewrite rules untouched but remove only single view rewrite rules.
/** * Register event post type */ function wpse_128636_register_event_post_type() { $labels = array( 'name' => __( 'Events' ), 'singular_name' => __( 'Event' ), 'add_new' => __( 'Add new' ), 'add_new_item' => __( 'Add new' ), 'edit_item' => __( 'Edit' ), 'new_item' => __( 'New' ), 'view_item' => __( 'View' ), 'search_items' => __( 'Search' ), 'not_found' => __( 'Not found' ), 'not_found_in_trash' => __( 'Not found Events in trash' ), 'parent_item_colon' => __( 'Parent' ), 'menu_name' => __( 'Events' ), ); $args = array( 'labels' => $labels, 'hierarchical' => false, 'supports' => array( 'title', 'page-attributes' ), 'public' => true, 'show_ui' => true, 'show_in_menu' => true, 'show_in_nav_menus' => true, 'publicly_queryable' => true, 'exclude_from_search' => true, 'has_archive' => true, 'rewrite' => array('slug' => 'event'), 'capability_type' => 'post', ); register_post_type( 'event', $args ); remove_rewrite_tag( '%event%' ); // This line will remove event rewrite rules for single view } add_action( 'init', 'wpse_128636_register_event_post_type' );
Another bonus is that from now on you can create simple WordPress pages using event post type permalink structure (
event/simple-page
) which can be helpful in complex websites.Remember to flush rewrite rules after code modification.
-
Dies sollte die akzeptierte Antwort sein,sieist kurz,einfach undführtnicht zu Archivseiten.This should be the accepted answer, its short, simple and doesn't mess with archive pages.
- 0
- 2020-06-12
- Cynthia Lara
Ich habeeinen benutzerdefinierten Beitragstyperstellt:
Wie kannich die Einzelbeitragsansichtfür diesenbestimmten Beitragstyp deaktivieren?Das Anzeigeneineseinfachen 404istin Ordnung oder das Umleiten auf die Homepage.Diesistin einem Pluginenthalten,daher kannich keine single-sample_post_type.php-Dateierstellen,umeine leere Seiteeinzurichten.