如何在wordpress中创建“路线”?

时间:2012-08-26 19:27:24

标签: wordpress api routes hook

为了我自己的理智,我正在尝试创建一个类似于ajax api的路径:

/api/<action>

我希望wordpress能够处理这条路线并委托do_action进行适当的操作。 wordpress是否为我提供了实现此功能的钩子?哪里是个好地方?

2 个答案:

答案 0 :(得分:14)

您必须使用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'
  );

}

这会创建/tus-fotos/mas-votadas/tus-fotos/mas-votadas/page/{number},它会更改自定义查询的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'
  );

}

然后,处理自定义请求:

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

  }

}

请记住通过访问/wp-admin/options-permalink.php或仅在需要时调用flush_rewrite_rules 来刷新重写规则,因为这不是一个简单的过程。

答案 1 :(得分:1)

好像你正在寻找wordpress json-api插件,这是我用过的很好的插件之一,也很容易扩展。祝你好运。