如何以及在何处实例化扩展WP_REST_Controller

时间:2016-06-15 18:20:59

标签: wordpress api rest controller wordpress-plugin

我有一个我创建的插件,我想使用WP rest api controller pattern来扩展api。

<?php
/**
* Plugin Name: myplugin
* Plugin URI: h...
* Description: A simple plugin ...
* Version: 0.1
* Author: Kamran ...
* Author ....
* License: GPL2

function myplugin_register_endpoints(){

   require_once 'server/controllers/my_ctrl.php';
   $items=new items();
   $items->register_routes();

}

add_action('rest_api_init','myplugin_register_endpoints');
.
.

我创建了一个名为server / controllers的文件夹,并在其中创建了一个my_ctrl.php文件,其中包含一个扩展WP_REST_Controller的类,如下所示

// server / controllers / my_ctrl.php

class items extends WP_REST_Controller {

    /**
    * Register the routes for the objects of the controller.
    */
     public function register_routes() {
       .....
     }

}

但是我在sublime xdebuge调用堆栈中收到以下错误:

[致命错误]未找到类'myplugin \ WP_REST_Controller'

我不知道如何解决这个问题,在哪里放置自定义控制器的文件,在哪里创建自定义类的实例等?

2 个答案:

答案 0 :(得分:2)

偶然发现这一点并认为我会提供我的解决方案以防其他人遇到此问题。

我们的想法是推迟扩展WP_REST_Controller的类的实例化,方法是不实例化它,直到调用实际的rest_api_init挂钩为止。

代码示例:

add_action( 'rest_api_init', function () {
    require_once(plugin_dir_path(__FILE__) . '/VideoImageApi.php');
    VideoImageApi::instance()->register_routes();
});

请注意回调中的require_once

答案 1 :(得分:1)

我已经解决了这个问题, 我检查了wp-content \ plugins文件夹,我找不到\ rest-api文件夹,虽然我发现文件夹里面的\ wp-includes \ rest-api似乎这个文件夹整合了“wp rest api” core不包括api可以公开的所有类(它只包含3个php文件),所以它不包括\ wp-content \ plugins \ rest-api \ lib \ endpoints \ class-wp-rest-controller .php。我安装了“wp rest api”插件,它被添加到wp-content \ plugins中,现在我不再有错误了。 (这很奇怪,因为我不知道它什么时候从我的项目中删除了)

谢谢Dan你的评论真的帮我重新检查所有内容并扫描我的wordpress中包含的文件夹并意识到插件丢失了,文件夹\ wp-includes \ rest-api不包含所有需要的类。