以下是一个示例代码,用于将WordPress中的特定分类下的文章转换成API接口,以便其他站点可以调用:
// 注册API接口路由
add_action('rest_api_init', function () {
register_rest_route('myplugin/v1', '/posts/(?P<category>\d+)', array(
'methods' => 'GET',
'callback' => 'get_posts_by_category',
));
});
// 定义API接口回调函数
function get_posts_by_category($request) {
$category_id = $request->get_param('category');
$posts = get_posts(array(
'category' => $category_id,
'posts_per_page' => -1,
'post_status' => 'publish'
));
$data = array();
foreach ($posts as $post) {
$data[] = array(
'id' => $post->ID,
'title' => $post->post_title,
'content' => $post->post_content,
'date' => $post->post_date,
'permalink' => get_permalink($post->ID)
);
}
return rest_ensure_response($data);
}
在这个示例中,我们将API接口地址设置为https://example.com/wp-json/myplugin/v1/posts/{category}
,其中{category}
是要获取的文章分类ID。如果你想使用其他名称或路径作为API接口地址,可以相应地修改register_rest_route()
函数的第一个参数。
当你访问https://example.com/wp-json/myplugin/v1/posts/{category}
时,WordPress将自动调用get_posts_by_category()
函数,并返回一个JSON格式的文章列表,包括每篇文章的ID、标题、内容、发布时间和永久链接等信息。请确保在使用此API接口时,替换{category}
为要获取的文章分类ID。
拓展功能:
为了添加秘钥验证以保护API接口不被恶意使用以下是示例代码:
[erphpdown]
可以使用以下代码来添加加密字符串访问:
// 注册API接口路由 add_action('rest_api_init', function () { register_rest_route('myplugin/v1', '/posts/(?P<category>\d+)', array( 'methods' => 'GET', 'callback' => 'get_posts_by_category', 'permission_callback' => function () { $encrypted_str = 'YOUR_ENCRYPTED_STRING'; // 你的加密字符串 if (isset($_GET['encrypted_str']) && $_GET['encrypted_str'] == $encrypted_str) { return true; } else { return false; } } )); });
// 定义API接口回调函数 function get_posts_by_category($request) { $category_id = $request->get_param('category'); $posts = get_posts(array( 'category' => $category_id, 'posts_per_page' => -1, 'post_status' => 'publish' )); $data = array(); foreach ($posts as $post) { $data[] = array( 'id' => $post->ID, 'title' => $post->post_title, 'content' => $post->post_content, 'date' => $post->post_date, 'permalink' => get_permalink($post->ID) ); } return rest_ensure_response($data); }
[/erphpdown]
在浏览器中访问时,在URL中添加加密字符串参数,例如:
https://www.xxxx.com/wp-json/myplugin/v1/posts/301?encrypted_str=YOUR_ENCRYPTED_STRING
其中,YOUR_ENCRYPTED_STRING需要替换为你的加密字符串。