我最近被引导到WordPress中的另一个REST端点posts.
然而,遵循指南/提供的解决方案会导致预期端点API url的404。
我的代码如下:
wp内容/插件/供应商模块/管理/管理端点。php
<?php
class Import_Csv
{
public function register_routes()
{
$version = 1;
$namespace = sprintf(\'vendor/v%u\', $version);
$base = \'/import\';
\\register_rest_route(
$namespace,
$base,
[
[
\'methods\' => \\WP_REST_Server::CREATABLE,
\'callback\' => [$this, \'import_csv\'],
\'permission_callback\' => [$this, \'get_import_permissions_check\'],
\'args\' => []
]
]
);
}
public function get_import_permissions_check($req)
{
return true;
}
public function import_csv_file($req)
{
# the import process
return new \\WP_REST_Response($data, 200);
}
}
然后在我的插件文件中添加操作:
wp内容/插件/供应商模块/供应商模块。php
require_once \'admin/admin-endpoint.php\';
add_action(\'rest_api_init\', function()
{
$import_csv = new \\Import_Csv;
$import_csv->register_routes();
});
然后我去这个
http://site.local/index.php/wp-json/vendor/v1/import/
测试它是否工作,但返回404错误。在尝试创建端点时,我做错了什么?
**编辑:**进一步测试
转到urlhttp://site.local/index.php/wp-json/vendor/v1/
显示此信息:
{
"namespace": "vendor/v1",
"routes": {
"/vendor/v1": {
"namespace": "vendor/v1",
"methods": [
"GET"
],
"endpoints": [
{
"methods": [
"GET"
],
"args": {
"namespace": {
"required": false,
"default": "vendor/v1"
},
"context": {
"required": false,
"default": "view"
}
}
}
],
"_links": {
"self": "http://site.local/index.php/wp-json/vendor/v1"
}
},
"/vendor/v1/import": {
"namespace": "vendor/v1",
"methods": [
"POST"
],
"endpoints": [
{
"methods": [
"POST"
],
"args": []
}
],
"_links": {
"self": "http://site.local/index.php/wp-json/vendor/v1/import"
}
}
},
"_links": {
"up": [
{
"href": "http://site.local/index.php/wp-json/"
}
]
}
}
因此,我可以清楚地看到JSON字符串中的链接,但无论出于何种原因,当我实际转到它时,它是404\'ing。。
最合适的回答,由SO网友:Greg Winiarski 整理而成
问题很少:
您正在使用\\WP_REST_Server::CREATABLE
仅当请求类型为POST时执行,如果您刚刚在浏览器中打开URL,请使用\\WP_REST_Server::READABLE
相反(或\\WP_REST_Server::ALLMETHODS
接受任何请求类型)。
您的回拨是\'callback\' => [$this, \'import_csv\'],
但它应该是\'callback\' => [$this, \'import_csv_file\'],
由于import\\u csv()方法没有定义,所以我猜您的意思是import\\u csv\\u file()。
在return new \\WP_REST_Response($data, 200);
应该是return new \\WP_REST_Response($req, 200);
as$数据变量似乎未定义。
完整的代码应该如下所示
class Import_Csv
{
public function register_routes()
{
$version = 1;
$namespace = sprintf(\'vendor/v%d\', $version);
$base = \'/import/\';
\\register_rest_route(
$namespace,
$base,
[
[
\'methods\' => \\WP_REST_Server::READABLE,
\'callback\' => [$this, \'import_csv_file\'],
\'permission_callback\' => [$this, \'get_import_permissions_check\'],
\'args\' => []
]
]
);
}
public function get_import_permissions_check($req)
{
return true;
}
public function import_csv_file($req)
{
# the import process
return new \\WP_REST_Response($req, 200);
}
}