Как получить доступ к / posts WordPress JSON REST API и отфильтровать по post_type? - PullRequest
0 голосов
/ 17 июня 2020

У меня есть количество сообщений в таблице wp_3_posts с post_type "people". Этот post_type создается с помощью плагина Admin Columns.

Как мне их получить?

В документации для сообщений предлагается фильтрация по категориям или тегам, но post_type не является ни одним из них.

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

Спасибо:]

1 Ответ

0 голосов
/ 17 июня 2020

Если я правильно ответил на ваш вопрос, вы хотите получать сообщения произвольного типа с помощью REST API.

Вам необходимо указать show_in_rest и public в аргументах при создании настраиваемый тип сообщения в wordpress.

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'
        }
      }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...