REST Endpoint API 404

时间:2018-12-12 作者:treyBake

我最近被引导到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。。

1 个回复
最合适的回答,由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);
    }
}