WP-REST API 的自定义路由端点给出“code”:“rest_no_route”,错误

问题描述 投票:0回答:2

我正在按照 this 教程创建 WP-API 的自定义端点。

我在 postman 上点击 /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
    }
}

我在/plugins/custom-plugin/目录中创建了一个custom-plugin.php文件。

<?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;
    }
?>
wordpress wp-api
2个回答
3
投票

确保正在运行对

add_action( 'rest_api_init', 'dt_register_api_hooks' );
的回调。

就我而言,我的回调没有被调用,因为我使用

add_action('rest_api_init', ...)
太晚了;行动已经启动。比如,我给
register_rest_route()
的电话从未发生过。


2
投票

对于一个非常类似的问题,当我在 WordPress 中设计 API 时,我在某些网站上也遇到了相同的

"code": "rest_no_route",...
错误,而在其他网站上则没有。我追溯到这样一个事实:POST 请求被转换为 GET 请求,因此我的插件无法识别它们。 从 POST 到 GET 的转换是在 WordPress 启动之前完成的。我能够通过添加以下标头来查明问题并解决它,如详细信息此处所解释:

headers: { 'content-type': 'application/x-www-form-urlencoded; charset=UTF-8' }
© www.soinside.com 2019 - 2024. All rights reserved.