Пользовательская конечная точка маршрута для WP-REST API выдает "code": "rest_no_route", ошибка

Я следую этому руководству для создания пользовательских конечных точек для WP-API .

Я всегда получаю эту ошибку при проверке /wp-json/custom-plugin/v2/get-all-post-ids/ на почтальоне для проверки:

{
    "code": "rest_no_route",
    "message": "No route was found matching
    the URL and request method ", 
    "data": {
        "status": 404
    }
}

Я создал файл custom-plugin.php в каталоге / plugins / custom-plugin /.

<?php
    if ( ! defined( 'ABSPATH' ) ) exit;

    add_action( 'rest_api_init', 'dt_register_api_hooks' );

    function dt_register_api_hooks() {    

        register_rest_route( 'custom-plugin/v2', '/get-all-post-ids/', array(
            'methods' => 'GET',
            'callback' => 'dt_get_all_post_ids',
            ) 
            );
    }
    // Return all post IDs
    function dt_get_all_post_ids() {
        if ( false === ( $all_post_ids = get_transient( 'dt_all_post_ids' ) ) ) {
            $all_post_ids = get_posts( array(
                'numberposts' => -1,
                'post_type'   => 'post',
                'fields'      => 'ids',
            ) );
            // cache for 2 hours
            set_transient( 'dt_all_post_ids', $all_post_ids, 60*60*2 );
        }
        return $all_post_ids;
    }
?>

2 ответа

Убедитесь, что ваш обратный звонок add_action( 'rest_api_init', 'dt_register_api_hooks' ); выполняется.

В моем случае мой обратный вызов не был вызван, потому что я использовал add_action('rest_api_init', ...)слишком поздно; действие уже было запущено. Как в, мой звонок register_rest_route() никогда даже не было.

Я надеюсь, что мой ответ может быть полезен для некоторых, а также.

Для очень похожей проблемы, когда я проектировал API в WordPress, я также получил то же самое."code": "rest_no_route",...ошибка на одних сайтах и ​​нет на других. Я проследил это до того факта, что запросы POST были преобразованы в запросы GET, поэтому они не распознавались моим плагином. Преобразование из POST в GET было сделано еще до запуска WordPress. Я смог определить проблему и решить ее, добавив следующий заголовок, как подробно описано здесь :

      headers: { 'content-type': 'application/x-www-form-urlencoded; charset=UTF-8' }
Другие вопросы по тегам