Come disabilitare la visualizzazione singola per un tipo di post personalizzato?
7 risposta
- voti
-
- 2014-01-05
METODO 1:
Reindirizzamento a un URLpersonalizzatoper visualizzazione singola,lapagina di archivio è ancora accessibilepubblicamente .
Puoi utilizzare l'hook
template_redirect
per reindirizzare untipo dipostpersonalizzato,puoi utilizzare qualsiasi altro URL che desideri alposto dihome_url()
e il codice dierrorein altro argomento.<?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; } } ?>
METODO 2:
Disattiva completamente lapagina singola o di archivio dalfront-end; Funziona soloper unpostpersonalizzato.
Un approccio alternativo consistenello specificareil valoreperilparametro
publicly_queryable
durante la registrazione delpostpersonalizzato se sei d'accordo con la visualizzazione di unapagina 404. [Grazie @gustavo]'publicly_queryable' => false`
Nasconde sia lapagina singola che quella di archivioperil CPT,praticamente completamentenascosta dalfront-endmapuòessereeseguita soloperpostpersonalizzati.
^ Idealeper lo scenarioin cui ènecessario unpostpersonalizzato soloper uso amministrativo/back-end.
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.
-
Unabuona soluzione.Hotrovato utileeseguire questo reindirizzamento soloper utentinon autenticati,controllando se "get_current_user_id ()" restituisce 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
-
Siprega di controllareilmodulo di risposta @GustavoPlease check the answer form @Gustavo
- 2
- 2016-11-18
- Richard
-
perchénon usare solo `is_singular ('post-type-slug')`nella condizione `if ()`invece di 2 condizioni?why not use only `is_singular('post-type-slug')` in the `if()` condition instead of 2 conditions?
- 2
- 2018-10-22
- Akash K.
-
@AkashK.Sì,anche quellopuòfunzionare,nonero a conoscenza dellafunzione.@AkashK. Yeah that can work as well, wasn't aware of the function.
- 0
- 2018-10-23
- Kumar
-
il remove_rewrite_tag ('%post-type-slug%');il suggerimento è unabuona soluzionethe remove_rewrite_tag( '%post-type-slug%' ); suggestion is a good solution
- 0
- 2020-05-04
- Pbearne
-
Manca laparentesi di chiusuranel codice - dovrebbeessere ... 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 Sì,grazie.@neilgee Yep, thanks.
- 0
- 2020-08-18
- Kumar
-
-
Questa sembra la rispostaperimpedire altuo CPT di crearepagine webeffettivementre crea ancoratuttii riferimenti al database.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
-
Anche questonasconde l'archivioThis hides archive too
- 32
- 2016-10-11
- spaceman
-
Questa dovrebbeessere la risposta accettata.This should be the accepted answer.
- 1
- 2018-03-16
- SinisterBeard
-
Perme questo causa un reindirizzamento alla homepageinvece di un 404. Qualcheideaperché?Sto registrandopost_type con Piklist,nel caso siapertinente.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
Unmodopiù sempliceperfarlopuòessereilpassaggio dei seguenti argomenti durante la registrazione deltipo di articolopersonalizzato
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 ));
-
Avrestieffettivamentebisogno che `publically_querable` sia vero affinchégli archivi ditipopostfunzionino.You would actually need `publically_querable` to be true for Post Type Archives to work.
- 2
- 2014-11-12
- Howdy_McGee
-
Questononfunzionaperme.Si limita a reindirizzare alla homepage quando sitenta di accedere all'archivioThis 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
Uno. Daltuofilefunctions.
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; } }
Due. Daltuofile 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; ?>
-
Mi èpiaciuta la seconda opzione.Ma hobisogno di sapere se c'è qualche svantaggio con questa seconda opzione.I liked second option. But I need to know is there any drawback with this second option.
- 0
- 2017-10-10
- user2584538
-
@ user2584538 Senon hai unfile `single-cpt_name.php`personalizzato,nonpuoifarlo.Semetti lafunzionein un semplicefileplugin,puoi attivarla/disattivarla senzamodificare alcunfile.@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
Testatitutti quelli sopramenzionatie la soluzioneeffettiva èpiù semplice di qualsiasi reindirizzamento suggerito.
Affinché l'archivio sia accessibileedelenchiglielementie il singolopost non sia accessibilee il reindirizzamento automatico al set 404
'query_var' => false
durante la registrazione del CPT. Seimposti
publicly_queryable
sufalse,i tuoi archivi verranno reindirizzati a home,qualsiasi altra combinazionenonfunzionerà. Impostaquery_var
sufalsee ilgioco èfatto.Eccoil CPT completo https://gist.github.com/danyj/bfd038d3c8d578548c4d700bd0a7942a
vedi riga 50 https://gist.github.com/danyj/bfd038d3c8d578548c4d700bd0a7942a #file-thz_cpt_items_single_view_redirect-php-L50
comeindicato qui
https://codex.wordpress.org/Function_Reference/register_post_type
Nota: se query_var è vuoto,null o un valorebooleano FALSE,WordPress lofarà tentare ancora diinterpretarlo (4.2.2)e anteprime/visualizzazioni deltuo ilpostpersonalizzato restituirà 404.
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.
-
Sembra unpo 'come un hackma sembrafunzionare.Vorrei che aggiungessero semplicemente unaproprietà has_single dedicatainsieme allaproprietà has_archiveesistente.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
Partendo dalla risposta davverobuona di Sven,ho riscritto la suafunzioneper renderepiù semplice l'aggiunta dipiùtipi dipost utilizzando
in_array ()
nell'istruzioneif e quindi reindirizzando allapagina dell'archivioinvece che alla homepagina.(aproposito,penso che l'impostazione di
query_var
e/opublically_queryable
sufalse disabiliterànon solo le singole viste,ma anche la vista archivionativa,sovrascrivendo < code> 'has_archive'=>true . Intal casopuoi ancoraimpostare una WP_querypersonalizzatae creare latuapagina di archivio,in unmodello,ma la queryprincipalenon lofaràpiù,lofarà?)funzionefq_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); Uscita; } } 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' );
-
questa è stata unabuonaidea,manonfunziona se simodificail reindirizzamentoperi cptthis was a good idea, but doesn't work if you change your redirect for the cpts
- 0
- 2020-03-23
- rudtek
-
Ho cambiato latua riga wp_redirectin `wp_redirect (get_post_type_archive_link ($ queried_post_type),301);`funziona ameraviglia!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
-
Bello. Buonmiglioramento.Nice. Good improvement.
- 0
- 2020-03-24
- slashbob
-
- 2019-09-25
Nel casoin cui desideri disabilitare completamente la visualizzazione singola deltipo dipostpersonalizzato sulfrontendmaesserein grado di visualizzare lapagina di archivio,le cose stanno diventando unpo 'complicate.
L'impostazione di
publicly_queryable
sufalse
orewrite
sufalse
impedirà la visualizzazione sia della vista singola sia di quella archivio. Non vi è alcunflagnegli argomenti dellafunzioneregister_post_type
perimpedire la creazione di regole di riscrittura a vista singola.https ://github.com/WordPress/WordPress/blob/5.2.3/wp-includes/class-wp-post-type.php#L540
Tuttavia,puoi rimuovereiltag di riscrittura dopo aver registratoiltipo diposte questo lasceràintatte le regole di riscrittura della vista archivio,ma rimuoverà solo le regole di riscrittura a vista singola.
/** * 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 altro vantaggio è che d'orain poipuoi creare semplicipagine WordPress utilizzando la strutturapermalink ditipopostevento (
event/simple-page
) chepuòessere utilein siti Web complessi.Ricordarsi di cancellare le regole di riscrittura dopo lamodifica del codice.
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.
-
Questa dovrebbeessere la risposta accettata,èbreve,semplicee non creaproblemi con lepagine di archivio.This should be the accepted answer, its short, simple and doesn't mess with archive pages.
- 0
- 2020-06-12
- Cynthia Lara
Ho creato untipo dipostpersonalizzato:
Comeposso disabilitare la visualizzazione di un singolopostper questo specificotipo dipost?La visualizzazione di un semplice 404 vabene oil reindirizzamento alla homepage.Questo è all'interno di unplugin,quindinonposso creare unfile single-sample_post_type.phpperimpostare unapagina vuota.