这里有几件事不对,没有一件与OOP真正相关。
首先,您似乎试图在插件激活时注册REST路由。这是不正确的。每个请求都需要注册路由,所以BusinessCustomersApiController->register_routes() 需要在每个请求上运行。你可以通过hooking 该函数用于rest_api_init.
问题是你使用add_action() 要添加该钩子,请在回调中进行。自从register_routes() 需要钩住才能跑,但钩住发生在里面register_routes(), 该函数将永远不会运行。
因此,要解决这个问题,您需要做两件事:
将呼叫移动到add_action() 转换为单独的方法在每个请求上运行该方法下面是我的做法:
删除任何激活或停用相关方法。你没有使用它们添加一个新方法(我将调用它init()) 到类中,并使用add_action() 进入这些创建类实例后,在该类实例上调用该方法结果会是这样的。请注意,为了演示解决方案,我删除了与问题无关的代码:
class BusinessCustomersPlugin {
function init(){
$_apiController = new BusinessCustomersApiController();
$_apiController->init();
}
}
$businessCustomers = new BusinessCustomersPlugin();
$businessCustomers->init();
<小时>
class BusinessCustomersApiController {
public function __construct() {
$this->namespace = \'/customers/org/v1/\';
}
public function init() {
add_action( \'rest_api_init\', [ $this, \'register_routes\' ] );
}
public function register_routes() {
register_rest_route(
$this->namespace,
\'test/\',
[
\'methods\' => \'GET\',
\'callback\' => [ $this, \'test\' ],
]
);
}
public function test() {
return \'test\';
}
}