Вопрос: REST Endpoint API 404

Недавно меня привели к конечным точкам REST в WordPress на другом из моих posts .

Однако следование руководствам /предоставленным решениям приводит к 404 ожидаемого URL-адреса API конечной точки.

Мой код выглядит следующим образом:

wp-content /plugins /vendor-module /admin /admin-endpoint.php

<?php    class Import_Csv    {        public function register_routes()        {            $version = 1;            $namespace = sprintf('vendor/v%u', $version);            $base = '/import';            
egister_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-content /plugins /vendor-module /vendor-module.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. Что я делаю не так, пытаясь создать свою конечную точку?

** Изменить: ** дальнейшее тестирование

Переход к URL-адресу http: //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, когда я на самом деле иди к нему ..

Ответы и комментарии:

примечания для 2. и 3 .: 2. -> да, заметили, что после позирования, но не изменились. 3. Это определено в реальном коде, я просто сократил функцию, так как не нужно видеть, что она делает :), но попробую пункт 1 :)
Создан 12-12-2018 10:24 treyBake

Это должно быть сделано, печать из вашего обновления указывает, что / vendor / v1 / import принимает только метод POST, пока вы хотите иметь GET (по крайней мере, для тестирования в браузере).
Создан 12-12-2018 10:01 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_csv () не определен, поэтому я предполагаю, что вы имели в виду import_csv_file ().
возврат new WP_REST_Response ($ data, 200); должен быть возвращен новый WP_REST_Response ($ req, 200); переменная $ data, похоже, не определена.

Полный код должен выглядеть следующим образом
класс Import_Csv
{
    публичная функция register_routes ()
    {
        $ version = 1;
        $ namespace = sprintf ('vendor / v% d', $ version);
        $ base = '/ import /';

         Register_rest_route (
            $ Пространств имен,
            $ База,
            [
                [
                    'method' => WP_REST_Server :: READABLE,
                    'callback' => [$ this, 'import_csv_file'],
                    'missions_callback '=> [$ this,' get_import_permissions_check '],
                    'args' => []
                ]
            ]
        );
    }

    публичная функция get_import_permissions_check ($ req)
    {
        вернуть истину;
    }

    публичная функция import_csv_file ($ req)
    {
        # процесс импорта
        return new WP_REST_Response ($ req, 200);
    }
}
Создан 12-12-2018 10:52 Greg Winiarski3427