Faire de l’url rewriting pour un custom post type (CPT UI)

  • WordPress :5.0
  • Statut : non résolu
2 sujets de 1 à 2 (sur un total de 2)
  • Auteur
    Messages
  • #2242919
    Camsou
    Participant
    Initié WordPress
    2 contributions

    Bonjour,

    Ma configuration WP actuelle :

    • – Version de WordPress : 5.0.3
    • – Version de PHP/MySQL : 5.6.25 / 5.7.14
    • – Thème utilisé : Extra – Theme enfant
    • – Extensions en place : Advanced Custom Fields (5.7.10), Akismet Anti-Spam (4.1), Beautiful taxonomy filter (2.4.3), Category Order and Taxonomy Terms Order (1.5.5), Custom Post Type UI (1.6.1), Forum_wordpress_fr (4.1), Polylang (2.5.1), Smush (3.0.2), WP-Optimize (2.2.11), Yoast SEO (9.4)
    • – Adresse du site : http://wordpress
    • – Nom de l’hébergeur : Apache/2.4.23 (Win32) PHP/5.6.25

    Problème(s) rencontré(s) : 

    Je souhaite faire un magazine sur les mangas.

    J’ai créé un custom post type « manga » avec CPT UI. J’avais donc une url comme ceci : monsite.com/fr/manga/naruto/

    Je n’aimais pas avoir le slug « manga » dans l’url donc j’ai ajouté ca comme code à mon thème enfant d’Extra (Elegant Themes) :

    function remove_cpt_slug( $post_link, $post ) {
        if ( 'manga' === $post->post_type && 'publish' === $post->post_status ) {
            $post_link = str_replace( '/' . $post->post_type . '/', '/', $post_link );
        }
        return $post_link;
    }
    add_filter( 'post_type_link', 'remove_cpt_slug', 10, 2 );
    
    function add_cpt_post_names_to_main_query( $query ) {
    	// Bail if this is not the main query.
    	if ( ! $query->is_main_query() ) {
    		return;
    	}
    	// Bail if this query doesn't match our very specific rewrite rule.
    	if ( ! isset( $query->query['page'] ) || !in_array(count($query->query), array(2, 3)) ) {
    		return;
    	}
    	// Bail if we're not querying based on the post name.
    	if ( empty( $query->query['name'] ) ) {
    		return;
    	}
    	// Add CPT to the list of post types WP will include when it queries based on the post name.
    	$query->set( 'post_type', array( 'post', 'page', 'manga' ) );
    }
    add_action( 'pre_get_posts', 'add_cpt_post_names_to_main_query' );

    Du coup j’ai une url comme un post ou une page normal : monsite.com/fr/naruto/

    Concernant les posts types normaux, j’ai créé plusieurs catégories comme : news, critique, etc…

    Pour ces posts types normaux, j’ai ajouté un champs ACF qui permet de mettre en relation la news (si besoin) avec un manga. Ainsi il peut y avoir plusieurs news pour un manga.

    Donc mon problème, ce que je veux faire c’est avoir des liens du genre :

    monsite.com/fr/naruto/news/ qui liste toutes les news concernant naruto
    monsite.com/fr/naruto/critiques/ qui liste toutes les critiques concernant naruto
    monsite.com/fr/onepiece/news/ qui liste toutes les news concernant onepiece

    Vous comprenez l’idée ? Seulement je débute en codage wordpress, j’ai peur de faire un truc pas propre pour un site qui va se retrouver en production. Il y a tellement de fonctions dans le codex au sujet de l’url rewriting, etc… que j’ai du mal à me dépatouiller. Je ne sais pas trop comment faire, j’ai trouver des trucs sur internet mais c’est toujours au sujet d’une page fixe avec un slug clairement identifié. Là mon slug est invisible…

    Merci par avance pour votre aide bienvenue !

    • Ce sujet a été modifié le il y a 3 mois par  Camsou.
    • Ce sujet a été modifié le il y a 3 mois par  Camsou.
    #2243019
    Camsou
    Participant
    Initié WordPress
    2 contributions

    Je suis toujours en train de bosser sur ce problème là. Je commence à immaginer certaines choses. Soit utiliser j’imagine un add_rewrite_tag %filtre% suivi d’un add_rewrite_rule du genre %postname%/%filtre%.

    Où trouver un plugin de « filtre » qui omet l’utilisation du slug du custom post type.

    Je suis toujours preneur de vos observations en attendant, j’ai le cerveau qui fume !

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