web-dev-qa-db-ja.com

Wordpress REST API V2はすべての投稿を返します

を使用してすべての投稿(またはCPT)を取得する機能がありません

example.com/wp-json/wp/v2/country/?per_page=-1

または任意の類似。ドキュメントには、これと同じくらいの情報があります:

per_page:結果セットで返されるアイテムの最大数。

デフォルト:10

そして 別の質問 per_pageについて、許容範囲は1〜100であることがわかります。

私の場合、取得する必要がある投稿の数は限られていますが、約200〜300になります。ページごとにすべてのページを取得して結合する以外に、それらをすべて取得する回避策はありますか?

問題がある場合の追加情報:angular.jsを使用しています

11
Jerry

代わりにページネーションのためにこれを試してください。それは私のサイト上のすべての投稿を返します。

http://example.com/wp-json/wp/v2/posts/?filter[category_name]=country&filter[posts_per_page]=-1

そのように入力すると100を超えるリターンが得られ、111などで上限を設定できます。http://example.com/wp-json/wp/v2/posts/?filter[category_name]=country&filter[posts_per_page]=111

現代のWPシナリオの場合、次の関数を使用すると、99を超えるリターンを与えることができます。

add_filter( 'rest_post_collection_params', 'big_json_change_post_per_page', 10, 1 );
function big_json_change_post_per_page( $params ) {
    if ( isset( $params['per_page'] ) ) {
        $params['per_page']['maximum'] = 200;
    }
    return $params;
}
9
Tom Woodward

WP 4.7の時点で、次のフィルターにフックすることにより、WP REST APIリクエストの上限を増やすことができます。

rest_{$this->post_type}_collection_params

このスニペットは、postsのトリックを行う必要があります。

add_filter( 'rest_post_query', 'se35728943_change_post_per_page', 10, 2 );

function se35728943_change_post_per_page( $args, $request ) {
    $max = max( (int) $request->get_param( 'custom_per_page' ), 200 );
    $args['posts_per_page'] = $max;    
    return $args;
}

注:リクエストで標準のper_page引数(100以上の値)を使用することはできません-wp apiはすぐにエラーで応答します(したがって、フックは役に立ちません)。上記のコードでは、custom_per_pageを使用しています(別のWordを使用できます)。

taxonomiesの同様のフィルター: rest_{$this->taxonomy}_query

例:

add_filter( 'rest_tags_query', 'se35728943_change_terms_per_page', 2, 10 );

function se35728943_change_terms_per_page( $prepared_args, $request ){
    $max = max( 200, (int) $request->get_param( 'custom_per_page' ) );

    $prepared_args['number'] = $max;
    return $prepared_args;
}
7
jgangso

その構文で10を超えることはできませんでした。試してみましたhttp://example.com/wp-json/wp/v2/posts?per_page=100そして最大100まで働きました。

5
brunouno

怒鳴るアプローチは私のために働いた。 79 246件の投稿があるサイトから投稿を取得できました。 pagination parameters を使用しました。ループ内で、1からTotalPagesが利用可能です。 docのリンクを参照してください。

http://mydomain/wp-json/wp/v2/posts?_embed&per_page=100&page=793

per_page= 100:1ページあたり最大100件の投稿を取得できることを意味します

page= 793:793ページあり、1ページに100投稿あります。最後のページには46件の投稿しかありませんでした

その後、選択した言語でループを使用できます。

2

WordPress 4.9.6では、 rest_{$this->post_type}_query

/* change amount of posts returned by REST API to 100 */
function rest_posts_per_page( $args, $request ) {
    $max = max( (int)$request->get_param( 'per_page' ), 100 );
    $args['posts_per_page'] = $max;
    return $args;
}
add_filter( 'rest_post_query', 'rest_posts_per_page', 10, 2 );
1
Mr. Me

他のパラメーターを使用してこれを行うことを計画している場合は、カテゴリーなども追加できます。例えば:

https://www.website.com/wp-json/wp/v2/posts?categories=61&per_page=100
0
vr_driver

プロトコルに準拠するより簡単な方法は、all応答を順番に収集し、single setState()呼び出しを実行することです。次のように(読みやすくするためにエラー処理は省略されています)

componentDidMount(){

var uri = "http://your-server";
var totalPages = 0;
var allResults = [];

fetch(uri)
.then(response => {
  totalPages = response.headers.get('X-WP-TotalPages');
  return response.json()})
.then(results => {
  allResults = results;
  //console.log('Got results from server', results.length); 
  for (let i = 2; i <= totalPages ; i++){
    fetch(uri + "?page=" + i)
    .then(response => {return response.json()})
    .then( moreresults => {
      allResults = allResults.concat( moreresults ); 
     });
  }
  this.setState({responses: allResults });
});

}

0
Mulli

100を超える投稿または用語(タグ、カテゴリ)を取得することは本当に可能です。
用語には_rest_{$this->post_type}_query_フック(投稿用)または_rest_{$this->taxonomy}_query_フックを使用する必要があります。
ただし、知っておく必要があります 100以上の値を持つGETリクエストで_per_page_ argを渡すことは不可能です。 _WP API_はすぐにエラーをスローします(フックは役に立ちません):per_page must be between 1 (inclusive) and 100 (inclusive)(400 HTTPステータス)。
この問題を回避するには、別のget引数に_per page_値を渡す必要があります。この後、フックでこの値をトレースします。
したがって、コードは次のとおりです。

投稿用

_add_filter( 'rest_post_query', 's976_rest_post_per_page', 2, 10 );
function s976_rest_post_per_page( array $args, WP_REST_Request $request ) {
    $post_per_page = $request->get_param('s976_per_page') ? $request->get_param('s976_per_page') : 10;
    $args['posts_per_page'] = $post_per_page;
    return $args;
}
_

用語について

_add_filter( 'rest_category_query', 's976_rest_cats_per_page', 2, 10 );
function s976_rest_cats_per_page( array $prepared_args, WP_REST_Request $request ){
    $cats_per_page = $request->get_param('s976_per_page') ? $request->get_param('s976_per_page') : 10;
    $prepared_args['number'] = $cats_per_page;
    return $prepared_args;
}
_

もちろん、これが機能するには、GETリクエストで_s976_per_page_(500、99999などの任意の値)引数を渡す必要があります。

0
Shimon S