web-dev-qa-db-fra.com

Réécriture d'URL + Page + Type de message personnalisé = Redirection inhabituelle

Encore un autre problème de réécriture d'URL :)

Le problème

J'ai une règle de réécriture d'URL qui devrait fonctionner, mais contre toute logique, elle redirige sans passer la requête var.

Les détails juteux

Le site a une structure de page configurée comme suit:

/ notre-cabinet/actionnaires

et j'ai un type de message personnalisé nommé "actionnaire} _." Mon objectif est que la structure fonctionne comme ceci:

/ notre-cabinet/actionnaires/awesome-actholder-name

... et à la page Actionnaires de faire une requête personnalisée pour les publications des Actionnaires. J'utiliserais normalement le slug de réécriture pour les publications d'actionnaires, mais je souhaite que le contenu soit affiché dans le contexte de la structure de page d'origine (notre-entreprise/actionnaires).

Afin d’y parvenir, j’ai ajouté ce code dans functions.php (et j’ai depuis fait des liens permanents et l’a sauvegardé pour actualiser les règles):

add_action( 'init', 'my_custom_rewrites' );
function my_custom_rewrites(){
    add_rewrite_rule(
        'our-firm/shareholders/([^/]+)/?',
        'index.php?pagename=shareholders&shareholder_name=$matches[1]',
        'top' );
}

add_filter( 'query_vars', 'my_custom_query_vars' );
function my_custom_query_vars( $query_vars ){
    $query_vars[] = 'shareholder_name';
    return $query_vars;
}

Tout cela est en place, si je vais sur / notre-cabinet/actionnaires/awesome-actionnaire-nom, il me redirige vers la page des actionnaires sans passer la requête var et change en fait l'URL / notre-cabinet/actionnaires/. La partie étrange est que si je change le nom de page de redirection en quelque chose d’autre, cela fonctionne et transmet sans effort la requête var.

Pour le tester davantage, j'ai utilisé le plugin très pratique Rewrite Analyzer et j'ai obtenu ceci:

Capture d'écran du test Rewrite Analyzer

Notes complémentaires

  • J'utilise WP 3.2.1, j'effectue des tests localement et je n'ai pas tripoté .htaccess

  • Le modèle Ma page pour actionnaires ne fait rien d’inhabituel, mais si vous avez besoin de le voir, faites-le moi savoir.

  • Wordpress prend-il en compte l'étiquette d'un type de publication personnalisé pour déterminer les URL? _ _ _ _ _ _ _ _ _ _ _ _ _.

  • J'ajoute le CPT "actionnaire" via le plugin Custom Post Type UI. Je peux l'ajouter manuellement avec du code si quelqu'un pense que cela peut aider. Ce sont les paramètres CPT:

    rewrite = true, slug = 'actionnaire', with_front = true, requête var = true et hierarchical = true.

  • Auparavant, j'avais comme identifiant de type "actionnaire" le type de message "actionnaire", puis je me suis vite rendu compte que les problèmes seraient du même nom que la page que je tentais de rediriger. J'ai ensuite changé le type de message en "actionnaire", ce qui n'a malheureusement pas résolu le problème. _ {Est-ce que le fait qu'il y ait eu un type d '"actionnaires" de type "pourrait affecter cela? Peut-être qu'il y a une cache secrète magique quelque part que je pourrais vider ...

  • Je sais qu'il existe au moins 5 bajillions WP URL de réécriture de messages sur le Web, mais je n'arrive pas à en trouver un qui se rapporte à mon problème spécifique. Désolé si j'en ai manqué un :)

Je suis à la fin de mon esprit - je sais que cela devrait fonctionner, mais cela ne fonctionne pas. J'espère que j'ai raté quelque chose de douloureusement évident et que c'est une solution facile. S'il vous plaît laissez-moi savoir si je peux fournir plus de détails/code/etc.

Toute aide serait appréciée Merci!

3
herronicoras

Vous devriez essayer de définir 'slug' (dans le paramètre/l'option 'rewrite') sur 'notre société/actionnaires', tout comme la structure que vous avez définie dans la fonction add_rewrite_rule ().

Le premier paramètre de add_rewrite_rule () et le paramètre 'rewrite' du type de message personnalisé doivent être égaux pour que la réécriture fonctionne réellement.

Ainsi, si vous choisissez de coder l'enregistrement du type d'article personnalisé, votre register_post_type () devrait ressembler à quelque chose comme cela:

$args = array( 'rewrite' => array( 'our-firm/shareholders', 'with_front' => true ) );
register_post_type( 'shareholder', $args );

Bien sûr, vous devez remplir le tableau $ args avec d'autres clés. Je viens de spécifier 'réécrire' pour que l'explication reste simple. Suivez la documentation sur cette fonction pour créer un enregistrement approprié: http://codex.wordpress.org/Function_Reference/register_post_type

Si les modifications ne sont pas reflétées, essayez alors de vider les règles de réécriture. Vous pouvez y parvenir en toute sécurité en cliquant sur "Enregistrer les modifications" dans Page administrateur> Paramètres> Permaliens

3
astiam

De la documentation

IMPORTANT: par défaut, WordPress ne reconnaît pas les variables de chaîne de requête personnalisées utilisées pour les réécritures. Vous devez enregistrer vos variables de chaîne de requête avec WordPress. Utilisez simplement add_rewrite_tag () pour capturer les valeurs des variables de chaîne de requête après une réécriture, sinon la réécriture ci-dessus ne fonctionnera pas!

Je crois que WordPress ne reconnaît pas le "nom_actionnaire"

Tu dois faire ça

add_action( 'init', 'my_custom_rewrites' );
function my_custom_rewrites(){

    add_rewrite_tag( '%shareholder_name%', '([^/]+)' );

    add_rewrite_rule(
        'our-firm/shareholders/([^/]+)/?',
        'index.php?pagename=shareholders&shareholder_name=$matches[1]',
        'top' );
}
0
rashid

Etes-vous sûr que votre type d'article personnalisé a un fichier single.php séparé?

J'avais un problème et voici la situation: j'ai trois types de publication personnalisés. J'ai récemment créé le nouveau et son lien permanent me redirige vers la page d'un type de message personnalisé. J'ai essayé toutes les règles de réécriture, etc., mais je me suis rendu compte que le problème était dû au fait que je n'avais pas de fichier single.php distinct pour mon nouveau type de message personnalisé. de type différent par défaut.

Il suffit de regarder, peut-être que vous avez la même situation que la mienne. Bonne chance!

0
Justine Win

J'avais un problème très similaire et j'étais perplexe que l'analyseur de réécriture affiche une correspondance avec ma règle de réécriture, mais la page effectuait une redirection étrange. Une fois que j'ai lu cet article: http://www.dev4press.com/2012/tutorials/wordpress/practical/how-wordpress-url-rewriting-works/ / Je me suis rendu compte que l'article que je tentais de réécrire dans ma règle de réécriture était une page qui est un "type de message personnalisé" et par conséquent, wordpress ne prend pas en charge les réécritures d’URL pour cela. La redirection impaire est due à la "redirection canonique" mentionnée au bas de cet article. J'ai essayé de réécrire un "post" pas une "page" et cela a fonctionné.

0
MadMax1138

Avez-vous essayé de vider vos règles de réécriture après add_rewrite_rule ():

function my_custom_rewrites(){
    add_rewrite_rule(
        'our-firm/shareholders/([^/]+)/?',
        'index.php?pagename=shareholders&shareholder_name=$matches[1]',
        'top' );
    flush_rewrite_rules(false);
}

Ce n'est pas quelque chose que vous laisseriez en production, mais cela pourrait déterminer si cette règle est ajoutée à vos réécritures ou non. Vous pouvez également confirmer ensuite avec:

global $wp_rewrite;
var_dump($wp_rewrite->rules);

pour voir si votre règle a été ajoutée.

0
Josh