Supprimer le slug du type de message personnalisé donne 404
3 réponses
- votes
-
- 2018-01-27
L'enregistrement dutype depublicationpersonnaliséet lamodification dupermalien sont OK. Leproblème vient des règles de réécriture de WordPress qui correspondrontprobablement à l'URL "nettoyée" de vos liens simples vers despageset définiront la requête
pagename
et nonname
comme votrefonctionchange_slug_struct()
supposée.Alors changez lafonctionen cecipourtenir compte detous les cas:
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' );
-
cela a aidé,je n'aimêmepaseubesoin de changer ou d'actualiser lespermaliens.Je vous remercie!!that helped, I didn't even need to change or refresh the permalinks. Thank you!!
- 0
- 2018-01-29
- Paranoia
-
celan'apas complètementfonctionné,sij'ai unepage avec unparent (parexemple,domain.com/parent/page)j'obtiens un 404. Sije le changeen domain.com/page (sans leparent),celafonctionne ànouveau.Avez-vous uneidée de ce que celapourrait être?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
-
Je vais changer celapour revenir à labonne réponse,sinous avons une solution.Malheureusementje suis coincé :(I'll change this back to the correct answer, if we have a solution. Unfortunately I am stuck :(
- 0
- 2018-01-30
- Paranoia
-
Oui.Jen'aipasprisen compte le cas oùil y a despagesenfants.Étant donné que votretype depublicationpersonnalisén'estpas hiérarchique,ilestprudent d'exclure les cas lorsqu'ilexiste despagesenfants.J'aimodifiéma réponse.Faites-moi savoir si celafonctionneet n'oubliezpas de le commercialiser comme labonne réponse.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
-
tues ungénie!!you're a genius!!
- 0
- 2018-01-30
- Paranoia
-
- 2018-01-23
Vous devezmodifier la structureperma.Par défaut,lapublication de votretype depublicationpersonnaliséne seratrouvée que si l'URL commencepar lepréfixe slug.Lorsque vous changez lepréfixe,vous rencontrerez desproblèmes similaires à ceux de sa suppression,jetez un œil à cemessage .
Pour obtenir la suppression dupréfixe de slug detype depublication,vous devez vous connecter à
single-link_rewrite_rules
,parcourez ces règleset supprimez également lepréfixe.Remarque: lesmodifications apportées à la structurepermapeuventprovoquer des conflits d'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.
-
@Paranoian'estpas sûr à 100% de ce que vousentendezpar "utiliser letype depage".Mais avec le hook [`rewrite_rules_array`] (https://codex.wordpress.org/Plugin_API/Filter_Reference/rewrite_rules_array),vouspouvez accéder àtoutes les règles.@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
Pourplusieurstypes depublicationpersonnalisés,ajustez comme ceci
$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' ) );
Jetravaille sur unplugin qui crée des listes. Après avoir créé une liste,je voulais supprimer le slug de l'url
Type demessage:
Supprimez le slug de l'URL:
(ce codeprovient de ici )
Maintenant,après avoir cliqué sur Publier,le slug/single-link/est supprimé,maisnous obtenonstoujours un 404 lorsque vous visitez lapage. Changer/réenregistrer lespermaliensn'apas aidé. Qu'est-ce queje faismal?