ACF, Categories and Featured Image for a custom post / relationship on WP REST A
-
I’m building a Gatsby site that sources from a WP back end with GraphQL. I’m having issues preparing my data to send over through the API.
I have a custom post called case studies. These case studies have categories, a featured image and several ACF fields that I need to be able to access through REST. I’ve created a custom REST API endpoint for my case studies as such:
/************************************************ * Case Study REST API Endpoint * *************************************************/ function caseStudyEndpoint( $request_data ) { // setup query argument $args = array( 'post_type' => 'case-study', 'posts_per_page' => -1 ); // get posts $posts = get_posts($args); // add custom field data to posts array foreach ($posts as $key => $post) { $posts[$key]->acf = get_fields($post->ID); $posts[$key]->link = get_permalink($post->ID); $posts[$key]->image = get_the_post_thumbnail_url($post->ID); $posts[$key]->categories = wp_get_post_categories($post->ID); } return $posts; } // register the endpoint; add_action( 'rest_api_init', function () { register_rest_route( 'case_study_endpoint/v2', '/case-studies/', array( 'methods' => 'GET', 'callback' => 'caseStudyEndpoint', ) ); });
Through this endpoint I can easily access all the fields, including featured image, ACF and categories.
In addition, I have an ACF block called Related Case Studies, which has a number of relationship fields that link to case studies. From that block, I can also retrieve the ACF for the related case study, as well as the categories, image and such. I’m able to accomplish this thanks to this recursive snippet.
/** * ACF, Image and Category Data in Post Object Response */ $types = ['post', 'page', 'case-study']; foreach ( $types as $type ) { add_filter( 'acf/rest_api/'.$type.'/get_fields', function( $data, $response ) use ( $types ) { if ( $response instanceof WP_REST_Response ) { $data = $response->get_data(); } array_walk_recursive( $data, 'deepIncludeFields', $types ); return $data; } , 10, 3 ); } function deepIncludeFields( &$item, $key, $postTypes ) { if ( isset( $item->post_type ) && in_array( $item->post_type, $postTypes ) ) { $item->acf = get_fields( $item->ID ); $item->image = get_the_post_thumbnail_url($item->ID); $item->categories = wp_get_post_categories($item->ID, array( 'fields' => 'names' )); } }
So I am covered in being able to retrieve all my data for a case study by accessing the Case Study endpoint and I’m also able to retrieve all the data recursively from a relationship field while using my regular WordPressPage endpoint.
However, within the case studies themselves I am also hoping to have the Related Case Studies block, and to be able to access the data for other case studies recursively from there as well. But this isn’t working.
I know I’m very close, and the solution might be to use a different WP filter for my recursive ACF function, or something. Basically the ACF Recursion is missing within the Case Study Custom post endpoint.
Any thoughts?
- The topic ‘ACF, Categories and Featured Image for a custom post / relationship on WP REST A’ is closed to new replies.