Last active
June 30, 2020 20:31
-
-
Save kmaida/ed218a2c54f3d4f5012d8962a4275f9c to your computer and use it in GitHub Desktop.
WordPress - Custom Post Type and ACF -> REST API: add "acf" property to REST API for posts, pages, and custom post types; include the following code blocks in wp-includes/functions.php
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* Register Activities as a custom post type | |
*/ | |
function cpt_register_activities() { | |
$labels = array( | |
"name" => __( "Activities", "twentytwenty" ), | |
"singular_name" => __( "Activity", "twentytwenty" ), | |
"menu_name" => __( "Activities", "twentytwenty" ), | |
"all_items" => __( "All Activities", "twentytwenty" ), | |
"add_new" => __( "Add New Activity", "twentytwenty" ), | |
"add_new_item" => __( "Add New Activity", "twentytwenty" ), | |
"edit_item" => __( "Edit Activity", "twentytwenty" ), | |
"new_item" => __( "New Activity", "twentytwenty" ), | |
"view_item" => __( "View Activity", "twentytwenty" ), | |
"view_items" => __( "View Activities", "twentytwenty" ), | |
"search_items" => __( "Search Activities", "twentytwenty" ), | |
"not_found" => __( "No Activities found", "twentytwenty" ), | |
"not_found_in_trash" => __( "No Activities found in trash", "twentytwenty" ), | |
"featured_image" => __( "Featured image for this activity", "twentytwenty" ), | |
"set_featured_image" => __( "Set featured image for this activity", "twentytwenty" ), | |
"remove_featured_image" => __( "Remove featured image for this activity", "twentytwenty" ), | |
"use_featured_image" => __( "Use featured image for this activity", "twentytwenty" ), | |
"archives" => __( "Activity archives", "twentytwenty" ), | |
"insert_into_item" => __( "Insert into activity", "twentytwenty" ), | |
"uploaded_to_this_item" => __( "Uploaded to this activity", "twentytwenty" ), | |
"filter_items_list" => __( "Filter activities list", "twentytwenty" ), | |
"items_list_navigation" => __( "Activities list navigation", "twentytwenty" ), | |
"items_list" => __( "Activities list", "twentytwenty" ), | |
"attributes" => __( "Activities Attributes", "twentytwenty" ), | |
"name_admin_bar" => __( "Activity", "twentytwenty" ), | |
"item_published" => __( "Activity published", "twentytwenty" ), | |
"item_published_privately" => __( "Activity published privately", "twentytwenty" ), | |
"item_reverted_to_draft" => __( "Activity reverted to draft", "twentytwenty" ), | |
"item_scheduled" => __( "Activity scheduled", "twentytwenty" ), | |
"item_updated" => __( "Activity updated", "twentytwenty" ) | |
); | |
$args = array( | |
"labels" => $labels, | |
"description" => "Add an ambassador activity / contribution.", | |
"public" => true, | |
"publicly_queryable" => true, | |
"show_ui" => true, | |
"show_in_rest" => true, | |
"rest_base" => "activities", | |
"rest_controller_class" => "WP_REST_Posts_Controller", | |
"has_archive" => false, | |
"delete_with_user" => false, | |
"exclude_from_search" => false, | |
"hierarchical" => false, | |
"rewrite" => array( "slug" => "activity" ), | |
"query_var" => "activities", | |
"menu_position" => 5, | |
"menu_icon" => "dashicons-megaphone", | |
"supports" => array( "title", "custom-fields" ) | |
); | |
register_post_type( "activities", $args ); | |
} | |
add_action( 'init', 'cpt_register_activities', 0 ); | |
/** | |
* Add "acf" property to REST API get and put | |
* To support post, need to use https://github.com/airesvsg/acf-to-rest-api | |
* From https://stackoverflow.com/questions/56473929/how-to-expose-all-the-acf-fields-to-wordpress-rest-api-in-both-pages-and-custom | |
*/ | |
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', | |
'update_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' ); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment