rest_api_init事件未被解雇

时间:2017-05-26 14:40:08

标签: wordpress wordpress-rest-api

我正在尝试在wp 4.7.4上运行自定义插件。下面是我的简单插件

add_action( 'rest_api_init', 'register_routes');


function register_routes() {
   register_rest_route( 'taxonomy-manager/v1', '/taxonomies/(P<taxonomy_type>[a-zA-Z]+)', array(
   'methods' => 'GET',
   'callback' => 'get_or_insert'
  ) );
} 

function get_or_insert( WP_REST_Request $request ) {

   $parameters = $request->get_params();

   return $parameters;

}

当我请求wp-json端点时,我看不到插件路由。插件已成功激活。我错过了什么吗?上面的插件(或基于rest_api_init事件的类似插件)是否适用于其他任何人?感谢。

5 个答案:

答案 0 :(得分:3)

参见下面的检查清单,
1.将永久链接更改为一个非常固定的链接并检查 2.检查.htacess文件(当你保存永久链接结构时它应该是可写的,它可由wp重写)。
3.检查验证。
4.检查以下自定义端点创建方法,

add_action( 'rest_api_init', function () {
  register_rest_route( 'myplugin/v1', '/author/(?P<id>\d+)', array(
    'methods' => 'GET',
    'callback' => 'my_awesome_func',
  ) );
} );

参考:https://developer.wordpress.org/rest-api/extending-the-rest-api/adding-custom-endpoints/

答案 1 :(得分:0)

使用最新的版本我没有看到正在触发的rest_api_init操作。看起来plugin.php中的这段代码总是空的并返回,从不允许触发rest_api_init操作:

if ( empty( $GLOBALS['wp']->query_vars['rest_route'] ) ) {
    return;
}

答案 2 :(得分:0)

我有解决方案,您需要将wp-json与您的URL结合使用,例如https://yourdomain.com/wp-json/namespace/and-so-on/

然后它将起作用。我在网址中缺少wp-json。

答案 3 :(得分:0)

就我而言,回调实际上是一个私有方法。我不得不将其更改为一种公共方法,以使一切正常工作:

class Example {
    function __construct() {
        add_action( 'rest_api_init', [ $this, 'example_method' ] );
    }

    public function example_method() {
        /* This will not work if the method is private! */
        /* ... */
    }
}
new Example();

在一个安装中,私有方法导致了堆栈跟踪错误,但在另一安装中,私有方法根​​本没有被调用,并且未生成任何错误。我仍然不确定为什么一台机器会以一种方式做出反应而另一台机器没有做出反应,而两者都将WP_DEBUGWP_DEBUG_LOG设置为true。

答案 4 :(得分:0)

检查您的插件是否已激活,如果未激活,则不会触发。