我能够(大部分)弄清楚这一点。是的,绝对可以使用 wordpress.api 从私人 wordpress.com 站点加载帖子。
为此,您对私有站点进行的任何 api 调用(get、post 等)都需要在请求的标头中包含一个 oauth2 令牌。您从 wordpress.com 获得令牌。
请注意,此描述是关于 wordpress.com api,而不是 wordpress.org api。
要获取该令牌,您可以按照此处的步骤操作:https ://developer.wordpress.com/docs/oauth2/ 。您可能会获得需要定期刷新的短期令牌或永久令牌。您从服务器端代码方法获得永久令牌。
有几种不同的方法可以做到这一点:
所有这些都要求您在 wordpress.com 注册一个单独的 url,这里是:https ://developer.wordpress.com/apps/ 。在该站点上,您创建一个新的“应用程序”,该应用程序将请求许可。如果您有一个网站,该应用程序可以使用您的 url,或者只是您在开发中使用的 localhost 站点(或者如果您在开发中不使用它,甚至只是一个 localhost 端口 url - 关键是获取 client_id 并使用它在请求过程中)。在那里,您将获得这些步骤所需的 client_id 和 client_secret_code。从那里:
1)您可以只使用 curl 代码查询 api 并取回身份验证码,然后使用该身份验证码进行另一个查询以获取令牌。请注意,wordpress.com oauth2 文档中的 curl 代码是 PhP(不是纯 curl)。
2)您可以直接在您的应用程序中提供获取令牌的方法,如上面链接的 wordpress oauth2 文档中所述。对于离子应用程序,这可能需要使用 inappbrowser 插件,才能转到 api 应用程序授予您权限的页面。
3)另一种可能性:wordpress 设置了一个相当简单的基于节点的流程来获取令牌:转到https://github.com/Automattic/node-wpcom-oauth,在那里下载代码,然后按照步骤操作。一个非常有用的教程位于:http ://haiku2.com/2015/11/how-to-setup-a-wordpress-com-oauth-token/ 。它已经有几年了,但它现在仍然有效。
获得令牌后,将其包含在标头中以进行调用。例如,使用来自 @angular/common/http 的 HttpClient(对于 ionic/angular/typescript 应用程序):
var token = 'YOUR TOKEN'
var url = 'THE API ENDPOINT'
return new Promise((resolve) => {
let headers = new HttpHeaders();
headers.append('Authorization', 'Bearer ' + token)
this.http.get(url, {headers: headers})
.subscribe(data => {
console.log(data)
}, err => {
console.log(err);
});
});
这一切都应该工作......除非你遇到CORS(跨源)问题。
如果它似乎不起作用,或者如果您收到关于结果为空、令牌无效或不存在“Access-Control-Allow-Origin”标头的错误,则很有可能 CORS 是问题所在.
在 ionic 上——也许还有其他基于 Web 的工具——你可能需要配置你的设置以使用 wordpress.com 端点作为代理服务器。相关信息在这里:https ://blog.ionicframework.com/handling-cors-issues-in-ionic/ 。
对于 ionic 和 ios——当您想将应用程序放到设备或模拟器上时,由于 ionic 在 2017 年晚些时候实现了 WKWebView,因此在最近的 ionic 版本中存在一组单独的 CORS 问题。
以下是有关此的更多详细信息:https ://blog.ionicframework.com/wkwebview-for-all-a-new-webview-for-ionic/ 。要克服 ios 设备上的 CORS 问题,您必须绕过 CORS。Ionic 目前对此的建议是使用 Ionic Native http 插件。现在的实现似乎有点不一致,但这是我迄今为止看到的唯一解决方案。