我正在开发一个使用自定义 REST API 路由的 WordPress 插件。我有一个使用 GET 的函数和一个使用 POST 的函数,两个回调都已注册。当我导航到 localhost/mysitename/wp-json/wpgpt/v1 时,我可以看到列出的端点。当我导航到 testbubby 或在邮递员中发出 GET 请求时,我收到:{ “代码”:“rest_invalid_handler”, "message": "路由的处理程序无效。", “数据”: { “状态”:500 } 当我导航到发送消息时,我收到 404 (但我认为这只是因为它只需要一个发布请求),但是当我在邮递员中发出 POST 请求时,我仍然收到 500 错误。
这是我的php代码,在构造过程中调用了register_wpgpt_api_routes()。
function register_wpgpt_api_routes() {
register_rest_route(
'wpgpt/v1',
'/send-message',
array(
'methods' => 'POST',
'callback' => 'send_message',
'permission_callaback' => '__return_true'
));
register_rest_route('wpgpt/v1', '/testbubby', array(
'methods' => 'GET',
'callback' => 'test_route',
'permission_callaback' => '__return_true'
)
);
}
function test_route(){
echo "hey there";
}
function send_message( string $message ): string {
$messages = [];
if( isset( $this->system_message ) ) {
$messages[] = [
"role" => "system",
"content" => $this->system_message,
];
}
//$messages = array_merge( $messages, $this->message_history );
$messages[] = [
"role" => "user",
"content" => $message,
];
return $this->make_api_request( $messages );
}
这是应该发出请求的 JS 函数,但当我单击按钮执行它时,我得到 404(但我可以在网络选项卡中看到有效负载):
function wpgpt_send_message() {
let message = $(".wpgpt-chat-input").val();
wpgpt_add_message( message, "user" );
$(".wpgpt-chat-input").val("");
let payload = {
"message": message,
"message_history": wpgpt_message_history
};
$.ajax({
url: '/wp-json/wpgpt/v1/send-message',
method: 'POST',
contentType: 'application/json',
dataType: 'json',
data: JSON.stringify( payload ),
success: function( response ) {
wpgpt_add_message( response.message, "assistant" );
wpgpt_message_history.push( {
"role": "user",
"content": message,
} );
wpgpt_message_history.push( {
"role": "assistant",
"content": response.message.replace( "\n", "<br>" ),
} );
},
error: function() {
wpgpt_add_message( "Sorry, there was an error", "assistant" );
}
});
}
感谢任何帮助,这是我第一次尝试使用自定义端点。
请阅读 WordPress 文档中的整个页面:添加自定义端点
您将看到传递到
callback
的第一个参数是一个 WP_REST_Request 对象。 send_message()
函数需要一个字符串作为第一个参数。
您还将了解到,
callback
应该返回一个值(例如PHP关联数组),该值可以序列化为JSON字符串(由WordPress自动完成)以返回给客户端。 test_route()
函数echo内容而不是return-ing 一个值。
另一个值得阅读的有用页面是路由和端点。