reactmore / wordpress-rest-api-client
此包的最新版本(1.07)没有提供许可证信息。
Wordpress Rest Api 客户端 PHP
1.07
2021-08-19 12:57 UTC
Requires
- php: ^7.0 | ^8.0
- psr/http-message: ^1.0
Requires (Dev)
- guzzlehttp/guzzle: ^6.2
- hamcrest/hamcrest-php: ^2.0
- mockery/mockery: ^1.4
- phpunit/phpunit: ^9.5
- squizlabs/php_codesniffer: ^3.6
Suggests
- guzzlehttp/guzzle: ^6.2
This package is auto-updated.
Last update: 2024-09-19 19:53:17 UTC
README
一个用于 PHP 的 Wordpress REST API 客户端
安装
此库可以通过 Composer 安装
composer require reactmore/wordpress-rest-api-client
用法
示例
require 'vendor/autoload.php'; $client = new Reactmore\WordpressClient\Wordpress(new Reactmore\WordpressClient\Request\GuzzleAdapter(new GuzzleHttp\Client()), 'http://domain.com'); // iF WP API DISABLE YOU NEED TO PASS AUTH // $client->setCredentials(new Reactmore\WordpressClient\Auth\WpBasicAuth('user', 'password')); // Argument 1 id default Null // Argumend 2 Array default Null $posts = $client->posts()->get(1, ['params' => 'Key']); echo '<pre>'; print_r($posts); echo '</pre>';
响应成功
- status = 状态名称
- code = 状态码
- data = 从 WordPress 返回的回调数据
- X-WP-TOTAL = 当前结果中所有文章的数量
- X-WP-TOTAL-PAGE = 当前结果中所有页面的数量
Array
(
[status] => success
[code] => 200
[data] => Array(
id =>
slug =>
xxxx
)
[X-WP-TOTAL] => 6909
[X-WP-TOTAL-PAGE] => 70
)
响应错误
- status = 状态名称
- code = 状态码
- error = 错误信息
Array
(
[status] => failed
[code] => 400
[error] => Array(
message =>
)
)
插件自定义路由
在您的主题函数中插入
function custom_api_get_all_posts() { register_rest_route('custom/v1', '/all-posts', array( 'methods' => WP_REST_Server::READABLE, 'callback' => 'custom_api_get_all_posts_callback' )); } // custom Route API function custom_api_get_all_posts_callback(WP_REST_Request $request) { $posts_data = array(); $paged = $request->get_param('page'); $paged = (isset($paged) || !(empty($paged))) ? $paged : 1; $author = $request->get_param('author'); $author = (isset($author) || !(empty($author))) ? $author : ''; $search = $request->get_param('search'); $search = (isset($search) || !(empty($search))) ? $search : ''; $after = $request->get_param('after'); $after = (isset($after) || !(empty($after))) ? $after : ''; $before = $request->get_param('before'); $before = (isset($before) || !(empty($before))) ? $before : ''; $query = new WP_Query( array( 's' => $search, 'author' => $author, 'paged' => $paged, 'post__not_in' => get_option('sticky_posts'), 'posts_per_page' => 10, 'post_type' => array('post'), 'date_query' => array( //set date ranges with strings! 'after' => $after, 'before' => $before, ), 'orderby' => 'date', 'order' => 'DESC' ) ); // if no posts found return if (empty($query->posts)) { return array(); } // set max number of pages and total num of posts $max_pages = $query->max_num_pages; $total = $query->found_posts; $posts = $query->posts; // prepare data for output $controller = new WP_REST_Posts_Controller('post'); foreach ($posts as $post) { $response = $controller->prepare_item_for_response($post, $request); $post_data = $controller->prepare_response_for_collection($response); $post_thumbnail = (has_post_thumbnail($post_data['id'])) ? get_the_post_thumbnail_url($post_data['id']) : null; $data[] = (object) array( 'id' => $post_data['id'], 'date' => $post->post_date, 'author' => array( 'id' => $post->post_author, 'name' => get_the_author_meta('user_nicename', $post->post_author), ), 'type' => $post->post_type, 'title' => $post->post_title, 'url' => get_permalink($post_data['id']), 'content' => $post_data['excerpt']['rendered'], 'featured_img_src' => $post_thumbnail, 'meta' => get_post_meta($post_data['id'], '', '') ); } // set headers and return response $response = new WP_REST_Response($data, 200); $response->header('X-WP-Total', $total); $response->header('X-WP-TotalPages', $max_pages); return $response; }
参数
- page = 您的数据页面
- author = 通过作者 ID 或名称过滤
- search = 搜索文章,类似于 API Post v2 中的搜索
- after 和 Before = 过滤日期范围,最好在查询字符串或后端逻辑中使用 d-f-y 格式
