problème de rewriting ou de query var ? (Créer un compte)

  • Statut : non résolu
4 sujets de 1 à 4 (sur un total de 4)
  • Auteur
    Messages
  • #522286
    olivierbeyo
    Membre
    Initié WordPress
    30 contributions

    Bonjour,

    Ma configuration WP actuelle
    – Version de WordPress :
    – Version de PHP/MySQL :
    – Thème utilisé :
    – Extensions en place :
    – Nom de l’hebergeur :
    – Adresse du site :

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

    j’ai plusieurs problèmes concernant mes règles de réécriture mais je ne vais en préciser qu’unepour ne pas trop compliquer la question.
    j’ai pour mon theme crée des custom post type et taxonomies :

    function custom_post_realisation() {
    $labels = array(
    ‘name’ => ‘realisation’,
    ‘menu_name’ => ‘Realisation’
    );
    $args = array(
    ‘labels’ => $labels,
    ‘public’ => true,
    ‘show_in_nav_menus’ => true,
    ‘menu_position’ => 5,
    ‘show_ui’ => true,
    ‘show_in_menu’ => true,
    ‘capability_type’ => ‘post’,
    ‘hierarchical’ => true,
    ‘with_front’ => false,
    ‘supports’ => array( ‘title’, ‘editor’, ‘thumbnail’, ‘excerpt’ ),
    ‘has_archive’ => false,
    );
    register_post_type( ‘realisation’, $args );
    }
    add_action( ‘init’, ‘custom_post_realisation’ );
    function taxonomies_realisation() {
    $args = array(
    ‘hierarchical’ => true,
    ‘label’ => ‘realisation’,
    ‘query_var’ => true,
    ‘rewrite’ => true,
    ‘show_admin_column’ => true ,
    );
    register_taxonomy( ‘realisation_category’, ‘realisation’, $args);
    }
    add_action( ‘init’, ‘taxonomies_realisation’, 0 );

    j’utilise un paramètre supplémentaire pour un fil d’ariane (breadcrumb) personnalisé.
    Tout fonctionne correctement quand il n’y a pas de réécriture.

    Si je définis une réécriture,

    http://127.0.0.1/CONSTRUCTION/wordpress/%postname%/

    j’ajoute alors dans functions.php

    function add_query_vars($query_vars)
    {
    $query_vars[] = « parentid »;
    return $query_vars;
    }
    add_filter(‘query_vars’, ‘add_query_vars’);
    // Adding a new rule
    function wp_insertMyRewriteRules($rules)
    {
    $newrules = array();
    $newrules[‘realisation/([^/]+)/([^/]+)$’] = ‘index.php?realisation=$matches[1]&parentid=$matches[2]’;
    return $newrules + $rules;
    }
    add_filter(‘rewrite_rules_array’,’wp_insertMyRewriteRules’);

    Sans réécriture, pour les articles « realisation » j’ai

    ?realisation=habillage-de-stands&parentid=38

    avec la réécriture je souhaite avoir :

    realisation/habillage-de-stands/38

    mais j’ai
    realisation/habillage-de-stands/&parentid=0/
    ce qui est triplement perturbant :
    – ce n’est pas le permalien attendu
    – mais le lien fonctionne correctement !
    – la valeur de parentid est « perdue » (0 != 38)

    que je récupère les valeurs soit par

    $parentid = $wp_query->query_vars[‘parentid’];

    ou

    $parentid = get_query_var( ‘parentid’);

    le résultat est le même
    et si je fais un écho de $parentid, j’ai « &parentid=0 » !!!
    alors que sans réécriture j’ai bien « 38 »

    Quelqu’un a t’il une idée ?
    PS: j’ai utilisé le super outil http://wordpress.org/extend/plugins/monkeyman-rewrite-analyzer/

    et j’obtiens pour le test du pattern : realisation/habillage-de-stands/38

    realisation/([^/]+)/([^/]+)/?   => realisation: habillage-de-stands, parentid: 38
    realisation/(.+?)(/[0-9]+)?/?$ => realisation: habillage-de-stands, page: /38
    (.?.+?)(/[0-9]+)?/?$ => pagename: realisation/habillage-de-stands, page: /38

    ce qui tenterait à indiquer que le problème ne vient pas de la réécriture d’url

    je suis perplexe et fort marri 💡

    Quelqu’un a t’il rencontré ce problème ou une idée pour creuser ?

    #885437
    olivierbeyo
    Membre
    Initié WordPress
    30 contributions

    Sur toutes les discussions que j’ai pu lire, ce que j’ai mis devrait fonctionner…

    Mais bon,
    en mettant dans functions.php

    function wp_insertMyRewriteRules($rules)
    {
    global $wp_rewrite;
    $wp_rewrite->flush_rules(); //juste pour les tests

    $newrules = array();
    $newrules[‘realisation/([^/]+)/([^/]+)$’] = ‘index.php?realisation=$matches[1]&parentid=$matches[2]’;
    return $newrules + $rules;
    }
    add_filter(‘rewrite_rules_array’,’wp_insertMyRewriteRules’);

    function add_query_vars($query_vars)
    {
    $query_vars[] = « parentid »;
    return $query_vars;
    }
    add_filter(‘query_vars’, ‘add_query_vars’);

    dans mon template du custom type:

    query_vars[‘page_id’]; ?>
    <a href="&parentid= » title= » » rel= »bookmark »></a>

    sachant que the_permalink() ici affiche

    ?realisation=nomdelarealisation

    et au début du header.php

    Je ne comprend pas pourquoi WP fait disparaître ou change les valeurs des querystring :
    sans rewriting :
    parent_id = 38
    realisation = habillage-de-stands

    avec rewriting :
    parent_id = &parentid=0
    realisation = habillage-de-stands

    la querystring personnalisée « parent_id » est bien récupérée (cf sans rewriting, j’ai bien 38), mais est modifiée avec le rewriting !

    Quelqu’un a t’il une idée ? Est-ce un bug ou une limitation du rewriting avec les custom post ?

    #885438
    Guy
    Participant
    Maître WordPress
    14817 contributions

    Ne faudrait il pas que le lien soit sous cette forme

    site.com/habillage-de-stands/38

    pour qu’il soit interprété comme:

    site.com/index.php?realisation=habillage-de-stands&parentid=38

    #885439
    olivierbeyo
    Membre
    Initié WordPress
    30 contributions

    Eh bien, le fait est que avec la structure de custom post type que j’ai indiqué dans mon premier message, avec les règles d’écriture j’obtiens :
    site.com/realisation/habillage-de-stands/parentid=0
    c’est donc que le moteur de réécriture ajoute (prepend) le nom du custom type … ce n’est pas de mon fait. En changeant dans le custom post type l’argument ‘rewrite’ =>array( ‘slug’ => ‘unslugperso’ ),
    cela change juste
    site.com/realisation/habillage-de-stands/parentid=0
    par
    site.com/unslugperso/habillage-de-stands/parentid=0

    Je comprends la question mais je ne sais pas donner une réponse satisfaisante intellectuellement, car je n’arrive pas à comprendre la mécanique interne du moteur de réécriture de WP. (Jusqu’à présent dans les sites perso non WP, je faisais mes réécritures « à la main » avec requête pour récupérer le nom réécrit).

    Celà dit ma question est plus dirigée sur le fait que le 2ème paramètre parentid est « réécrit » d’une manière que je ne comprends pas : la page est bien affichée mais le paramètre n’est pas celui que j’attends.

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