web-dev-qa-db-fra.com

Récupérer toutes les publications (y compris celles utilisant un type de publication personnalisé) avec l'API Wordpress

Avec l'API Wordpress, nous pouvons utiliser la requête suivante pour obtenir toutes les publications du type par défaut "post":

http://example.com/wp-json/wp/v2/posts

En supposant que les types de publication personnalisés "livres" et "films" aient été créés, nous pouvons obtenir toutes les publications de chaque type de publication personnalisée avec les demandes suivantes:

http://example.com/wp-json/custom/v1/books
http://example.com/wp-json/custom/v1/movies

Existe-t-il une demande similaire qui peut être effectuée pour obtenir tous les articles ci-dessus, c'est-à-dire ceux qui utilisent le type d'article "post" par défaut, ainsi que ceux qui utilisent les types d'envoi "livres" et "films"?

5
grazianodev

J'ai fini par étendre l'API comme suggéré dans les commentaires de ma question, bien que j'espérais qu'il y avait une route par défaut qui récupérait toutes les publications de tous les types de publication. Apparemment, il n'y en a pas.

Alors voici ma solution:

add_action( 'rest_api_init', 'custom_api_get_all_posts' );   

function custom_api_get_all_posts() {
    register_rest_route( 'custom/v1', '/all-posts', array(
        'methods' => 'GET',
        'callback' => 'custom_api_get_all_posts_callback'
    ));
}

function custom_api_get_all_posts_callback( $request ) {
    // Initialize the array that will receive the posts' data. 
    $posts_data = array();
    // Receive and set the page parameter from the $request for pagination purposes
    $paged = $request->get_param( 'page' );
    $paged = ( isset( $paged ) || ! ( empty( $paged ) ) ) ? $paged : 1; 
    // Get the posts using the 'post' and 'news' post types
    $posts = get_posts( array(
            'paged' => $paged,
            'post__not_in' => get_option( 'sticky_posts' ),
            'posts_per_page' => 10,            
            'post_type' => array( 'post', 'books', 'movies' ) // This is the line that allows to fetch multiple post types. 
        )
    ); 
    // Loop through the posts and Push the desired data to the array we've initialized earlier in the form of an object
    foreach( $posts as $post ) {
        $id = $post->ID; 
        $post_thumbnail = ( has_post_thumbnail( $id ) ) ? get_the_post_thumbnail_url( $id ) : null;

        $posts_data[] = (object) array( 
            'id' => $id, 
            'slug' => $post->post_name, 
            'type' => $post->post_type,
            'title' => $post->post_title,
            'featured_img_src' => $post_thumbnail
        );
    }                  
    return $posts_data;                   
} 

La requête http ressemblera à ceci:

http://example.com/wp-json/custom/v1/all-posts

ou, si vous ciblez une page spécifique de résultats, comme ceci:

http://example.com/wp-json/custom/v1/all-posts?page=2
5
grazianodev