web-dev-qa-db-fra.com

Wordpress Limite de retour API JSON

Ceci est une question simple concernant Wordpress API/wp-json. Je recherche des données filtrées avec une certaine catégorie dans Wordpress. Mes questions sont de savoir comment puis-je contrôler la quantité de résultat qui est retourné de mon Get request ... Le retour par défaut semble renvoyer environ 11 résultats les plus récents. Existe-t-il un moyen de le faire renvoyer seulement 1 (le plus récent), ou comme 100 messages. Quel est le montant minimum et maximum que je peux retourner. Et quoi est la syntaxe. C'est la requête par défaut que j'ai:

http://thisismywebsitewherewordpresslives.com/wp-json/posts?fiter[category_name]=Some Category Name I want to query&filter[order]=ASC
14
Anthony Gawon Lee

Si vous utilisez la version 2 de l'API WordPress REST, il semble que la méthode actuelle de contrôle du nombre de résultats renvoyés soit:

website.com/wp-json/wp/v2/posts/?per_page=100

Remplacez 100 par le nombre souhaité.

Si vous utilisez un type de publication personnalisé, remplacez les publications par le type de publication personnalisé. Assurez-vous également de définir 'show_in_rest' => true lors de la configuration du type de publication personnalisé.

41
apmeyer

Ajoutez le paramètre de filtre [posts_per_page] à la requête pour limiter le nombre de résultats renvoyés par l'API.

http://thisismywebsitewherewordpresslives.com/wp-json/posts?filter[posts_per_page]=2&fiter[category_name]=Some Category Name I want to query&filter[order]=ASC

La requête ci-dessus ne devrait renvoyer que 2 résultats. La liste des paramètres de requête est présente ici https://github.com/WP-API/WP-API/blob/master/docs/routes/routes.md#retrieve-posts

12
Nithish Thomas

Comme un autre l'a dit: ( v2)

http://example.com/wp-json/wp/v2/posts?per_page=10

Mais si vous voulez obtenir plus les prochains messages : ( paged)

http://example.com/wp-json/wp/v2/posts?per_page=10&page=2

Documents: http://v2.wp-api.org/reference/posts/ (Faites défiler jusqu'à Liste des messages )

8
l2aelba

Ma recommandation ci-dessus n'est plus correcte. Vous voudrez maintenant utiliser:

website.com/wp-json/wp/v2/posts/?filter[posts_per_page]=100

Modifiez le nombre pour récupérer plus ou moins de messages. Remplacez "publications" par votre type de publication personnalisé si nécessaire et assurez-vous de définir 'show_in_rest' => true lors de l'enregistrement du type de publication personnalisé.

Remarque: Bien que la définition de la valeur posts_per_page sur -1 ait fonctionné dans les versions bêta antérieures du plugin (2.0-beta13.1), il ne semble pas fonctionner dans les versions les plus récentes. Il semble maintenant que vous devez définir une valeur dans le point de terminaison.

3
apmeyer

Actuellement, l'API impose un retour de limite de 99 postes. Le max est donc website.com/wp-json/wp/v2/posts/?&per_page=99, cela dit, il semble que vous pouvez modifier pour autoriser des messages supplémentaires. Il y a une discussion à ce sujet ici: https://github.com/WP-API/WP-API/issues/2914

3
D-Sims

Vous pouvez changer:

add_action( 'rest_YOUR_CPT_params', function($params){
    if ( isset( $params ) AND isset( $params[ 'per_page' ] ) ) {
        $params[ 'per_page' ][ 'maximum' ] = 500;
    }
    return $params;
});

Et dans l'url d'extraction, ajoutez ?per_page=500

Exemple: https://domain.pl/wp-json/wp/v2/books?per_page=500

1
Aaron Nusselbaum

Je suis surpris que personne n'ait mentionné l'utilisation des filtres natifs WordPress a créé pour des situations exactement comme celle-ci.

J'ai pu obtenir le retour d'un nombre souhaité de messages par défaut, tout en autorisant le $_GET['per_page'] param pour fonctionner comme ceci:

/**
 * Default to all posts being returned rather than the default 10 posts per
 * page. Also, do not get in the way of the native $_GET['per_page'] setting.
 * @param {int} $newDefault  The new default amount of posts to return per paginated page
 * @var {void}
 */
function setRestApiPostsPerPage($newDefault) {
    foreach (get_post_types() as $i => $postType) {
        add_filter( "rest_{$postType}_query", function ($args, $request) {
            if (! isset($_GET['per_page'])) {
                // new default to overwrite the default 10
                $args['posts_per_page'] = $newDefault; 
            }

            return $args;
        }, 15, 2);
    }
}

J'ai découvert que vous ne pouvez pas définir $args['posts_per_page'] = -1; Cela entraîne une erreur que vous pouvez voir ici.

Vous pouvez lancer n'importe quelle logique dans la fermeture/le rappel/le filtre pour définir le $args['posts_per_page'] comme vous le souhaitez.

1
domdambrogia

L'argument dans V2 est "per_page" - http://v2.wp-api.org/reference/posts/

1
Q Studio