重写admin-ajax.php的规则

时间:2014-03-08 作者:arnaldo2204

我浏览了很多帖子,在google上搜索了很多,但还是没能实现。我正在尝试为管理ajax创建一个重写规则。php,以实现此处所示的相同结果:

Adding admin-ajax.php to the frontend. Good or bad idea?

但是,我不想使用htaccess文件。相反,我需要通过动态添加规则(比如使用add\\u rewrite\\u rule)来实现这一点,例如,因为要调用的ajax函数位于我正在编写的插件中,我希望提供一个友好的URL来调用。

我似乎遵循了有关该方法的所有最佳做法。我在插件的激活和停用挂钩上钩住了规则刷新。还对初始化操作添加了路由:

add_rewrite_rule(\'/api\', \'/wp-admin/admin-ajax.php\', \'top\');        
不过,我只得到了404。

编辑:我现在就是这样做的:

// 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); 
在add\\u custom\\u rules上,我执行以下操作:

add_rewrite_rule(\'my-api.php$\', \'index.php?my-api=1\', \'top\');
在add\\u custom\\u query\\u vars上,我执行以下操作:

$query_vars[] = \'my-api\';
return $query_vars;
在add\\u custom\\u parse\\u请求时,我执行以下操作:

if (array_key_exists(\'my-api\', $wp->query_vars)) {
    $action = $wp->query_vars[\'action\'];
    $API = new myAPI();
    $API->{$action}();
    exit();
}
我还缺少什么?再次感谢。

1 个回复
SO网友:Seamus Leahy

这里有一些事情需要解决。

第一个问题是为什么重写规则不起作用。

add_rewrite_rule(\'/api\', \'/wp-admin/admin-ajax.php\', \'top\');
WordPress重写不会重定向到页面。它解析path 在WordPress查询变量中使用正则表达式。如果您在WordPress中禁用了pretty URL,您将在URL中看到站点页面的查询变量:http://example.com/?p=262, http://example.com/?page_id=2, 或http://example.com/?m=201309`.

重写规则创建查询变量后,WordPress调用数据库中的内容并设置标志(is_single(), is_404(), 等等)。然后根据这些标志找到适当的模板。

您的重写规则将不起作用,因为它不会生成查询变量。WordPress没有调用该文件。

你能做些什么呢?

在你身上.htaccess 文件,将服务器重写规则添加到映射/api/wp-admin/admin-ajax.php./wp-admin/admin-ajax.php 取而代之的是hooking into the template_redirect hook.

结束

相关推荐