Dan*_*nor 12 api wordpress hook routes
为了我自己的理智,我正在尝试为ajax api创建一个类似于以下内容的路径:
/api/<action>
Run Code Online (Sandbox Code Playgroud)
我希望wordpress能够处理这条路线并委托给你采取适当的行动do_action.wordpress是否为我提供了实现此功能的钩子?哪个地方好?
dav*_*dmh 15
你必须使用add_rewrite_rule
就像是:
add_action('init', 'theme_functionality_urls');
function theme_functionality_urls() {
/* Order section by fb likes */
add_rewrite_rule(
'^tus-fotos/mas-votadas/page/(\d)?',
'index.php?post_type=usercontent&orderby=fb_likes&paged=$matches[1]',
'top'
);
add_rewrite_rule(
'^tus-fotos/mas-votadas?',
'index.php?post_type=usercontent&orderby=fb_likes',
'top'
);
}
Run Code Online (Sandbox Code Playgroud)
这会创建/tus-fotos/mas-votadas并/tus-fotos/mas-votadas/page/{number}更改自定义查询var的orderby,我在pre_get_posts过滤器中处理.
也可以使用query_vars过滤器添加新变量并将其添加到重写规则中.
add_filter('query_vars', 'custom_query_vars');
add_action('init', 'theme_functionality_urls');
function custom_query_vars($vars){
$vars[] = 'api_action';
return $vars;
}
function theme_functionality_urls() {
add_rewrite_rule(
'^api/(\w)?',
'index.php?api_action=$matches[1]',
'top'
);
}
Run Code Online (Sandbox Code Playgroud)
然后,处理自定义请求:
add_action('parse_request', 'custom_requests');
function custom_requests ( $wp ) {
$valid_actions = array('action1', 'action2');
if(
!empty($wp->query_vars['api_action']) &&
in_array($wp->query_vars['api_action'], $valid_actions)
) {
// do something here
}
}
Run Code Online (Sandbox Code Playgroud)
只需记住通过访问/wp-admin/options-permalink.php或仅在需要时调用flush_rewrite_rules 来刷新重写规则,因为这不是一个简单的过程.
| 归档时间: |
|
| 查看次数: |
17944 次 |
| 最近记录: |