API REST di WordPress V2: come ottenere l'elenco di tutti i post?

28 gen 2021, 02:02:31
Visualizzazioni: 15.5K
Voti: 0

Ho bisogno di ottenere un elenco di tutti i post in una determinata categoria. Il numero di post supera i 100. Non mi serve il contenuto del post, mi servono solo l'ID e lo slug.

https://example.com/wp-json/wp/v2/posts/ restituisce solo 10 post con il contenuto.

È possibile ottenere tutti i post senza il contenuto?

4
Commenti

Paginazione! Devi richiedere la seconda pagina di dati, ecc., è documentato nella documentazione ufficiale con esempi su wordpress.org

Tom J Nowell Tom J Nowell
28 gen 2021 02:36:18

Sì. Ma in questo caso, ottengo anche il contenuto dei post. Non ho bisogno di così tanti dati, non ho bisogno di scaricare tutto il contenuto dei post. Mi servono solo id e slug. Inoltre, in questo caso, devo generare diverse query. È possibile ottenere meno dati (solo la lista, nessun contenuto) in una singola query?

Andrey Epifantsev Andrey Epifantsev
28 gen 2021 05:12:16

Capisco, sarebbe meglio porre 2 domande come 2 domande separate piuttosto che unirle, riduce la probabilità di una risposta in quanto per postare una soluzione dovresti conoscere la risposta ad entrambe le domande. C'è anche un'altissima probabilità che la domanda sulla paginazione sia già stata posta e risposta sul sito. E la politica di 1 domanda per domanda. Domande facili da capire, focalizzate e chiare ottengono più upvote, visibilità, visualizzazioni e risposte

Tom J Nowell Tom J Nowell
28 gen 2021 13:00:09
Tutte le risposte alla domanda 2
0

Di default e utilizzando gli hook e le API disponibili nel core, non puoi avere più di 100 elementi per risposta sull'API REST di WordPress per motivi di performance. Per la seconda parte della domanda, puoi rimuovere alcuni campi dalla risposta utilizzando il parametro _fields nella tua richiesta come puoi vedere negli esempi del manuale:

    // opzione a: utilizzando nomi di campi separati da virgola.
    https://example.com/wp-json/wp/v2/posts/?_fields=author,id,excerpt,title,link

    // opzione b: utilizzando la sintassi ad array.
    https://example.com/wp-json//wp/v2/posts?_fields[]=author&_fields[]=id&_fields[]=excerpt&_fields[]=title&_fields[]=link

E teoricamente, se sei il proprietario del sito, potresti rimuovere campi dalla risposta dell'API utilizzando il filtro dinamico rest_prepare_{$this->post_type} per i tipi di post che vuoi modificare.

if(!function_exists('wpse_382314_post_filter_data')) :
    function wpse_382314_post_filter_data($response, $post) {
        $response->data['post_title'] = '';
        $response->data['post_content'] = '';
    }
}

add_filter('rest_prepare_post', 'wpse_382314_post_filter_data', 10, 3);
28 gen 2021 06:52:17
0

Prima di tutto, per ottenere più di 10 post, tutto ciò che devi fare è fornire il parametro per_page.

https://example.com/wp-json/wp/v2/posts/?per_page=100

Ma sì, a volte potrebbero esserci migliaia di post, in quel caso ovviamente non è una grande idea ottenere tutto in una singola richiesta REST API. Possiamo combinare due richieste utilizzando sia il parametro per_page che page,

https://example.com/wp-json/wp/v2/posts/?per_page=100&page=1
https://example.com/wp-json/wp/v2/posts/?per_page=100&page=2

oppure puoi anche trovare l'esempio con PHP e WordPress HTTP API qui: https://rudrastyh.com/wordpress/rest-api-get-posts.html#parameters

27 mar 2024 06:02:55