使用WordPress API获取所有帖子(包括使用自定义帖子类型的帖子

时间:2018-03-21 作者:grazianodev

通过Wordpress API,我们可以使用以下请求获取默认“post”类型的所有帖子:

http://example.com/wp-json/wp/v2/posts
假设已创建“books”和“movies”自定义帖子类型,我们可以通过以下请求获取每个自定义帖子类型中的所有帖子:

http://example.com/wp-json/custom/v1/books
http://example.com/wp-json/custom/v1/movies
是否有类似的请求可以获得上述所有帖子,即使用默认“post”帖子类型以及使用“book”和“movies”自定义帖子类型的帖子?

1 个回复
最合适的回答,由SO网友:grazianodev 整理而成

虽然我希望有一个默认路径可以获取所有帖子类型的所有帖子,但我最终还是像在对我的问题的评论中建议的那样扩展了API。显然,没有。

所以我的解决方案是:

add_action( \'rest_api_init\', \'custom_api_get_all_posts\' );   

function custom_api_get_all_posts() {
    register_rest_route( \'custom/v1\', \'/all-posts\', array(
        \'methods\' => \'GET\',
        \'callback\' => \'custom_api_get_all_posts_callback\'
    ));
}

function custom_api_get_all_posts_callback( $request ) {
    // Initialize the array that will receive the posts\' data. 
    $posts_data = array();
    // Receive and set the page parameter from the $request for pagination purposes
    $paged = $request->get_param( \'page\' );
    $paged = ( isset( $paged ) || ! ( empty( $paged ) ) ) ? $paged : 1; 
    // Get the posts using the \'post\' and \'news\' post types
    $posts = get_posts( array(
            \'paged\' => $paged,
            \'post__not_in\' => get_option( \'sticky_posts\' ),
            \'posts_per_page\' => 10,            
            \'post_type\' => array( \'post\', \'books\', \'movies\' ) // This is the line that allows to fetch multiple post types. 
        )
    ); 
    // Loop through the posts and push the desired data to the array we\'ve initialized earlier in the form of an object
    foreach( $posts as $post ) {
        $id = $post->ID; 
        $post_thumbnail = ( has_post_thumbnail( $id ) ) ? get_the_post_thumbnail_url( $id ) : null;

        $posts_data[] = (object) array( 
            \'id\' => $id, 
            \'slug\' => $post->post_name, 
            \'type\' => $post->post_type,
            \'title\' => $post->post_title,
            \'featured_img_src\' => $post_thumbnail
        );
    }                  
    return $posts_data;                   
} 
http请求如下所示:

http://example.com/wp-json/custom/v1/all-posts
或者,如果您的目标是一个特定的结果页面,如下所示:

http://example.com/wp-json/custom/v1/all-posts?page=2

结束

相关推荐

WordPress重写API调用未创建新规则

我知道关于重写规则不能正常工作的查询非常常见,但在我的情况下,实际上我无法首先创建规则。我需要创建一个插件,将加载到许多网站,并为每个网站提供一些常见的功能。它将提供的功能之一是创建这些站点通用的重写规则。此时,我将测试示例缩减为以下内容:运行apache 2.4的Debian服务器。x、 php 5.6.3x,wordpress 4.9.4,使用mysql数据库。wordpress安装是源代码的一个干净的解压缩副本,没有启用插件。它刚刚完成了初始设置。apache vhost被设置为允许所有版本,但这里