2023-06-11 / 314阅
WordPress REST API允许您以可编程的方式访问和操作WordPress站点。通过链接和嵌入机制以及发现机制,您可以轻松地通过REST API获取站点上的数据。
WordPress REST API使用链接机制允许您轻松找到相关的数据集合和单个资源。链接可以通过响应头部或响应正文中添加Link头实现。
例如,当您访问文章的集合时,响应头中会包含以下链接:
Link: <http://example.com/wp-json/wp/v2/posts?page=2>; rel="next", <http://example.com/wp-json/wp/v2/posts?page=16>; rel="last", <http://example.com/wp-json/wp/v2/posts?page=1>; rel="prev", <http://example.com/wp-json/wp/v2/posts>; rel="first"
这些链接将帮助您轻松地浏览文章的集合。例如,您可以使用“next”链接来获取下一页。
为了避免重复信息的传送,WordPress REST API使用嵌入机制允许您获取相关资源的部分或完整信息。对于嵌入的资源,您可以使用查询参数_embed来获取。
例如,当您访问文章的集合时,响应正文中每个文章包含的作者信息都是一个嵌入资源。使用以下查询参数可以将这些信息嵌入到响应中:
http://example.com/wp-json/wp/v2/posts?_embed
WordPress REST API还使用发现机制提供有关站点上可用资源的信息。您可以使用以下路径找到站点上的发现信息:
http://example.com/wp-json/
此路径下的响应内容将提供您可以访问的所有REST API资源。例如:
{
"authentication": {},
"_links": {
"https://api.w.org/": {
"href": "http://example.com/wp-json/"
},
"self": [
{
"href": "http://example.com/wp-json/"
}
],
"help": [
{
"href": "http://example.com/wp-json/wp/v2/posts"
}
]
},
"namespaces": [
{
"namespace": "wp/v2",
"href": "http://example.com/wp-json/wp/v2"
}
]
}
以下是使用WordPress REST API获取文章的示例代码,包括链接、嵌入和发现机制:
// 获取文章的集合
$posts = file_get_contents('http://example.com/wp-json/wp/v2/posts');
// 输出文章的标题和内容
foreach ($posts as $post) {
echo '<h2>' . $post['title']['rendered'] . '</h2>';
echo '<p>' . $post['content']['rendered'] . '</p>';
// 获取嵌入的作者信息
$author = file_get_contents($post['_links']['author'][0]['href'] . '?_embed');
echo '<p>Written by ' . $author['name'] . '</p>';
}
// 获取链接,例如获取下一页
$next_page_url = get_link_header($http_response_header, 'next');
if ($next_page_url) {
$next_page = file_get_contents($next_page_url);
}
// 获取发现信息
$discovery = file_get_contents('http://example.com/wp-json/');
$namespaces = $discovery['namespaces'];
foreach ($namespaces as $namespace) {
echo '<p>Namespace: ' . $namespace['namespace'] . '</p>';
}
其中,get_link_header函数用于从响应头部的Link头中获取指定关系类型的链接:
function get_link_header($headers, $rel) {
foreach ($headers as $header) {
$matches = array();
preg_match('/<([^>]+)>; rel="' . $rel . '"/', $header, $matches);
if (!empty($matches)) {
return $matches[1];
}
}
return null;
}
阅读文章或者观看视频过程中有任何问题,请下方留言或者联系我Q248758228