Por que o per_page não funciona com categorias na API do WP?

4

Para começar, pesquisei várias questões e documentos, mas parece que com o WordPress ' v2 muitas das perguntas antigas não são mais válidas. O que estou tentando fazer é obter todas as postagens ou um post singular de uma categoria no Postman, em vez das 10 postagens comuns retornadas sem ter que modificar a API em functions.php.

tldr

Comecei referenciando o Manual da API REST e revisando o schema Eu vi categories e posso retornar as 10 últimas categorias usando:

http://foobar.com/wp-json/wp/v2/posts/categories_name=hello

referenciando os argumentos vejo per_page , então tentei:

http://foobar.com/wp-json/wp/v2/posts/categories_name=hello?per_page=‌​1

e ele retorna 10 postagens da categoria hello , então modifiquei e tentei:

http://foobar.com/wp-json/wp/v2/posts/categories_name=hello&per_page=‌​1

e recebo um erro:

  

{       "code": "rest_invalid_param",       "message": "Parâmetro inválido (s): per_page",       "data": {           "status": 400,           "params": {               "per_page": "per_page não é do tipo inteiro."           }       }}

Pesquisando no Google I veja Como recuperar uma lista de categorias / tag na API REST do Wordpress , mas as respostas são baseadas em v1 .

Tentando o limite de retorno da JSON da API do Wordpress eu uso:

http://foobar.com/wp-json/wp/v2/posts/?per_page=‌​1

e eu recebo um post singular, então modifiquei minha tentativa de:

http://foobar.com/wp-json/wp/v2/posts/?per_page=‌​1$categories_name=hello

Ele ignora o tipo de categoria e retorna a postagem mais recente. Ler Obtenha mais do que 10 postagens em uma categoria específica com a API do WordPress Peguei o ID de uma categoria (4) depois de usar:

http://foobar.com/wp-json/wp/v2/categories

então codificado:

http://foobar.com/wp-json/wp/v2/posts/?categories=4&per_page=‌​1

e eu recebo:

  

{       "code": "rest_invalid_param",       "message": "Parâmetro inválido (s): per_page",       "data": {           "status": 400,           "params": {               "per_page": "per_page não é do tipo inteiro."           }       }}

Eu pensei que poderia usar -1 semelhante ao desenvolvimento de um tema, mas recebo um erro.

Outras referências que eu leio são:

Depois de analisar a documentação em Paginação , parece para trabalhar somente com o post e não com category . Só posso conseguir mais de 10 postagens se eu usar /wp-json/wp/v2/posts?per_page=20 também.

Pergunta

Ao chamar a API do WP de um site, como posso controlar o per_page de retorno de uma categoria, seja uma postagem ou todas as postagens?

    
por DᴀʀᴛʜVᴀᴅᴇʀ 17.07.2018 / 22:55

2 respostas

1

Após algumas horas tentando diferentes permutações de como obter um retorno sobre as categorias, encontrei a minha resposta. Para estabelecer a listagem de categorias associadas a post use:

/wp-json/wp/v2/categories/

Eu precisava de uma categoria específica e o id dessa categoria era 4 e o slug era chamado de foobar .

Para obter uma postagem associada à categoria foobar , tive que usar:

/wp-json/wp/v2/posts?categories=4&per_page=1

Para receber 100 postagens associadas à categoria foobar que usei:

/wp-json/wp/v2/posts?categories=4&per_page=100

e como eu descobri e também foi mencionado na resposta , minha lógica de usar -1 foi incorreto, você só pode usar 1 a 100. Como foi discutido no comentário sobre o que fazer se houver mais de 100 postagens, bem, você pode chamar a página usando offset e descobri que sob a documentação Pagination :

/wp-json/wp/v2/posts?categories=4&offset=10&per_page=1

Assim, para obter mais de 100, você criaria um loop em qualquer idioma desejado e o enviaria para um arquivo. Para ajudar com o looping em /wp-json/wp/v2/categories/ e quando você faz referência à categoria, é possível fazer referência à contagem total em count , que está abaixo de id .

    
por DᴀʀᴛʜVᴀᴅᴇʀ 18.07.2018 / 13:34
2

Praticamente todos os URLs que você está usando são inválidos de alguma forma:

http://foobar.com/wp-json/wp/v2/posts/categories_name=hello

categories_name não é um argumento válido para listar publicações, e mesmo que estava faltando a parte ? da string de consulta.

http://foobar.com/wp-json/wp/v2/posts/categories_name=hello?per_page=‌​1

Este também está faltando o ? . Os parâmetros de consulta em um URL, que a API usa para seus argumentos, precisam começar com ? , com & para parâmetros adicionais. Uma string de consulta formatada corretamente é assim:

http://domain.com/path/?argument=value&argument2=value2

Então esse aqui:

http://foobar.com/wp-json/wp/v2/posts/categories_name=hello&per_page=‌​1

Também está faltando o ? , mas você usou & corretamente desta vez (embora ainda esteja usando o argumento categories_name inválido).

Este aqui:

http://foobar.com/wp-json/wp/v2/posts/?per_page=‌​1$categories_name=hello

Está usando um $ por algum motivo. Essa não é uma maneira válida de separar parâmetros em uma string de consulta (e ainda usar o argumento categories_name inválido).

Este é correto:

http://foobar.com/wp-json/wp/v2/posts/?categories=4&per_page=‌​1

Mas com base no seu comentário:

  

Eu pensei que poderia usar -1 semelhante ao desenvolvimento de um   tema, mas eu recebo um erro.

Parece que você realmente tentou:

http://foobar.com/wp-json/wp/v2/posts/?categories=4&per_page=‌​-1

Que não funcionará, porque -1 é um valor inválido. Você só pode recuperar entre 1 e 100 resultados com a API.

    
por Jacob Peattie 18.07.2018 / 04:14