Eliminar slug del tipo de publicación personalizada da como resultado 404
3 respuestas
- votos
-
- 2018-01-27
El registro deltipo depublicaciónpersonalizada y lamodificación delenlacepermanenteestábien. Elproblemaes con las reglas de reescritura de WordPress queprobablemente coincidirán con la URL "limpiada" de susenlaces simples a laspáginas yestablecerá la consulta
pagename
varnoname
como asumió sufunciónchange_slug_struct()
.Así que cambie lafunción aestaparateneren cuentatodos los casos:
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' );
-
Eso ayudó,ni siquieratuve que cambiar o actualizar losenlacespermanentes.¡¡Gracias!!that helped, I didn't even need to change or refresh the permalinks. Thank you!!
- 0
- 2018-01-29
- Paranoia
-
esonofuncionó completamente,sitengo unapágina con unpadre (porejemplo,dominio.com/parente/página) obtengo un 404. Si lo cambio a dominio.com/página (sinelpadre),entoncesfunciona denuevo.¿Algunaidea de lo quepodría seresto?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
-
Cambiaréesto denuevo a la respuesta correcta,sitenemos una solución.Desafortunadamente,estoy atascado :(I'll change this back to the correct answer, if we have a solution. Unfortunately I am stuck :(
- 0
- 2018-01-30
- Paranoia
-
Si.No hetenidoen cuentael casoen el que haypáginas secundarias.Dado que sutipo depublicaciónpersonalizadanoesjerárquica,es seguroexcluir los casosen los que haypáginas secundarias.Hemodificadomi respuesta.Hágame saber sifunciona yno se olvide de comercializarlo como la respuesta correcta.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
-
- 2018-01-23
Tienes que alterar laestructurapermanente.Deformapredeterminada,lapublicación de sutipo depublicaciónpersonalizada solo seencontrará cuando la URL comience conelprefijo slug.Cuando cambieelprefijo,tendráproblemas similares a los quetenía aleliminarlo, consulteestapublicación .
Para lograr laeliminación delprefijo slug deltipo depublicación,debe conectarse a
single-link_rewrite_rules
e iterar através deesas reglas yeliminarelprefijo allítambién.Nota: los cambiosen laestructurapermanentepueden causar conflictos de 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.
-
@Paranoianoestoy 100% seguro de lo que quieres decir con "usareltipo depágina".Pero conelgancho [`rewrite_rules_array`] (https://codex.wordpress.org/Plugin_API/Filter_Reference/rewrite_rules_array)puede acceder atodas las reglas.@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
Para variostipos depublicacionespersonalizadas,realice los ajustes siguientes
$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' ) );
Estoytrabajandoen un complemento que crea listas. Después de crear una lista,queríaeliminarel slug de la URL
Tipo depublicación:
Elimineel slug de la URL:
(este códigoes de aquí )
Ahora,después de hacer clicen publicar,el slug/single-link/seelimina,pero siempre obtenemos un 404 cuando visitamos lapágina. Cambiar/volver aguardar losenlacespermanentesno ayudó. ¿Quéestoy haciendomal?