Il semble que toutes les ressources Web basées sur le sujet de la suppression d’un slug de type message personnalisé, c’est-à-dire
yourdomain.com/CPT-SLUG/post-name
sont maintenant des solutions très obsolètes faisant souvent référence aux installations antérieures à la version 3.5 de WP. Une commune est de:
'rewrite' => array( 'slug' => false, 'with_front' => false ),
dans votre fonction register_post_type. Cela ne fonctionne plus et est trompeur. Je demande donc à la communauté au troisième trimestre 2018 au bord de WordPress 5 ...
Quels sont les moyens modernes et efficaces pour supprimer le slug de type de publication de l'URL d'une publication de type personnalisé à partir de l'argument de réécriture ou ailleurs?
MISE À JOUR: Il semble y avoir plusieurs façons de forcer cela à fonctionner avec regex. En particulier, la réponse de Jan Beck si vous êtes constamment disposé à surveiller la création de contenu pour vous assurer qu'aucun nom de page / publication ne soit créé en conflit ... Cependant, je suis convaincu qu'il s'agit d'une faiblesse majeure du noyau de WP, qui devrait nous être gérée. . Les deux en tant qu'option / hook lors de la création d'un CPT ou d'un ensemble d'options avancé pour les permaliens. S'il vous plaît soutenir le billet de piste.
Note de bas de page: Veuillez soutenir ce ticket de traçage en regardant / en le promouvant: https://core.trac.wordpress.org/ticket/34136#ticket
la source
Réponses:
Le code suivant fonctionnera, mais vous devez simplement garder à l’esprit que des conflits peuvent survenir facilement si le slug de votre type de message personnalisé est identique à un slug de page ou de message ...
Tout d'abord, nous allons supprimer le slug du permalien:
Retirer la limace ne suffit pas. Pour le moment, vous obtiendrez une page 404 car WordPress n'attend que les publications et les pages de se comporter de cette manière. Vous devrez également ajouter les éléments suivants:
Il suffit de changer les "événements" pour votre type de message personnalisé et vous êtes prêt à partir. Vous devrez peut-être actualiser vos permaliens.
la source
2 != count( $query->query )
. Avec nginx, vous pouvez avoir $ query-> query asarray('page' => '', 'name' => '...', 'q' => '...')
. Alors @NateAllen, quelle est la signification de cette condition?Écrivez le code suivant dans l'enregistrement de la taxonomie.
La chose la plus importante à faire après le changement de code
Une fois que vous avez modifié votre document de taxonomie de type publication personnalisé, essayez d’accéder à Paramètres> Permaliens, puis réenregistrez vos paramètres . Sinon, la page 404 ne sera pas trouvée.
Vérifiez ici la meilleure solution: http://www.krazzycodes.com/how-to-remove-custom-post-type-taxonomy-base-from-url-in-wordpress/
la source
J'ai essayé de comprendre cela il n'y a pas si longtemps et la réponse courte de ce que je sais est non . Pas du moins dans l'argument de réécriture.
La longue explication devient évident si vous regardez le code réel de
register_post_type
dans wp-includes / ligne post.php 1454 :Vous pouvez voir les préfixes
$args->rewrite['slug']
de la%$post_type%
balise de réécriture. On pourrait penser "réglons simplement le slug surnull
", jusqu'à ce que vous cherchiez quelques lignes:Vous pouvez voir que la fonction attend toujours une valeur slug qui n'est pas vide et utilise autrement le type de publication.
la source
En réponse à ma réponse précédente : vous pouvez bien sûr définir le
rewrite
paramètre surfalse
lors de l'enregistrement d'un nouveau type de publication et gérer vous-même les règles de réécriture de la même manièreVous pouvez voir que l'
add_permastruct
appel maintenant n'inclut plus la limace. J'ai testé deux scénarios:la source
En regardant à travers les réponses ici, je pense qu'il y a place pour une meilleure solution qui combine certaines choses que j'ai apprises ci-dessus et qui ajoute la détection automatique et la prévention des doublons de post-slug.
NOTE: Assurez-vous de changer 'custom_post_type' pour votre propre nom CPT dans mon exemple ci-dessous. Il existe de nombreuses occurrences et une «recherche / remplacement» est un moyen facile de toutes les attraper. Tout ce code peut aller dans votre functions.php ou dans un plugin.
Étape 1: Désactivez les réécritures sur votre type de message personnalisé en définissant ce mot sur "false" lorsque vous enregistrez le message:
Étape 2: Ajoutez manuellement nos réécritures personnalisées au bas des réécritures WordPress pour notre type_post_post
REMARQUE: En fonction de vos besoins, vous voudrez peut-être modifier les réécritures ci-dessus (désactiver les rétroliens? Les flux?, Etc.). Celles-ci représentent les types de réécriture «par défaut» qui auraient été générés si vous n'aviez pas désactivé les réécritures à l'étape 1
Étape 3: Créez à nouveau des liens permanents vers votre message personnalisé
REMARQUE: vous pouvez vous arrêter ici si vous ne craignez pas que vos utilisateurs créent une publication en conflit (en double) dans un autre type de publication, ce qui créera une situation dans laquelle un seul d'entre eux peut être chargé lorsque la page est demandée.
Étape 4: Prévenir les doublons postaux
NOTE: Ceci ajoutera la chaîne '-duplicate' à la fin de chaque slug en double. Ce code ne peut pas empêcher les doublons en double s'ils existaient déjà avant l'implémentation de cette solution. Assurez-vous de vérifier les doublons en premier.
J'adorerais avoir des nouvelles de tous ceux qui donneraient une chance de voir si cela leur convenait aussi bien.
la source
/%category%/%postname%/
. Lors de l'ajout de votre code, les slugs CPT ont l'air OK (bien qu'il manque la barre oblique finale) ... et le vérificateur de conflits fonctionne également. Mais les résultats du billet sur un 404.Vous n'avez pas besoin de tant de code dur. Il suffit d'utiliser un plugin léger:
Il a des options personnalisables.
la source
Eu les mêmes problèmes ici et il semble y avoir aucun mouvement sur le site wordpress. Dans ma situation particulière où pour un seul blog, la solution structure / blog /% postname% / était nécessaire
https://kellenmace.com/remove-custom-post-type-slug-from-permalinks/
terminé dans un tas de 404
Mais avec cette approche merveilleuse, qui n’utilise pas la structure permanente du blog pour le post de blog, cela fonctionne finalement comme un charme. https://www.bobz.co/add-blog-prefix-permalink-structure-blog-posts/
Merci beaucoup.
la source
et nous pouvons apporter quelques modifications à la fonction susmentionnée:
à:
afin de définir la valeur post_type droite.
la source
Cela a fonctionné pour moi:
'rewrite' => array('slug' => '/')
la source
Pour tous ceux qui lisent ceci qui ont des problèmes avec les publications pour enfants comme je l’ai fait, j’ai trouvé que le meilleur moyen était d’ajouter vos propres règles de réécriture.
Le problème principal que je rencontrais était que WordPress traitait la redirection à partir de pages profondes de 2 niveaux (messages enfants) un peu différemment de celles traitant de 3 niveaux profonds (enfants de messages enfants).
Cela signifie que quand j'ai / post-type / post-nom / post-enfant / je peux utiliser / post-nom / post-enfant et il me redirigera vers celui avec post-type devant mais si j'ai post-type / post-name / post-child / post-petit-enfant, je ne peux pas utiliser post-name / post-child / post-petit-enfant.
En examinant les règles de réécriture, il semble que cela corresponde à des éléments autres que pagename aux premier et deuxième niveaux (je pense que le deuxième niveau correspond à l'attachement), puis fait quelque chose pour vous rediriger vers le poste approprié. À trois niveaux de profondeur, cela ne fonctionne pas.
La première chose à faire est de supprimer également le lien de type message des enfants. Cette logique devrait se produire ici si vous regardez la réponse de Nate Allen ci-dessus:
Moi-même, j’ai utilisé un mélange de différents conditionnels pour vérifier si le post avait des enfants et le reste afin d’obtenir le permalien qui convient. Cette partie n’est pas trop compliquée et vous trouverez des exemples de personnes qui le font ailleurs.
La prochaine étape est cependant où les choses changent de la réponse donnée. Au lieu d’ajouter des éléments à la requête principale (ce qui a fonctionné pour les publications personnalisées et leurs enfants, mais pas pour les autres enfants), j’ajoute une réécriture qui se place au bas des règles de WordPress. Si vous frappez un 404, il vérifiera une dernière fois si une page du type de message personnalisé porte le même nom, sinon elle rejetterait le 404.
Voici la règle de réécriture que j'ai utilisée en supposant que «événement» est le nom de votre CPT
J'espère que cela aide quelqu'un d'autre, je ne pouvais rien trouver qui ait à voir avec les messages enfant ou enfant et d'éliminer la limace de ceux-ci.
la source