を使用してすべての投稿(またはCPT)を取得する機能がありません
example.com/wp-json/wp/v2/country/?per_page=-1
または任意の類似。ドキュメントには、これと同じくらいの情報があります:
per_page:結果セットで返されるアイテムの最大数。
デフォルト:10
そして 別の質問 per_pageについて、許容範囲は1〜100であることがわかります。
私の場合、取得する必要がある投稿の数は限られていますが、約200〜300になります。ページごとにすべてのページを取得して結合する以外に、それらをすべて取得する回避策はありますか?
問題がある場合の追加情報:angular.jsを使用しています
代わりにページネーションのためにこれを試してください。それは私のサイト上のすべての投稿を返します。
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;
}
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;
}
その構文で10を超えることはできませんでした。試してみましたhttp://example.com/wp-json/wp/v2/posts?per_page=100
そして最大100まで働きました。
怒鳴るアプローチは私のために働いた。 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件の投稿しかありませんでした
その後、選択した言語でループを使用できます。
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 );
他のパラメーターを使用してこれを行うことを計画している場合は、カテゴリーなども追加できます。例えば:
https://www.website.com/wp-json/wp/v2/posts?categories=61&per_page=100
プロトコルに準拠するより簡単な方法は、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 });
});
}
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などの任意の値)引数を渡す必要があります。