J'ai ajouté un point de terminaison myvar/myvalue
à EP_ALL
qui peut être ajouté à n'importe quelle URL d'une installation WP. Un plugin WP agira en conséquence. Cette partie est cool mais cela ne fonctionne pas lorsque la structure de permalien est /%category%/%postname%/
. Cela fonctionne bien avec toutes les structures intégrées et sélectionnables. Il pourrait y avoir d'autres structures avec lesquelles il ne fonctionne pas.
Ne fonctionne pas = erreur 404.
Le chemin ressemble à ceci: /mycategory/mypost/myvar/myvalue
J'ai le plugin d'analyse Rewrite qui me dit qu'il est interprété comme (top 4, dans l'ordre):
Ce n'est pas ça ... (surligné en jaune)
(.?.+?)/myvar(/(.*))?/?$
nom de page: mycategory/mypost
myvar: ma valeur
Apparemment, cela s'habitue mais il fait encore froid ...
.?.+?/([^/]+)/myvar(/(.*))?/?$
pièce jointe: mypost
myvar:/myvalue
Tout simplement faux ...
(.?.+?)(/[0-9]+)?/?$
nom de page: mycategory/mypost/myvar
page:/myvalue
Ça y est, mais il ne s'en rend pas compte!
(.+?)/([^/]+)/myvar(/(.*))?/?$
category_name: mycategory
nom: mypost
myvar: ma valeur
Et je sors global $query_string;
qui me dit que c'estattachment=mypost&myvar=%2Fmyvalue
(en passant, il ne devrait pas inclure la barre oblique% 2f).
Alors, quelqu'un peut-il m'éclairer s'il s'agit d'un bogue dans WP, ou y a-t-il quelque chose que je puisse faire pour y remédier?
Mon idée est à peu près ceciif ( '/%category%/%postname%/' == $wp_rewrite->permalink_structure ){ ... }
et en indiquant manuellement WP la catégorie et le nom et en affichant ce contenu. Mais je ne sais pas ce qui se passe en tant que ...
et en quoi devrais-je l'accrocher?.
Pourquoi ça ne marche pas? Je ne suis pas sûr. Ce modèle particulier est identique à une demande de page parent/enfant. WordPress doit effectuer des requêtes supplémentaires pour déterminer si une publication existe sous ce nom ou s'il s'agit d'une page. Pourquoi cela se casse-t-il lorsque vous ajoutez un point de terminaison? Je n'ai pas encore fouillé dans le code pour le déterminer.
Comment pouvez-vous le faire fonctionner? Il semble que si vous n'utilisez pas le masque EP_ALL
, mais plutôt l'opérateur OR avec tous les masques individuels, les règles seront générées de manière à ce que ces points de terminaison soient correctement résolus.
Par exemple:
function wpa_myvar_endpoint(){
add_rewrite_endpoint( 'myvar', EP_PERMALINK | EP_PAGES );
}
add_action( 'init', 'wpa_myvar_endpoint' );