几个月以来,我一直在使用Wordpress REST插件WP-API,同时使用XAMPP进行本地开发.我最近将我的站点迁移到EC2实例,一切正常,但每当我尝试访问API上的任何端点时,我现在都会收到带有以下消息的404:
在此服务器上找不到请求的URL/wordpress/wp-json /
使用以下结构启用漂亮的固定链接http://.../wordpress/sample-post/
,在浏览器中导航到特定帖子时可以正常工作.
以下是有关我的设置的一些细节:
任何帮助将不胜感激,因为我已经通过SO和WP支持论坛几个小时,我的想法.谢谢!
我正在使用Loopj将文件上传到我的WordPress站点和WP REST API v1和/或v2(相同的结果).
身份验证很棒,标题很棒,文件"上传"但是当我在我的WordPress后端检查它时...图像或文件被破坏了.
Android部分是这样的:
File myFile = new File(finalpath);
String name = Utils.getLastBitFromUrl(finalpath);
String extension = Utils.getFileExtention(finalpath);
client.setBasicAuth("myusername", "mypassword", new AuthScope("mywebsite.com", 80, AuthScope.ANY_REALM));
client.addHeader("Content-Disposition", "filename=" + name);
client.addHeader("Content-Type", "image/" + extension);
try {
params.put("data", myFile);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
// or: http://mywebsite.com/wp-json/wp/v2/media for v2
client.post("http://mywebsite.com/wp-json/media", params, new AsyncHttpResponseHandler() {
int count = 0;
@Override
public void onStart() {
prgDialog = new ProgressDialog(MainActivity.this);
prgDialog.setMessage("Uploading Image...");
prgDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
prgDialog.setMax(100);
prgDialog.show();
}
@Override
public void onProgress(long bytesWritten, long totalSize) …
Run Code Online (Sandbox Code Playgroud) 我想使用wp-api插件为我的wordpress网站构建一个Android应用程序.我如何在Json中发送HttpRequest(GET)和recive响应?
我需要禁用默认路由WP REST API
并添加自定义路由.
我发现这个问题可以帮助我找到以下答案.
Run Code Online (Sandbox Code Playgroud)remove_action('rest_api_init', 'create_initial_rest_routes', 99);
但是,这也将删除任何自定义内容类型路由.所以你可以选择使用:
Run Code Online (Sandbox Code Playgroud)add_filter('rest_endpoints', function($endpoints) { if ( isset( $endpoints['/wp/v2/users'] ) ) { unset( $endpoints['/wp/v2/users'] ); } // etc });
但是从这个方面来说,我需要知道所有默认路由并逐个删除,这不是最干净的方法.
我想知道是否有更清洁的方法来实现这一目标?
更新1:
根据克里斯的建议,我会添加更多细节来提问.
目前我正在使用rest_api_init
过滤器按照我register_rest_route
在本文中找到的下面的代码使用方法添加我的自定义路由.
add_action( 'rest_api_init', function () {
register_rest_route( 'myplugin/v1', '/sample/', array(
'methods' => 'GET',
'callback' => 'my_awesome_func',
) );
} );
function my_awesome_func( $data ) {
return 'somthing';
}
Run Code Online (Sandbox Code Playgroud)
自定义路由运行良好,但不幸的是我无法禁用默认路由,如/wp/v2/posts
.
我的问题 :
如何在使用rest_api_init
过滤器注册新的自定义路由时取消设置/禁用默认路由?
我正在使用wpapi npm模块与节点应用程序中的WP rest api进行交互.我通过身份验证,我的用户创建了一些草稿帖子.当我使用相同的凭据进入仪表板时,我也可以查看/编辑草稿帖子.
我正在使用此方法列出草稿:
wp.posts().auth().param( 'context', 'edit' ).param( 'status', 'draft' )
Run Code Online (Sandbox Code Playgroud)
但我一直收到这个错误:
{ code: 'rest_invalid_param',
message: 'Invalid parameter(s): status',
data: { status: 400, params: { status: 'Status is forbidden.' } } }
Run Code Online (Sandbox Code Playgroud)
对http:// localhost:8000/wp-json/wp/v2/posts?status = draft的curl响应是相同的错误消息,所以我不相信问题出在节点模块上.
我正在为我的WordPress网站创建android客户端.有没有办法使用swagger从wp rest客户端生成改进的2客户端库,或者是否有任何其他工具来生成相同的.
是否可以从外部源获取HTML/JSX内容并在React中动态呈现它?在我们的例子中,我们想从Wordpress API获取内容并在客户端和服务器上呈现它(我们使用的是NextJS)
因此,Wordpress API返回一个JSON响应,其中包含一个内容属性,该属性是一个HTML/JSX字符串.内容看起来像这样.
{
content: "<div><Slider imageCount="5" galleryID="1"></Slider><span>This is an image gallery</span></div>"
}
Run Code Online (Sandbox Code Playgroud)
因此,正如您所看到的,它将是HTML和React组件/ JSX的混合,表示为字符串
我会使用Axios来调用内容(使用NextJS的getInitialProps()方法在服务器和客户端上),然后我需要渲染它,但我是新的反应,我可以看到一些问题.
1)在React中,JSX是在构建时编译的,而不是运行时,我看不出如何绕过它(例如,使用$ compile服务在Angular中会很容易).
2)由于我们不知道Wordpress的内容将使用哪些组件,我们必须在页面顶部导入它们中的每一个,内容可能包含一个组件,或者它可能包含一个组件,谁知道?.
现在,我认为这是不可能的,这意味着我们必须重新考虑使用React,但我真的希望有人有答案.
真的很感激任何帮助.
检查请求是否为 API 请求的最佳方法是什么?
请注意,该请求可能是自定义 API 请求,这意味着它可能如下所示:
mysite.com/wp-json/my_namespace/my_version/my_action
Run Code Online (Sandbox Code Playgroud)
很明显,我可以检查API路由wp-json,但应该有一个内置函数来检查。
我需要它来做一些钩子,比如
add_action('init', 'do_something_only_if_api_request');
function do_something_only_if_api_request()
{
if ( ! wp_api_request() ) {
return;
}
// do stuff
}
Run Code Online (Sandbox Code Playgroud) 我对 Wordpress 的 REST API 中如何处理错误感到有些困惑。在他们的示例中,他们建议使用WP_Error
返回错误,但WP_REST_Response
将 HTTP 状态代码作为第二个参数,这使得它更短,更符合我的口味。
所以我比较这种返回错误的方式:
return new WP_REST_Response(array('error' => 'Error message.'), 400);
Run Code Online (Sandbox Code Playgroud)
有了这个:
return new WP_Error('rest_custom_error', 'Error message.', array('status' => 400));
Run Code Online (Sandbox Code Playgroud)
使用第一个选项,我可以在响应中只包含错误文本,这对我来说就足够了。所以响应看起来像这样:
{"error":"错误信息。"}
第二个更详细:
{"code":"rest_custom_error","message":"错误消息。","data":{"status":403}}
但是我还需要指定错误代码(第一个参数),这对我的前端实现没有任何好处。除了语法之外,我对性能、安全性和面向未来的因素的差异感到好奇。
那么,除了个人喜好之外,还有什么理由更喜欢其中之一吗?