Supprimer le slug des URL de publication de type publication personnalisé

48

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

Ben Racicot
la source
Je suppose que je me gratte la tête quant à pourquoi vous voudriez faire cela? Confus.
Michael Ecklund
3
@MichaelEcklund car tout CPT utilisé pour créer des pages Web publiques a un nom de slug forcé dans l'URL. Il y a en fait beaucoup de développeurs wp qui cherchent à supprimer le slug en toute sécurité.
Ben Racicot

Réponses:

60

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:

function na_remove_slug( $post_link, $post, $leavename ) {

    if ( 'events' != $post->post_type || 'publish' != $post->post_status ) {
        return $post_link;
    }

    $post_link = str_replace( '/' . $post->post_type . '/', '/', $post_link );

    return $post_link;
}
add_filter( 'post_type_link', 'na_remove_slug', 10, 3 );

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:

function na_parse_request( $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', 'events', 'page' ) );
    }
}
add_action( 'pre_get_posts', 'na_parse_request' );

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.

Nate Allen
la source
Merci. Pensez-vous que cela vaut mieux que de créer les réécritures manuellement? J'ai vu cette solution et cela pourrait empêcher les conflits que vous avez mentionnés?
Ben Racicot
1
Il échoue avec nginx à cause de la condition 2 != count( $query->query ). Avec nginx, vous pouvez avoir $ query-> query as array('page' => '', 'name' => '...', 'q' => '...'). Alors @NateAllen, quelle est la signification de cette condition?
Fabio Montefuscolo
3
Nous avons besoin de quelque chose de mieux que cela. Support pour supprimer le slug intégré afin que nous ne puissions plus créer d'URL conflictuelles par la suite. La façon dont les publications et les pages ordinaires créent leurs URL.
Ben Racicot
3
Est-ce juste moi ou est-ce que cela casse certaines balises conditionnelles wordpress comme is_single () et is_singular ()?
rob-gordon
1
Cette solution a malheureusement causé des liens brisés et mon blog a cessé de diffuser des messages et était simplement une page normale. Voir une meilleure solution ci-dessous par Matt Keys.
Radley Sustaire
20

Écrivez le code suivant dans l'enregistrement de la taxonomie.

'rewrite' => [
  'slug' => '/',
  'with_front' => false
]

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/

Mayank Dudakiya
la source
Cela fonctionne réellement, je ne sais pas comment personne ne l'a remarqué avant. Bien sûr, cela peut interférer avec d'autres pages si elles ont le même permalien, mais sinon, c'est une excellente solution.
Commentaires
4
J'ai essayé ceci. Il donne le résultat souhaité pour mes liens de type message personnalisé. Cependant, il "attrape" tous les slugs de type post POST ou PAGE et tente de les résoudre en tant qu'URL pour mon type de post personnalisé, puis 404. (oui j'ai enregistré des permaliens).
Matt Keys
4
Ça ne marche pas. Donne 404 même lorsque vous avez mis à jour les permaliens.
Christine Cooper
3
Encore une fois, même après avoir ré-enregistré les paramètres de permalien, les publications et les pages ne fonctionnent plus (404)
amklose
1
Cette solution fonctionne pour supprimer le slug de l'URL. Mais les pages d'archives ne fonctionnent plus.
Annapurna
13

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_typedans wp-includes / ligne post.php 1454 :

add_permastruct( $post_type, "{$args->rewrite['slug']}/%$post_type%", $permastruct_args );

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 sur null", jusqu'à ce que vous cherchiez quelques lignes:

if ( empty( $args->rewrite['slug'] ) )
    $args->rewrite['slug'] = $post_type;

Vous pouvez voir que la fonction attend toujours une valeur slug qui n'est pas vide et utilise autrement le type de publication.

Jan Beck
la source
Merci @ JanBeck. Y a-t-il une raison majeure pour que cela existe? Pourquoi ne pas pirater ce fichier principal avec l’obligation de supprimer certains types de publication de cette règle?
Ben Racicot
9
Vous devriez attribuer la réponse à Jan Beck. WordPress a besoin du slug post_type pour router correctement les requêtes. Cette règle évite les conflits de noms entre les pages WP natives (qui sont rendues sans le slug) et tout type de publication défini par l'utilisateur. Si vous piratez le slug, WordPress ne saura pas faire la différence entre une page nommée "pique-nique" et un événement (type de message personnalisé) nommé "pique-nique".
dswebsme
3
@dswebsme D'accord, mais il existe des situations dans lesquelles vous devez absolument modifier l'URL. Donc, à part pourquoi vous ne pouvez pas et ne devriez pas natif, comment le faites-vous efficacement?
Ben Racicot
7

En réponse à ma réponse précédente : vous pouvez bien sûr définir le rewriteparamètre sur falselors 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ère

<?php
function wpsx203951_custom_init() {

    $post_type = 'event';
    $args = (object) array(
        'public'      => true,
        'label'       => 'Events',
        'rewrite'     => false, // always set this to false
        'has_archive' => true
    );
    register_post_type( $post_type, $args );

    // these are your actual rewrite arguments
    $args->rewrite = array(
        'slug' => 'calendar'
    );

    // everything what follows is from the register_post_type function
    if ( is_admin() || '' != get_option( 'permalink_structure' ) ) {

        if ( ! is_array( $args->rewrite ) )
            $args->rewrite = array();
        if ( empty( $args->rewrite['slug'] ) )
            $args->rewrite['slug'] = $post_type;
        if ( ! isset( $args->rewrite['with_front'] ) )
            $args->rewrite['with_front'] = true;
        if ( ! isset( $args->rewrite['pages'] ) )
            $args->rewrite['pages'] = true;
        if ( ! isset( $args->rewrite['feeds'] ) || ! $args->has_archive )
            $args->rewrite['feeds'] = (bool) $args->has_archive;
        if ( ! isset( $args->rewrite['ep_mask'] ) ) {
            if ( isset( $args->permalink_epmask ) )
                $args->rewrite['ep_mask'] = $args->permalink_epmask;
            else
                $args->rewrite['ep_mask'] = EP_PERMALINK;
        }

        if ( $args->hierarchical )
            add_rewrite_tag( "%$post_type%", '(.+?)', $args->query_var ? "{$args->query_var}=" : "post_type=$post_type&pagename=" );
        else
            add_rewrite_tag( "%$post_type%", '([^/]+)', $args->query_var ? "{$args->query_var}=" : "post_type=$post_type&name=" );

        if ( $args->has_archive ) {
            $archive_slug = $args->has_archive === true ? $args->rewrite['slug'] : $args->has_archive;
            if ( $args->rewrite['with_front'] )
                $archive_slug = substr( $wp_rewrite->front, 1 ) . $archive_slug;
            else
                $archive_slug = $wp_rewrite->root . $archive_slug;

            add_rewrite_rule( "{$archive_slug}/?$", "index.php?post_type=$post_type", 'top' );
            if ( $args->rewrite['feeds'] && $wp_rewrite->feeds ) {
                $feeds = '(' . trim( implode( '|', $wp_rewrite->feeds ) ) . ')';
                add_rewrite_rule( "{$archive_slug}/feed/$feeds/?$", "index.php?post_type=$post_type" . '&feed=$matches[1]', 'top' );
                add_rewrite_rule( "{$archive_slug}/$feeds/?$", "index.php?post_type=$post_type" . '&feed=$matches[1]', 'top' );
            }
            if ( $args->rewrite['pages'] )
                add_rewrite_rule( "{$archive_slug}/{$wp_rewrite->pagination_base}/([0-9]{1,})/?$", "index.php?post_type=$post_type" . '&paged=$matches[1]', 'top' );
        }

        $permastruct_args = $args->rewrite;
        $permastruct_args['feed'] = $permastruct_args['feeds'];
        add_permastruct( $post_type, "%$post_type%", $permastruct_args );
    }
}
add_action( 'init', 'wpsx203951_custom_init' );

Vous pouvez voir que l' add_permastructappel maintenant n'inclut plus la limace. J'ai testé deux scénarios:

  1. Lorsque j'ai créé une page avec le slug "calendrier", cette page est écrasée par l'archive de type message qui utilise également le slug "calendrier".

entrez la description de l'image ici

  1. Lorsque j'ai créé une page avec le slug "my-event" et un événement (CPT) avec le slug "my-event", le type de publication personnalisé est affiché.

entrez la description de l'image ici

  1. Les autres pages ne fonctionnent pas non plus. Si vous regardez la photo ci-dessus, vous comprendrez pourquoi: la règle de type de publication personnalisée correspond toujours à un slug de page. Comme WordPress n'a aucun moyen d'identifier s'il s'agit d'une page ou d'un type de publication personnalisé qui n'existe pas, il renverra 404. C'est pourquoi vous avez besoin d'un slug pour identifier la page ou le CPT. Une solution possible serait d’intercepter l’erreur et de rechercher une page similaire à cette réponse .
Jan Beck
la source
Donc, si l'objectif est de supprimer le slug pour les CPT, ne pourrions-nous pas appeler le CPT quelque chose d'unique qui ne se heurterait pas puisqu'il ne sera jamais vu dans l'URL? Ou le post-name est-il le conflit possible s'il est nommé comme une page?
Ben Racicot
J'ai mis à jour ma réponse pour montrer que cela casse réellement toutes les pages. Sans slug, WP recherchera un CPT au lieu d'une page et s'il ne le trouve pas, renverra une erreur. Donc, en réalité, cela n’est pas lié au nom de post.
Jan Beck
1
Je vois. Il devrait y avoir des règles de réécriture qui ajoutent "-1" aux futures URL conflictuelles, comme les messages WP natifs vs les pages. J'ai créé un ticket de correspondance. Core.trac.wordpress.org/ticket/34136#ticket aimerait vos pensées.
Ben Racicot
7

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:

register_post_type( 'custom_post_type',
    array(
        'rewrite' => false
    )
);

Étape 2: Ajoutez manuellement nos réécritures personnalisées au bas des réécritures WordPress pour notre type_post_post

function custom_post_type_rewrites() {
    add_rewrite_rule( '[^/]+/attachment/([^/]+)/?$', 'index.php?attachment=$matches[1]', 'bottom');
    add_rewrite_rule( '[^/]+/attachment/([^/]+)/trackback/?$', 'index.php?attachment=$matches[1]&tb=1', 'bottom');
    add_rewrite_rule( '[^/]+/attachment/([^/]+)/feed/(feed|rdf|rss|rss2|atom)/?$', 'index.php?attachment=$matches[1]&feed=$matches[2]', 'bottom');
    add_rewrite_rule( '[^/]+/attachment/([^/]+)/(feed|rdf|rss|rss2|atom)/?$', 'index.php?attachment=$matches[1]&feed=$matches[2]', 'bottom');
    add_rewrite_rule( '[^/]+/attachment/([^/]+)/comment-page-([0-9]{1,})/?$', 'index.php?attachment=$matches[1]&cpage=$matches[2]', 'bottom');
    add_rewrite_rule( '[^/]+/attachment/([^/]+)/embed/?$', 'index.php?attachment=$matches[1]&embed=true', 'bottom');
    add_rewrite_rule( '([^/]+)/embed/?$', 'index.php?custom_post_type=$matches[1]&embed=true', 'bottom');
    add_rewrite_rule( '([^/]+)/trackback/?$', 'index.php?custom_post_type=$matches[1]&tb=1', 'bottom');
    add_rewrite_rule( '([^/]+)/page/?([0-9]{1,})/?$', 'index.php?custom_post_type=$matches[1]&paged=$matches[2]', 'bottom');
    add_rewrite_rule( '([^/]+)/comment-page-([0-9]{1,})/?$', 'index.php?custom_post_type=$matches[1]&cpage=$matches[2]', 'bottom');
    add_rewrite_rule( '([^/]+)(?:/([0-9]+))?/?$', 'index.php?custom_post_type=$matches[1]', 'bottom');
    add_rewrite_rule( '[^/]+/([^/]+)/?$', 'index.php?attachment=$matches[1]', 'bottom');
    add_rewrite_rule( '[^/]+/([^/]+)/trackback/?$', 'index.php?attachment=$matches[1]&tb=1', 'bottom');
    add_rewrite_rule( '[^/]+/([^/]+)/feed/(feed|rdf|rss|rss2|atom)/?$', 'index.php?attachment=$matches[1]&feed=$matches[2]', 'bottom');
    add_rewrite_rule( '[^/]+/([^/]+)/(feed|rdf|rss|rss2|atom)/?$', 'index.php?attachment=$matches[1]&feed=$matches[2]', 'bottom');
    add_rewrite_rule( '[^/]+/([^/]+)/comment-page-([0-9]{1,})/?$', 'index.php?attachment=$matches[1]&cpage=$matches[2]', 'bottom');
    add_rewrite_rule( '[^/]+/([^/]+)/embed/?$', 'index.php?attachment=$matches[1]&embed=true', 'bottom');
}
add_action( 'init', 'custom_post_type_rewrites' );

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é

function custom_post_type_permalinks( $post_link, $post, $leavename ) {
    if ( isset( $post->post_type ) && 'custom_post_type' == $post->post_type ) {
        $post_link = home_url( $post->post_name );
    }

    return $post_link;
}
add_filter( 'post_type_link', 'custom_post_type_permalinks', 10, 3 );

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

function prevent_slug_duplicates( $slug, $post_ID, $post_status, $post_type, $post_parent, $original_slug ) {
    $check_post_types = array(
        'post',
        'page',
        'custom_post_type'
    );

    if ( ! in_array( $post_type, $check_post_types ) ) {
        return $slug;
    }

    if ( 'custom_post_type' == $post_type ) {
        // Saving a custom_post_type post, check for duplicates in POST or PAGE post types
        $post_match = get_page_by_path( $slug, 'OBJECT', 'post' );
        $page_match = get_page_by_path( $slug, 'OBJECT', 'page' );

        if ( $post_match || $page_match ) {
            $slug .= '-duplicate';
        }
    } else {
        // Saving a POST or PAGE, check for duplicates in custom_post_type post type
        $custom_post_type_match = get_page_by_path( $slug, 'OBJECT', 'custom_post_type' );

        if ( $custom_post_type_match ) {
            $slug .= '-duplicate';
        }
    }

    return $slug;
}
add_filter( 'wp_unique_post_slug', 'prevent_slug_duplicates', 10, 6 );

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.

Matt Keys
la source
Juste testé et il semble que cela fonctionne jusqu'à présent.
Christine Cooper
Espérais cette approche, mais me donne 404 sur mes publications CPT, même après avoir réenregistré les liens permanents.
Garconis
Désolé, cela n'a pas fonctionné pour vous Garconis. Cela faisait un moment que j'en parlais à quelqu'un d'autre et ils avaient également des problèmes avec cela sur leur site. Je crois me rappeler qu’il importait que vos billets de blog permaliens aient un préfixe. Sur le site que j'ai développé pour les articles de blog utilisant une structure de lien permanent: / blog /% postname% /. Si vous n'avez pas de préfixe sur votre blog et qu'il est acceptable de le faire, essayez-le et dites-moi comment ça se passe!
Matt Keys
2
Cela a fonctionné pour moi. Contrairement aux autres solutions de la page, cela ne casse pas les pages normales ni la présentation du blog, et ne provoque pas de redirections infinies. Il affiche même l’URL correcte dans la zone "Permalink" lors de la modification de ces pages cpt. Très bonne solution ici, la seule réserve est que la page d'archive ne fonctionne pas. RAPPELEZ - VOUS permuter « custom_post_type » et rafraîchir vos permaliens après .
Radley Sustaire
@MattKeys, les paramètres par défaut de Permalink ont ​​une structure personnalisée de /%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.
Garconis
1

Vous n'avez pas besoin de tant de code dur. Il suffit d'utiliser un plugin léger:

Il a des options personnalisables.

T.Todua
la source
Maintenant, je sais pourquoi vous avez été voté, cela empêche la résolution des liens de page normaux. Je ne l'ai pas vu car j'avais des copies en cache des pages existantes malgré l'actualisation.
Walf
@Walf Pouvez-vous me parler de la question en détail?
T.Todua
Suivre les liens vers les pages (qui n'étaient pas le type d'article personnalisé) du menu principal donnait 404 erreurs, comme si la page n'existait pas; c'est ça.
Walf
@Walf pouvez-vous me donner un exemple d'URL de votre occasion? (vous pouvez couvrir le nom de domaine si vous voulez, j'ai besoin juste un exemple ex) grâce, je wil le mettre à jour
T.Todua
1

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.

Friedrich Siever
la source
0

et nous pouvons apporter quelques modifications à la fonction susmentionnée:

function na_parse_request( $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', 'events', 'page' ) );
}
}

à:

function na_parse_request( $query ) {

if ( ! $query->is_main_query() || 2 != count( $query->query ) || ! isset( $query->query['page'] ) ) {
    return;
}

if ( ! empty( $query->query['name'] ) ) {

    global $wpdb;
    $pt = $wpdb->get_var(
        "SELECT post_type FROM `{$wpdb->posts}` " .
        "WHERE post_name = '{$query->query['name']}'"
    );
    $query->set( 'post_type', $pt );
}
}

afin de définir la valeur post_type droite.

Max Kondrachuk
la source
0

Cela a fonctionné pour moi: 'rewrite' => array('slug' => '/')

Malki Mohamed
la source
1
Ça ne marche pas. Donne 404 même lorsque vous avez mis à jour les permaliens.
Christine Cooper
0

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:

$post_link = str_replace( '/' . $post->post_type . '/', '/', $post_link );

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

function rewrite_rules_for_removing_post_type_slug()
{
    add_rewrite_rule(
        '(.?.+?)?(:/([0-9]+))?/?$',
        'index.php?event=$matches[1]/$matches[2]&post_type=event',
        'bottom'
    );
}

add_action('init', 'rewrite_rules_for_removing_post_type_slug', 1, 1);

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.

Moe Loubani
la source
Il semble y avoir une faute de frappe dans la regex. Entre '(:' a '?' Est nécessaire pour l'utiliser comme sous-modèle non capturant => '(?:'. Le troisième? Semble mal placé car il laisse un premier sous-modèle vide. Il convient de le positionner entre (et:. sans cette faute de frappe l'expression sera le même que celui qui se trouve pour la construction en page «type poste.
jot