Supprimer le slug parent dans l’URL d’un CPT (Créer un compte)

  • WordPress :5.5
  • Statut : non résolu
3 sujets de 1 à 3 (sur un total de 3)
  • Auteur
    Messages
  • #2360162
    Purweb
    Participant
    Initié WordPress
    42 contributions

    Bonjour,

    Voici le code que j’insert dans mon functions.php pour supprimer le slug d’un CPT présent dans l’URL :

    /**
     * Remove the custom post type slug from URL
     */
    function wpc_remove_cpt_slug($post_link, $post, $leavename) {
    	if ('SLUG' != $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', 'wpc_remove_cpt_slug', 0, 3); 
    
    function wpc_parse_request_trick($query) {
    	if (! $query->is_main_query())
    	return;
    
    	if (2 != count($query->query) || ! isset($query->query['page'])) {
    		return;
    	}
    
    	if (! empty( $query->query['name'])) {
    		$query->set('post_type', array('post', 'SLUG', 'page'));
    	}
    }
    
    add_action('pre_get_posts', 'wpc_parse_request_trick');

    J’utilise cela depuis plusieurs années et cela fonctionne parfaitement pour le besoin en question.

    Je dois actuellement créer une relation parent / enfant avec un CPT tout en gardant des URL courte de la forme nomdedomaine.fr/titre-publication/

    J’utilise CPT UI pour créer mes CPT. J’ai sélectionner “vrai” dans Hiérarchique me permettant d’avoir des relations parent-enfant pour le CPT en question.

    Prenons une exemple avec une marque automobile comme parent et un modèle comme enfant.

    J’obtiens en URL pour le CPT enfant : nomdedomaine.fr/renault/megane/

    Or il me faut : nomdedomaine.fr/megane/

    N’étant pas du tout un développeur chevronné mais plutôt un maxi bidouilleur apprenti développeur forever, j’ai fais ma recherche et adapter le code suivant que j’ai inséré toujours dans le functions.php :

    /**
     * Remove the parent custom post type slug from URL
     */
    function df_custom_post_type_link( $post_link, $id = 0 ) {  
        $post = get_post($id);  
        if ( is_wp_error($post) || 'SLUG' != $post->post_type || empty($post->post_name) )  
            return $post_link;  
        return home_url(user_trailingslashit( "$post->post_name" ));  
    }
    add_filter( 'post_type_link', 'df_custom_post_type_link' , 10, 2 );
    
    function df_custom_rewrite_rule() {
        add_rewrite_rule('(.*?)$', 'index.php?news=$matches[1]', 'top');
    }
    add_action('init', 'df_custom_rewrite_rule');

    Mes CPT enfants ont bien une URL correcte avec : nomdedomaine.fr/megane/

    Mais dès que je fais des modifs dans le Back-Office de type ajouter un contenu ou supprimer un contenu ou encore créer un nouveau menu, j’ai alors un grand bug incompréhensible du type toutes mes URL se mettent à avoir une redirection vers la homepage c’est à dire nomdedomaine.fr.

    Je tiens à préciser qu’il s’agît de vraiment de toutes mes URL dans leur intégralité, c’est à dire pas que les URL du CPT en question.

    Quelqu’un a t’il déjà réussi à supprimer correctement le slug parent dans l’URL d’un CPT ?

    #2360327
    momofr@free.fr
    Modérateur
    Maître WordPress
    3759 contributions

    Salut, consulte cet article sur Codepad, je viens de tester ça sur un site de dev et ça marche très bien.

    Attention à bien ajouter la fonction de réécriture dans le CPT (je fais mes CPT à la main dans le thème enfant) et à ré-enregsitrer les permaliens pour prendre en compte la nouvelle structure.

    #2360687
    Purweb
    Participant
    Initié WordPress
    42 contributions

    @<span class=”bbp-author-name”>momofr@free.f</span><span class=”bbp-author-name”>r : Un grand grand merci à toi. J’ai fait différents tests. Pour le moment je n’ai pas rencontré de bug.</span>

    J’ai juste un léger soucis côté BO avec en affichage Permalien : https://nomdedomaine.fr/CPT-parent/CPT-enfant/

    Néanmoins lorsque je teste en front aucun soucis j’ai bien : https://nomdedomaine.fr/CPT-enfant/.

    J’ai en revanche mis les paramétrages suivants sur le CPT :

    Archivée : Faux

    Hiérarchique : Vrai

    Réécrire : Vrai

    Peux tu, s’il te plaît, me dire si toi aussi tu as dans ton BO l’affichage Permalien : https://nomdedomaine.fr/CPT-parent/CPT-enfant/ ?

3 sujets de 1 à 3 (sur un total de 3)
  • Vous devez être connecté pour répondre à ce sujet.