phpwordpressadvanced-custom-fieldswordpress-rest-api

How to expose all the ACF fields to Wordpress REST API in both pages and custom postypes


I want to expose all the ACF fields that belong to a page or custom post type to the WordPress REST API in order to do some API calls through javascript.

The final expected result would be all the ACF fields inside an ACF object that you can easily access.


Solution

  • Through the following code, you will be able to expose page and your custom postypes ACF fields in the wordpress REST API and access them inside the ACF object.

    You can obviously customise the postypes to exclude or to include in the arrays: $postypes_to_exclude and $extra_postypes_to_include.

    function create_ACF_meta_in_REST() {
        $postypes_to_exclude = ['acf-field-group','acf-field'];
        $extra_postypes_to_include = ["page"];
        $post_types = array_diff(get_post_types(["_builtin" => false], 'names'),$postypes_to_exclude);
    
        array_push($post_types, $extra_postypes_to_include);
    
        foreach ($post_types as $post_type) {
            register_rest_field( $post_type, 'ACF', [
                'get_callback'    => 'expose_ACF_fields',
                'schema'          => null,
           ]
         );
        }
    
    }
    
    function expose_ACF_fields( $object ) {
        $ID = $object['id'];
        return get_fields($ID);
    }
    
    add_action( 'rest_api_init', 'create_ACF_meta_in_REST' );
    

    Here's the gist for reference: https://gist.github.com/MelMacaluso/6c4cb3db5ac87894f66a456ab8615f10