[Résolu] Ajouter .html sur les custom posts type en utilisant WPML

  • WordPress :4.9
  • Statut : résolu
3 sujets de 1 à 3 (sur un total de 3)
  • Auteur
    Messages
  • #2124052
    HimSelf
    Participant
    Chevalier WordPress
    120 contributions

    Bonjour,

    Ma configuration WP actuelle

    • Version de PHP/MySQL : PHP7
    • Thème utilisé : Maillard
    • Extensions en place : ACF, YOAST, WPML,
    • Nom de l’hébergeur : Obambu
    • Adresse du site : je préfère ne pas la diffuser.

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

    Bonjour à tous, et merci d’avance à vous de vous pencher sur mon problème !

    Je m’explique :

    Je suis occupé à monter un site wordpress, basé principalement sur des customs posts types et ce en multilangue.
    Par souci d’esthétique j’aime bien mettre des .html partout à la fin de mes pages/articles/catégories etc… Je le fais depuis des années, jamais eu de souci !

    Cette fois-ci, je me suis mis au défis de le faire également sur mes customs posts types, pour cela j’ai trouver le code suivant sur stackexchange

    // .html pour les customs posts
    
    function rewrite_rules($rules) {
        $new_rules = array();
        foreach (get_post_types() as $t)
        $new_rules[$t . '/(.+?)\.html$'] = 'index.php?post_type=' . $t . '&name=$matches[1]';
        return $new_rules + $rules;
    }
    add_action('rewrite_rules_array', 'rewrite_rules');
    
    function custom_post_permalink ($post_link) {
        global $post;
        if ( $post ) {
            $type = get_post_type($post->ID);
            return home_url() . '/' . $type . '/' . $post->post_name . '.html';
        }
    }
    add_filter('post_type_link', 'custom_post_permalink'); // for cpt post_type_link (rather than post_link)

    Jusque la tout vas bien, tout fonctionne !

    Sauf que maintenant je complique la chose, puisque j’ai traduit également les slugs de mes pages.

    Ex. : les marchés sont sous forme :

    site/marche/lemarcheFR
    site/en/market/lemarcheNL

    à nouveau, jusqu’ici tout vas bien. Mais dès que j’active le code ci-dessus pour ajouter donc le .html à ces pages, ça part en couilles !

    En effet, toutes les URLS GENEREES PAR WORDPRESS ne prennent pas en compte le slug traduit, et me compose l’url de type :

    site/slugFR/marcheNL.html

    Précision : si je modifie manuellement l’url pour qu’elle soit : site/slugNL/marcheNL.html, pas de souci la page fonctionne. Mais toutes les urls de mes boucles, du language switcher, etc… ne sont pas bonnes.

    Si quelqu’un avait ne fut-ce qu’une petite idée pour modifier ce code afin qu’il prenne compte du slug, elle est la bienvenue.

    ps : je sais que les demandes de support de plugin « premiums » se font chez leur auteurs, j’ai déposer la même demande chez WPML en anglais, mais soit je ne me fais pas comprendre dans la langue de Shakespeare, soit mon problème est vraiment pas classique. Je me permet donc de vous le soumettre ici, car je sais que vous êtes très nombreux à travailler avec WPML !

    Merci d’avance pour votre aide précieuse !

    #2124089
    HimSelf
    Participant
    Chevalier WordPress
    120 contributions

    #Twitter à trouvé la solution !

    mon $type ne faisant pas appel à une fonction WPML c’était impossible.

    Voici la nouvelle version qui marche au top, en revanche à prendre avec des pincettes, car j’ai du déclarer 2x $type dans la même fonction et selon #twitter c’est pas bien (moi j’y comprends kedal !). J’essaye de voir pour faire mieux avec #twitter merci à tous !

    // .html pour les customs posts
    
    function rewrite_rules($rules) {
        $new_rules = array();
        foreach (get_post_types() as $t)
        $new_rules[$t . '/(.+?)\.html$'] = 'index.php?post_type=' . $t . '&name=$matches[1]';
        return $new_rules + $rules;
    }
    add_action('rewrite_rules_array', 'rewrite_rules');
    
    function custom_post_permalink ($post_link) {
        global $post;
        if ( $post ) {
            $type = get_post_type($post->ID);
            $slug = apply_filters( 'wpml_get_translated_slug',$type,$type,'');
            return home_url() . '/' . $slug . '/' . $post->post_name . '.html';
        }
    }
    add_filter('post_type_link', 'custom_post_permalink'); // for cpt post_type_link (rather than post_link)

    Je vous la met ici temporairement,

    car visiblement mon double $type

    #2124094
    HimSelf
    Participant
    Chevalier WordPress
    120 contributions

    Ok !

    vu que mon argument « rewrite » ET « register_post_type » ont le même paramètre, c’est pour cela tout simplement que ça fait ça 🙂

    Bref, je vous laisse le code, possible que chez-vous il faille définir le 2è « $type » par l’équivalent de votre paramètre « rewrite ».

    Bisous

    et merci !

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