programing

Wordpress REST API V2가 모든 게시물을 반환합니다.

madecode 2023. 4. 1. 23:18
반응형

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를 사용하고 있습니다.

페이지 번호 매기기 대신 이것을 사용해 보세요.제 사이트의 모든 게시물이 반환됩니다.

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

스니펫은 투고에 도움이 됩니다.

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;
}

참고: standard는 사용할 수 없습니다.per_page요청 인수(100보다 큰 값) -wp api는 즉시 에러와 함께 응답합니다(따라서 후크는 도움이 되지 않습니다).위 코드에 있습니다.custom_per_page(다른 단어를 사용할 수 있습니다).

분류법에 대한 유사한 필터:

예:

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=100100까지 일했어요.

벨로우 어프로치는 나에게 효과가 있었다.79개의 246개의 투고가 있는 사이트에서 투고를 취득할 수 있었습니다.페이지 번호 매개 변수를 사용했습니다.루프 내에서는 1부터 TotalPages를 사용할 수 있습니다.문서에 대한 링크를 참조하십시오.

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

per_page = 100 : 페이지당 최대 100개의 게시물을 가져옵니다.

page = 793 : 페이지당 100개의 투고가 있는 793페이지가 있음을 의미합니다.마지막 페이지에는 46개의 게시물만 있었다

루프를 선택한 언어로 사용할 수 있습니다.

프로토콜을 준수하는 보다 간단한 방법은 모든 응답을 순서대로 수집하고 단일 응답을 수행하는 것입니다. setState()call. 다음과 같습니다. (가독성을 위해 오류 처리 생략)

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 });
    });
}

WordPress 4.9.6에서는

/* 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 );

도움이 됐으면 좋겠는데, 난 악리를 쓰고 있지만, 다른 것도 마찬가지야.

async multipleRequests() {
                let npage = 1;
                let url = `/sites/mysite.com/wp-json/wp/v2/posts?page=${npage}&per_page=10`;
                let { data } = await axios.get(url);
                let tempdata = data;  

                while (tempdata.length > 0) {
                    npage++;
                    let url = `/sites/mysyte.com/wp-json/wp/v2/media?page=${npage}&per_page=10`;
                    let { data } = await axios.get(url);                    
                    tempdata = data;
                }
            }

다른 매개변수를 사용하여 이 작업을 수행할 계획인 경우 카테고리 등을 추가할 수도 있습니다.EG:

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

100개 이상의 투고나 용어(태그, 카테고리)를 얻을 수 있습니다.
하면 됩니다.rest_{$this->post_type}_query (투고용)rest_{$this->taxonomy}_query건을만만만만만만
하지만 알아둬야 할 건 합격하는 건 불가능하다는 거야per_page의 arg 에 있는 에 있는 아르그GET100 을 100 100 100 을 100 100 100 100 。 WP API는 즉시 에러를 발생시킵니다(훅은 도움이 되지 않습니다. per_page must be between 1 (inclusive) and 100 (inclusive)(400 http 'syslog').
하려면 , 을 .per pageget and 。이에 이 합니다.그 후에 후크에서 이 값을 추적합니다.
암호는 다음과 같습니다.

투고용

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;
}

이렇게.s976_per_page등 ) (500, 99999 등)GET탁한한다


's976_per_page' 입니다.이렇게 '아주먹다', '주먹다', '주먹다', '주먹이다.
이것이 ALL할 수 있을까요할 수 요?또한 상태의 세트/서브셋만 취득할 수도 있습니다.
감사합니다.
JMB

javascript를 사용한 이 솔루션은 나에게 효과가 있었다.

서류상으로는 최대 100개까지 받을 수 있다.필요한 경우 오프셋과 여러 요청을 사용합니다.예:

$i              = 0;
$check_for_more = true;

while ( $check_for_more ) {
    $offset  = $i * 100;
    $url     = network_site_url( "/wp-json/wp/v2/office?order=asc&orderby=title&per_page=100&offset={$offset}" );
    $offices = json_decode( wp_remote_retrieve_body( wp_remote_get( $url ) ) );

    if ( $offices ) {
        if ( count( $offices ) < 100 ) {
            $check_for_more = false;
        }
        foreach ( $offices as $key => $office ) {
            // Do what you want
        }
    } else {
        $check_for_more = false;
    }
    $i ++;
}

이것을 사용해 보세요.이거는 정상적으로 동작합니다(WP 5.8.1).

add_filter( 'rest_{YOU_CPT}_collection_params', function ( $params, WP_Post_Type $post_type ) {
    if ( '{YOU_CPT}' === $post_type->name && isset( $params['per_page'] ) ) {
        $params['per_page']['maximum'] = PHP_INT_MAX;
    }
    return $params;
}, 10, 2 );

언급URL : https://stackoverflow.com/questions/35728943/wordpress-rest-api-v2-return-all-posts

반응형