我有一个用户元的自定义endpoint,我已成功注册到WP REST API并为其创建了自定义endpoint。然而,每当我从我的单页应用程序(使用的JS框架是Vue)发出GET和POST请求时,返回值为“false”
我怀疑这是由于使用JWT Authoration for WP REST API插件存在一些授权问题而发生的。
以下是我在functions.php应用程序中采取的步骤:
首先,我为REST API注册用户元字段:
//register user meta to rest api
add_action( 'rest_api_init', 'adding_user_meta_rest' );
function adding_user_meta_rest (){
register_meta(
'user',
'user_likes',
array(
'single' => false,
'type' => 'object',
'show_in_rest' => true,
)
);
};
此步骤似乎工作正常,因为当我使用路径“/wp-json/wp/v2/users/”时,该字段显示出来。
下一步,我注册自定义endpoint:
add_action('rest_api_init','add_user_likes');
function add_user_likes(){
register_rest_route(
'v1/user_likes','/(?P<id>\d+)',[[
'methods'=> 'GET',
'callback'=>'get_user_likes'
],
[
'methods'=> 'POST',
'callback'=>'post_user_likes'
]]);
};
以下是我的试镜:
function get_user_likes(){
$current_user_id = get_current_user_id();
$status = $response->get_status;
return get_user_meta($current_user_id,'user_likes');
}
function post_user_likes(WP_REST_Request $req){
$body = $req->get_json_params();
$current_user_id = get_current_user_id();
return update_user_meta($current_user_id, 'user_likes',$body);
};
然后在前端,这是我的POST请求:
handleLike(){
fetch(`https://site-url.com/wp-json/v1/user_likes/${this.$store.state.userInfo.id}`,{
method:"POST",
body:JSON.stringify({
post_id:this.currentPost.id,
post_title:this.currentPost.title.rendered
}),
headers: {
"Content-Type": "application/json",
"Authorization": `Bearer ${this.$store.state.accessToken}`
},
}).then(resp=>resp.json())
.then(data=>console.log(data))
我的GET请求也返回false。
我认为问题是,我没有检索当前用户ID,因为根据get_user_meta和update_USERMETA的文档,如果未确定用户ID,函数将返回false。为什么没有确定用户id,我不知道。正如我提到的,我正在使用JWT授权WP REST API。因此,根据我的阅读,我不需要生成随机数,因为WP将使用令牌来确定当前用户。如果我错了,请告诉我。任何指导都将不胜感激。
弄清楚了我的问题。对于使用 JWT Authorization For WP REST API 并在 AWS Lightsail 上托管其 Wordpress 数据库的未来用户,以下是 .htaccess 文件必须存储在 Bitnami 的 SSH 上的方式:
<Directory "/opt/bitnami/apps/wordpress/htdocs”>
<IfModule mod_rewrite.c>RewriteEngine on
RewriteCond %{HTTP:Authorization} ^(.*)
RewriteRule ^(.*) - [E=HTTP_AUTHORIZATION:%1]
</IfModule>
</Directory>
SetEnvIf Authorization "(.*)" HTTP_AUTHORIZATION=$1
我遇到的第二个问题:令牌已经是一个字符串。因此,将其放在模板文字中会导致解析问题。使用简单的连接即可。
以下是我在标题中对授权所做的更改(注意:这是使用Vue的Vuex):
"Authorization": "Bearer" + this.$store.state.accessToken
试试这个,设置< code >凭证
method: 'POST',
credentials: 'same-origin',
headers: {
'Content-Type': 'application/x-www-form-urlencoded',
'Cache-Control': 'no-cache',
},
body: params
})
可以通过将其添加到函数中来管理 corse.php
function my_customize_rest_cors() {
remove_filter( 'rest_pre_serve_request', 'rest_send_cors_headers' );
add_filter( 'rest_pre_serve_request', function( $value ) {
header( 'Access-Control-Allow-Origin: *' );
header( 'Access-Control-Allow-Methods: POST, GET' );
header( 'Access-Control-Allow-Credentials: true' );
header( 'Access-Control-Expose-Headers: Link', false );
header( 'Access-Control-Allow-Headers: X-Requested-With' );
return $value;
} );
}
add_action( 'rest_api_init', 'my_customize_rest_cors', 15 );
TL;DR:如何选择一个WP REST API自定义endpoint的响应的每一点信息? 长版 如果我想使用WP REST API构建自定义endpoint - 从不同的帖子类型发送特定帖子数据 - 按照手册中的示例,我得到了这个: 但是get_post()函数没有返回一些数据,如果您希望在页面中显示帖子,这些数据是非常有用的(例如类别id、特色图片)。那么,我如何构建一个自定义endpoint来
我正在使用Jersey restful API with Atmosphere。 这是我的网站。xml 现在,我有一个带有的资源类,并且我已经定义了和方法。在我的整个项目中,没有其他类处理路径。 我使用的url是,我在调用中使用POST方法。 尽管我定义了GET和POST方法 HTTP状态405-不允许的方法 但是,当我删除AdminPanel的serlvet映射并更改
我正在尝试减少使用Rest API时返回的JSON。我可以在查询中使用“_embed”参数让它工作,但是它返回了大量我不需要的数据。因此,根据WP最佳实践,我想设置一个自定义endpoint,并在它的回调中调用一个函数来输出我需要的三个项目。看起来很简单,但是当我尝试的时候,它对所有的节点都返回NULL。在我的functions.php档案中,我有: 然后路由并回调自定义endpoint 当我使用
我没有得到实际的超文本传输协议标头时,使超文本传输协议后调用使用角5公共http pClient.我在请求中传递观察:'响应'以获得完整的响应(默认情况下,http客户端仅返回响应中的正文)。 我想从http头响应中读取csrftoken值。我可以看到csrftoken在使用chrome浏览器网络视图的响应头中可用。 但是当我在Angular中阅读httpClient响应时,这一点是不可用的。 在
我正在为Post类型Post创建自定义endpoint。Javascript的请求工作正常,但无法理解如何更新,例如,帖子的内容。 我已经创建并注册了一个路由,我为路由创建了一个回调函数,我还创建了一种小表单,在其中插入了post ID和内容。 这是路由的代码 这是回调函数 来自 javascript 的 XMLHTTPRrequest 是 变量“内容”和“id”是我写在表单字段内的值。 resp
我目前正在从事一个需要WordPress网站和简单的REST api的项目。我发现WordPress有自己的REST api,并决定扩展其功能以满足我的需求。我需要做的就是拥有GET和POST请求的endpoint,这些endpoint可以从与WordPress没有直接关系的表(但在同一个数据库中)中检索/插入数据。我成功地实现了所有GET请求,但是,我正在努力让POST的工作。 我定义了这个路由