it-swarm.com.de

Abrufen aller Posts (einschließlich solcher, die einen benutzerdefinierten Post-Typ verwenden) mit der Wordpress-API

Mit der Wordpress-API können wir die folgende Anforderung verwenden, um alle Beiträge des Standardtyps "Beitrag" abzurufen:

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

Angenommen, die benutzerdefinierten Beitragstypen "Bücher" und "Filme" wurden erstellt, können wir alle Beiträge in jedem benutzerdefinierten Beitragstyp mit den folgenden Anforderungen abrufen:

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

Gibt es eine ähnliche Anfrage, die gestellt werden kann, um alle oben genannten Beiträge zu erhalten, dh diejenigen, die den Standard-Beitragstyp "Beitrag" verwenden, sowie diejenigen, die die benutzerdefinierten Beitragstypen "Bücher" und "Filme" verwenden?

5
grazianodev

Am Ende habe ich die API wie in den Kommentaren zu meiner Frage vorgeschlagen erweitert, obwohl ich gehofft hatte, dass es eine Standardroute gibt, die alle Beiträge aller Beitragstypen abruft. Anscheinend gibt es nicht.

Also hier ist meine Lösung:

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

Die http-Anfrage sieht folgendermaßen aus:

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

oder, wenn Sie auf eine bestimmte Ergebnisseite abzielen, wie folgt:

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