Comment désactiver la vue unique pour un type de publication personnalisé?
7 réponses
- votes
-
- 2014-01-05
MÉTHODE 1:
Redirection vers une URLpersonnaliséepour une vue unique,lapage d'archiveesttoujours accessible aupublic .
Vouspouvez utiliser le hook
template_redirect
pour rediriger untype depublicationpersonnalisé,vouspouvez utilisertoute autre URL que vous souhaitez à laplace dehome_url()
et le code d'erreur dans autre 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; } } ?>
MÉTHODE 2:
Désactiver complètement lapage unique ou d'archive dufront-end; Fonctionne uniquementpour un articlepersonnalisé.
Une autre approche consiste à spécifier la valeur duparamètre
publicly_queryable
lors de l'enregistrement dumessagepersonnalisé si vous êtes d'accordpour afficher unepage 404. [Merci @gustavo]'publicly_queryable' => false`
Il cache unepage unique ainsi qu'unepage d'archivepour le CPT,fondamentalement complètement caché dufront-endmaisne peut êtrefait quepour les articlespersonnalisés.
^ Idéalpour le scénario où vous avezbesoin d'un articlepersonnalisépour un usage administrateur/back-end uniquement.
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.
-
Unebonne solution.J'aitrouvé utile den'effectuer cette redirection quepour les utilisateursnon authentifiés,en vérifiant si `get_current_user_id ()` vaut 0.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
-
Veuillez vérifier leformulaire de réponse @GustavoPlease check the answer form @Gustavo
- 2
- 2016-11-18
- Richard
-
pourquoine pas utiliser uniquement `is_singular ('post-type-slug')` dans la condition `if ()` au lieu de 2 conditions?why not use only `is_singular('post-type-slug')` in the `if()` condition instead of 2 conditions?
- 2
- 2018-10-22
- Akash K.
-
@AkashK.Ouais,celapeutfonctionner aussi,je n'étaispas au courant de lafonction.@AkashK. Yeah that can work as well, wasn't aware of the function.
- 0
- 2018-10-23
- Kumar
-
le remove_rewrite_tag ('%post-type-slug%');la suggestionest unebonne solutionthe remove_rewrite_tag( '%post-type-slug%' ); suggestion is a good solution
- 0
- 2020-05-04
- Pbearne
-
Crochetfermantmanquant dans le code - devrait être ... 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 Oui,merci.@neilgee Yep, thanks.
- 0
- 2020-08-18
- Kumar
-
-
Cela ressemble à la solutionpourempêcher votre CPT de créer despages Web réellestouten créanttoutes les références debase de données.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
-
Celamasque aussi les archivesThis hides archive too
- 32
- 2016-10-11
- spaceman
-
Cela devrait être la réponse acceptée.This should be the accepted answer.
- 1
- 2018-03-16
- SinisterBeard
-
Pourmoi,celaprovoque une redirection vers lapage d'accueil au lieu d'un 404. Desidéespourquoi?J'enregistre lepost_type avec Piklist,au cas où cela seraitpertinent.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
Unmoyenplus simple de lefairepeut être detransmettre les arguments suivants lors de l'enregistrement dutype depublicationpersonnalisé
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 ));
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 ));
-
Vous auriezen faitbesoin que `publically_querable` soit vraipour que les archives detype depublicationfonctionnent.You would actually need `publically_querable` to be true for Post Type Archives to work.
- 2
- 2014-11-12
- Howdy_McGee
-
Celane fonctionnepaspourmoi.Il suffit de rediriger vers lapage d'accueil lorsque vousessayez d'accéder à l'archiveThis 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
Un. De votrefichier defonctions.
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; } }
Deux. De votrefichier single.cpt.php:
<?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; ?>
-
J'ai aimé la deuxième option.Maisj'aibesoin de savoir s'il y a uninconvénient avec cette deuxième option.I liked second option. But I need to know is there any drawback with this second option.
- 0
- 2017-10-10
- user2584538
-
@ user2584538 Si vousn'avezpas defichierpersonnalisé `single-cpt_name.php`,vousne pouvezpas lefaire.Si vousmettez lafonction dans un simplefichier deplugin,vouspouvez activer/désactiver sansmodifier aucunfichier.@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
J'aitestétous ceuxmentionnés ci-dessuset la solution actuelleestplus simple quetoutes les redirections suggérées.
Pour que l'archive soit accessibleet répertorier les éléments,et que lemessage unique ne soitpas accessibleet que la redirection automatique vers 404 soit définie
'query_var' => false
lors de l'enregistrement de votre CPT. Si vous définissez
publicly_queryable
surfalse,vos archives seront redirigées vers lamaison,toute autre combinaisonne fonctionnerapas. Définissezquery_var
surfalseet c'esttout.Voici le CPT complet https://gist.github.com/danyj/bfd038d3c8d578548c4da700bd/p>
voir ligne 50 https://gist.github.com/bfd038d3c8d578548c4d700bd0a7942a #file-thz_cpt_items_single_view_redirect-php-L50
commeindiquéici
https://codex.wordpress.org/Function_Reference/register_post_type
Remarque: si query_varest vide,null ou unbooléen FALSE,WordPress essayeztoujours de l'interpréter (4.2.2)et des aperçus/vues de votre lapublicationpersonnalisée renverra 404s.
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.
-
Cela ressemble unpeu à un hackmais cela semblefonctionner.Je souhaite qu'ils ajoutent simplement unepropriété has_single dédiée avec lapropriété has_archiveexistante à laplace.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
Àpartir de latrèsbonne réponse de Sven,j'ai réécrit safonctionpourfaciliter l'ajout deplusieurstypes depublicationen utilisant
in_array ()
dans l'instructionif,puisen redirigeant vers lapage d'archive au lieu de lapage d'accueilpage.(enpassant,je pense que leparamètre
query_var
et/oupublically_queryable
surfalse désactiveranon seulement les vues uniques,mais également la vue d'archivenative,remplaçant < code> 'has_archive'=>true . Dans ce cas,vouspouveztoujours configurer une WP_querypersonnaliséeet créer votreproprepage d'archive,dans unmodèle,mais la requêteprincipalene leferaplus,n'est-cepas?)fonctionfq_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 () & amp; & amp;in_array ($ queried_post_type,$ cpts_without_single_views)) { wp_redirect (home_url ('/'. $ queried_post_type. '/'),301); sortie; } } 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' );
-
c'était unebonneidée,mais celane fonctionnepas si vousmodifiez votre redirectionpour les cptsthis was a good idea, but doesn't work if you change your redirect for the cpts
- 0
- 2020-03-23
- rudtek
-
J'ai changé votre ligne wp_redirecten `wp_redirect (get_post_type_archive_link ($ queried_post_type),301);`fonctionne un charme!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
-
Agréable. Bonne amélioration.Nice. Good improvement.
- 0
- 2020-03-24
- slashbob
-
- 2019-09-25
Si vous souhaitez désactiver complètement l'affichage unique dutype depublicationpersonnalisé sur lefrontend,mais que vouspouvez afficher lapage d'archive,les choses deviennent unpeu compliquées.
La définition de
publicly_queryable
surfalse
ou derewrite
surfalse
empêchera l'affichage à lafois de la vue uniqueet de la vue d'archive. Iln'y apas d'indicateur dans les arguments de lafonctionregister_post_type
pourempêcher de créer uniquement des règles de réécriture de vue unique.https ://github.com/WordPress/WordPress/blob/5.2.3/wp-includes/class-wp-post-type.php#L540
Cependant,vouspouvez supprimer labalise de réécriture après avoirenregistré votretype demessage,ce qui laissera les règles de réécriture de la vue d'archiveintactesmais supprimera uniquement les règles de réécriture de vue unique.
/** * 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' );
Un autre avantageest qu'àpartir demaintenant,vouspouvez créer despages WordPress simplesen utilisant une structure de lienpermanent detypepublication d'événement (
event/simple-page
) quipeut être utile dans les sites Web complexes.N'oubliezpas de vider les règles de réécriture après lamodification du code.
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.
-
Cela devrait être la réponse acceptée,elleest courte,simpleet negâchepas lespages d'archives.This should be the accepted answer, its short, simple and doesn't mess with archive pages.
- 0
- 2020-06-12
- Cynthia Lara
J'ai créé untype demessagepersonnalisé:
Commentpuis-je désactiver la vue depublication uniquepour cetype depublication spécifique?Afficher un simple 404esttrèsbien,ou rediriger vers lapage d'accueil.Ceciest à l'intérieur d'unplugin,doncje nepeuxpas créer unfichier single-sample_post_type.phppour configurer unepage vide.