首页 > 解决方案 > 如何访问 /posts WordPress JSON REST API 并按 post_type 过滤?

问题描述

我在 wp_3_posts 表中有许多帖子,post_type 为“人”。这个 post_type 是使用 Admin Columns 插件创建的。

我如何检索这些?

Posts 的文档提供按类别或标签进行过滤,但 post_type 都不是。

https://developer.wordpress.org/rest-api/reference/posts/

谢谢 :]

标签: jsonwordpresswordpress-rest-api

解决方案


如果我以正确的方式解决了您的问题,您希望使用 REST API 获取自定义帖子类型的帖子。

在 wordpress 中创建自定义帖子类型时,您必须在参数中设置show_in_rest和。public

add_action( 'init', 'my_cpt' );
function my_cpt() {
    $args = array(
      'public'       => true,
      'show_in_rest' => true,
      'label'        => 'My Custom Post'
    );
    register_post_type( 'mycustompost', $args );
}

有关此的更多信息:https ://developer.wordpress.org/rest-api/extending-the-rest-api/adding-rest-api-support-for-custom-content-types/

设置好之后,您可以使用 url 中的正确参数获取帖子类型的帖子。

因此,如果您只想获取帖子,可以使用:

https://yoursite.com/wp-json/wp/v2/mycustompost?per_page=10

per_page如果您收到很多帖子,我建议将 设置为拥有控制权。

您还可以使用以下方式访问更多数据而无需额外的 HTTP 请求_embed

https://yoursite.com/wp-json/wp/v2/mycustompost?per_page=10&_embed=wp:term,wp:featuredmedia

例如,通过这个,您可以获得不同特色图像大小的分类术语和 url。


因此,您不需要获取您网站的所有帖子(和帖子类型),然后按帖子类型进行过滤,而只需获取此帖子类型的帖子即可。您可以使用全局参数进行更多过滤:

https://developer.wordpress.org/rest-api/using-the-rest-api/global-parameters/

使用 VueJS(在我看来更好的性能)这看起来像:

fetch("https://yoursite.com/wp-json/wp/v2/mycustompost?per_page=10")
        .then(response => response.json())
        .then((data => {
            this.mycustompost = data;
        }))

或者,如果使用标准 javascript,例如:

let state = {
      posts: [],
      baseUrl: 'https://yoursite.com/wp-json/wp/v2/mycustompost',
      perPage: '?per_page=10',
      wpFetchHeaders: {
        headers: {
          'Access-Control-Allow-Origin': '*',
          'Access-Control-Expose-Headers': 'x-wp-total'
        }
      }
    }

推荐阅读