Je suis passé par beaucoup de posts et ai beaucoup cherché sur Google, mais je n'ai toujours pas réussi à faire en sorte que cela fonctionne. J'essaie de créer une règle de réécriture pour admin-ajax.php, pour obtenir les mêmes résultats que ceux affichés ici:
Ajout de admin-ajax.php à l'interface. Bonne ou mauvaise idée?
Cependant, je ne veux pas utiliser le fichier htaccess. Au lieu de cela, j'ai besoin que cela fonctionne en ajoutant dynamiquement une règle (par exemple, en utilisant add_rewrite_rule), par exemple, parce que la fonction ajax à appeler se trouve dans un plugin que j'écris et que je souhaite fournir une URL conviviale à appeler.
Il me semble avoir suivi toutes les meilleures pratiques concernant cette approche. J'ai accroché la règle flush aux crochets d'activation et de désactivation de mon plugin. La route a-t-elle également ajouté l'action init:
add_rewrite_rule('/api', '/wp-admin/admin-ajax.php', 'top');
Tout ce que je reçois sont 404, cependant.
Edit: voici ce que je fais maintenant:
// rewrite rules and API hooks
add_action('init', array('MYCLASS', 'add_custom_rules'), 1);
add_filter('query_vars', array('MYCLASS', 'add_custom_query_vars'), 1, 1);
add_action('parse_request', array('MYCLASS', 'add_custom_parse_request'), 1, 1);
Sur add_custom_rules, je fais:
add_rewrite_rule('my-api.php$', 'index.php?my-api=1', 'top');
Sur add_custom_query_vars, je fais:
$query_vars[] = 'my-api';
return $query_vars;
Sur add_custom_parse_request, je fais:
if (array_key_exists('my-api', $wp->query_vars)) {
$action = $wp->query_vars['action'];
$API = new myAPI();
$API->{$action}();
exit();
}
Qu'est-ce qui me manque encore? Merci encore.
Il y a quelques choses à régler ici.
La première est pourquoi votre règle de réécriture ne fonctionnera pas.
add_rewrite_rule('/api', '/wp-admin/admin-ajax.php', 'top');
La réécriture WordPress ne redirige pas vers une page. Que fait-il analyse la path
en utilisant des expressions régulières dans un vars de requête WordPress. Si vous désactivez les jolies URL dans WordPress, les vars de requête s'affichent dans l'URL des pages de votre site: http://example.com/?p=262
, http://example.com/?page_id=2
ou http://example.com/?m=201309. `.
Une fois que les règles de réécriture ont créé les vars de requête, WordPress appelle ensuite le contenu de la base de données et définit les indicateurs (is_single()
, is_404()
, etc.). Ensuite, le modèle approprié est trouvé en fonction de ces indicateurs.
Votre règle de réécriture ne fonctionnera pas car elle ne génère pas de vars de requête. WordPress n'appelle pas le fichier pour cela.
Que pouvez-vous faire à la place?
.htaccess
, ajoutez une règle de réécriture du serveur pour mapper /api
à /wp-admin/admin-ajax.php
./wp-admin/admin-ajax.php
à la place.template_redirect
.