本文目录导读:

我来详细介绍WordPress REST API和路由系统。
WordPress REST API 基础
什么是WordPress REST API
WordPress REST API是WordPress 4.7及以上版本内置的API,允许开发者通过HTTP请求与WordPress站点交互。
基础端点格式
https://yoursite.com/wp-json/wp/v2/{资源类型}
常用端点示例
// 获取文章列表
GET /wp/v2/posts
// 获取指定文章
GET /wp/v2/posts/{id}
// 创建文章 (需要认证)
POST /wp/v2/posts
// 获取页面
GET /wp/v2/pages
// 获取分类
GET /wp/v2/categories
// 获取标签
GET /wp/v2/tags
// 获取用户
GET /wp/v2/users
自定义路由/端点
注册自定义路由
// functions.php 或插件文件
add_action('rest_api_init', function() {
// 注册自定义路由
register_rest_route('myplugin/v1', '/data/', array(
'methods' => 'GET',
'callback' => 'myplugin_get_data',
'permission_callback' => '__return_true'
));
// 带参数的路由
register_rest_route('myplugin/v1', '/data/(?P<id>\d+)', array(
'methods' => 'GET',
'callback' => 'myplugin_get_single_data',
'args' => array(
'id' => array(
'validate_callback' => function($param) {
return is_numeric($param);
}
)
)
));
});
// 回调函数
function myplugin_get_data($request) {
return new WP_REST_Response(array(
'success' => true,
'data' => 'Hello from custom endpoint!'
), 200);
}
function myplugin_get_single_data($request) {
$id = $request->get_param('id');
return rest_ensure_response(array(
'id' => $id,
'content' => "Data for ID: $id"
));
}
REST API 认证方式
Cookie认证(用于插件和主题)
// 已登录用户自动启用
add_action('rest_api_init', function() {
if (is_user_logged_in()) {
// 自动处理认证
}
});
应用密码(WordPress 5.6+)
// 在用户设置中生成应用密码
// 使用Basic Auth
Authorization: Basic base64(username:app_password)
OAuth认证
// 使用OAuth插件
const fetch = require('node-fetch');
async function getData() {
const response = await fetch('https://yoursite.com/wp-json/wp/v2/posts', {
headers: {
'Authorization': 'Bearer ' + access_token
}
});
return response.json();
}
高级路由配置
带参数和验证的路由
add_action('rest_api_init', function() {
register_rest_route('custom/v1', '/products', array(
'methods' => 'GET',
'callback' => 'get_products',
'args' => array(
'category' => array(
'required' => false,
'sanitize_callback' => 'sanitize_text_field'
),
'price_range' => array(
'required' => false,
'validate_callback' => function($param) {
return preg_match('/^\d+-\d+$/', $param);
}
)
)
));
// POST路由(需要管理员权限)
register_rest_route('custom/v1', '/product', array(
'methods' => 'POST',
'callback' => 'create_product',
'permission_callback' => function() {
return current_user_can('manage_options');
}
));
});
function get_products($request) {
$args = array(
'post_type' => 'product',
'posts_per_page' => 10
);
if ($request->get_param('category')) {
$args['tax_query'] = array(
array(
'taxonomy' => 'category',
'field' => 'slug',
'terms' => $request->get_param('category')
)
);
}
$products = get_posts($args);
return rest_ensure_response($products);
}
REST API 客户端使用
JavaScript/jQuery
// GET请求
$.ajax({
url: 'https://yoursite.com/wp-json/wp/v2/posts',
method: 'GET',
data: {
per_page: 5,
categories: 1
},
success: function(response) {
console.log(response);
}
});
// POST请求(需要认证)
$.ajax({
url: 'https://yoursite.com/wp-json/wp/v2/posts',
method: 'POST',
data: {
title: 'New Post',
content: 'Post content',
status: 'publish'
},
beforeSend: function(xhr) {
xhr.setRequestHeader('X-WP-Nonce', wpApiSettings.nonce);
}
});
React/Next.js
// 使用WordPress REST API
import { useEffect, useState } from 'react';
function Posts() {
const [posts, setPosts] = useState([]);
useEffect(() => {
fetch('https://yoursite.com/wp-json/wp/v2/posts')
.then(res => res.json())
.then(data => setPosts(data));
}, []);
return (
<div>
{posts.map(post => (
<article key={post.id}>
<h2 dangerouslySetInnerHTML={{__html: post.title.rendered}} />
<div dangerouslySetInnerHTML={{__html: post.excerpt.rendered}} />
</article>
))}
</div>
);
}
自定义路由参数
// 更复杂的路由配置
register_rest_route('myapp/v1', '/search', array(
'methods' => 'GET',
'callback' => 'custom_search',
'args' => array(
'q' => array(
'required' => true,
'sanitize_callback' => 'sanitize_text_field'
),
'type' => array(
'default' => 'post',
'enum' => array('post', 'page', 'product')
),
'page' => array(
'default' => 1,
'sanitize_callback' => 'absint'
),
'per_page' => array(
'default' => 10,
'maximum' => 100
)
)
));
function custom_search($request) {
$query = $request->get_param('q');
$type = $request->get_param('type');
$page = $request->get_param('page');
$search_results = new WP_Query(array(
's' => $query,
'post_type' => $type,
'paged' => $page,
'posts_per_page' => 10
));
$data = array();
foreach ($search_results->posts as $post) {
$data[] = array(
'id' => $post->ID,
'title' => $post->post_title,
'excerpt' => $post->post_excerpt,
'link' => get_permalink($post->ID)
);
}
return rest_ensure_response(array(
'results' => $data,
'total' => $search_results->found_posts,
'pages' => $search_results->max_num_pages
));
}
路由调试工具
// 列出所有注册的路由
add_action('rest_api_init', function() {
$routes = rest_get_server()->get_routes();
error_log('Registered Routes: ' . print_r($routes, true));
});
// 检查特定路由
function check_route($route) {
$server = rest_get_server();
$routes = $server->get_routes();
if (isset($routes[$route])) {
return $routes[$route];
}
return false;
}
WordPress REST API提供了强大的数据交互能力,适用于前后端分离开发、移动应用支持、第三方集成等场景,合理的路由设计可以提高API的可用性和可维护性。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播