Rimuovere Slug dai risultati del tipo di post personalizzato in 404
3 risposta
- voti
-
- 2018-01-27
La registrazione deltipo dipostpersonalizzatoe lamodifica delpermalink sono OK. Ilproblema è con le regole di riscrittura di WordPress chemoltoprobabilmente corrisponderanno all'URL "ripulito" deituoi semplici collegamenti allepaginee imposterà la query
pagename
varnonname
come assume lafunzionechange_slug_struct()
.Quindi cambia lafunzionein questopertenere conto dituttii casi:
function change_slug_struct( $query ) { if ( ! $query->is_main_query() || 2 != count( $query->query ) || ! isset( $query->query['page'] ) ) { return; } if ( ! empty( $query->query['name'] ) ) { $query->set( 'post_type', array( 'post', 'single-link', 'page' ) ); } elseif ( ! empty( $query->query['pagename'] ) && false === strpos( $query->query['pagename'], '/' ) ) { $query->set( 'post_type', array( 'post', 'single-link', 'page' ) ); // We also need to set the name query var since redirect_guess_404_permalink() relies on it. $query->set( 'name', $query->query['pagename'] ); } } add_action( 'pre_get_posts', 'change_slug_struct' );
The registering of the custom post type and the permalink modification is OK. The problem is with the WordPress rewrite rules that more than likely will match the "cleaned up" URL of your simple links to pages and it will set the
pagename
query var notname
as yourchange_slug_struct()
function assumed.So change the function to this to account for all cases:
function change_slug_struct( $query ) { if ( ! $query->is_main_query() || 2 != count( $query->query ) || ! isset( $query->query['page'] ) ) { return; } if ( ! empty( $query->query['name'] ) ) { $query->set( 'post_type', array( 'post', 'single-link', 'page' ) ); } elseif ( ! empty( $query->query['pagename'] ) && false === strpos( $query->query['pagename'], '/' ) ) { $query->set( 'post_type', array( 'post', 'single-link', 'page' ) ); // We also need to set the name query var since redirect_guess_404_permalink() relies on it. $query->set( 'name', $query->query['pagename'] ); } } add_action( 'pre_get_posts', 'change_slug_struct' );
-
questo ha aiutato,non avevonemmenobisogno di cambiare o aggiornarei permalink.Grazie!!that helped, I didn't even need to change or refresh the permalinks. Thank you!!
- 0
- 2018-01-29
- Paranoia
-
chenon hafunzionato completamente,se ho unapagina con ungenitore (es. domain.com/parent/page) ottengo un 404. Se lo cambioin domain.com/page (senzailgenitore) allorafunziona dinuovo.Qualcheidea di cosapotrebbeessere?that didn't fully work, if I have a page with a parent (eg. domain.com/parent/page) i get a 404. If I change it to domain.com/page (without the parent) then it works again. Any idea what this could be?
- 0
- 2018-01-29
- Paranoia
-
Lo riporterò alla risposta corretta,se abbiamo una soluzione.Purtroppo sonobloccato :(I'll change this back to the correct answer, if we have a solution. Unfortunately I am stuck :(
- 0
- 2018-01-30
- Paranoia
-
Sì.Non hopresoin considerazioneil casoin cui sonopresentipaginefiglio.Poichéiltuotipo dipostpersonalizzatonon ègerarchico,è sicuroescluderei casiin cui sonopresentipaginefiglie.Homodificato lamia risposta.Fammi sapere sefunzionae non dimenticare dipubblicizzarlo come la rispostagiusta.Yes. I haven't taken into account the case where there are child pages. Since your custom post type is not hierarchical, it is safe to exclude cases when there are child pages. I have modified my answer. Do let me know if it works and don't forget to market it as the right answer.
- 0
- 2018-01-30
- Vlad Olaru
-
sei ungenio!!you're a genius!!
- 0
- 2018-01-30
- Paranoia
-
- 2018-01-23
Devimodificare la struttura delperma.Perimpostazionepredefinita,ilpost deltipo dipostpersonalizzato verràtrovato solo se l'URLinizia conilprefisso slug.Quando cambiilprefisso avraiproblemi simili a quando loelimini, dai un'occhiata a questopost .
Per ottenere la rimozione delprefisso slug deltipo dipost,devi collegarti a
single-link_rewrite_rules
e ripeti queste regolee rimuoviilprefisso anche lì.Nota: lemodifiche alla struttura dipermapossono causare conflitti di URL.
You have to alter the perma structure. By default your custom post type's post will only be found wenether the url starts with the slug prefix. When changing the prefix you will have similar issues as when deleting it, have a look at this post.
To achieve removal of the post type slug prefix you should hook into
single-link_rewrite_rules
and iterate through those rules and remove the prefix there as well.Note: changes in the perma structure may cause url conflicts.
-
@ Paranoianon è sicuro al 100% di cosaintendi con "usailtipo dipagina".Ma con l'hook [`rewrite_rules_array`] (https://codex.wordpress.org/Plugin_API/Filter_Reference/rewrite_rules_array)puoi accedere atutte le regole.@Paranoia not 100% sure what you mean with "use the page type". But with the [`rewrite_rules_array`](https://codex.wordpress.org/Plugin_API/Filter_Reference/rewrite_rules_array) hook you can access all rules.
- 0
- 2018-01-24
- Fleuv
-
- 2020-07-22
Perpiùtipi dipostpersonalizzati,regolarein questomodo
$query->set( 'post_type', array( 'post', 'custom1', 'page' ) && array( 'post', 'custom2', 'page' ) );
For multiple Custom Post Types adjust like this
$query->set( 'post_type', array( 'post', 'custom1', 'page' ) && array( 'post', 'custom2', 'page' ) );
Sto lavorando a unplugin che creaelenchi. Dopo aver creato unelenco,volevo rimuovere lo slug dall'URL
Tipo dipost:
Rimuovi lo slug dall'URL:
(questo codiceproviene qui )
Ora dopo aver cliccato su Pubblica,lo slug/single-link/vieneeliminato,ma otteniamo sempre un 404 quando visitiamo lapagina. Cambiare/salvarenuovamentei permalinknon ha aiutato. Cosa stofacendo di sbagliato?