airesvsg/acf-to-rest-api

Exposes Advanced Custom Fields Endpoints in the WordPress REST API

PHP

1,360

54 commits

updated Dec 31, 2024

See the code

README

ACF to REST API

Exposes Advanced Custom Fields Endpoints in the WordPress REST API

https://wordpress.org/plugins/acf-to-rest-api/

Installation

  1. Copy the acf-to-rest-api folder into your wp-content/plugins folder
  2. Activate the ACF to REST API plugin via the plugin admin page

Endpoints

EndpointREADABLEEDITABLE
/wp-json/acf/v3/posts πŸ†•βœ…βŒ
/wp-json/acf/v3/posts/{id}βœ…βœ…
/wp-json/acf/v3/posts/{id}/{field-name}βœ…βœ…
/wp-json/acf/v3/pages πŸ†•βœ…βŒ
/wp-json/acf/v3/pages/{id}βœ…βœ…
/wp-json/acf/v3/pages/{id}/{field-name}βœ…βœ…
/wp-json/acf/v3/users πŸ†•βœ…βŒ
/wp-json/acf/v3/users/{id}βœ…βœ…
/wp-json/acf/v3/users/{id}/{field-name}βœ…βœ…
/wp-json/acf/v3/{taxonomy} πŸ†•βœ…βŒ
/wp-json/acf/v3/{taxonomy}/{id} πŸ†•βœ…βœ…
/wp-json/acf/v3/{taxonomy}/{id}/{field-name} πŸ†•βœ…βœ…
/wp-json/acf/v3/comments πŸ†•βœ…βŒ
/wp-json/acf/v3/comments/{id}βœ…βœ…
/wp-json/acf/v3/comments/{id}/{field-name}βœ…βœ…
/wp-json/acf/v3/media πŸ†•βœ…βŒ
/wp-json/acf/v3/media/{id}βœ…βœ…
/wp-json/acf/v3/media/{id}/{field-name}βœ…βœ…
/wp-json/acf/v3/{post-type} πŸ†•βœ…βŒ
/wp-json/acf/v3/{post-type}/{id} πŸ†•βœ…βœ…
/wp-json/acf/v3/{post-type}/{id}/{field-name} πŸ†•βœ…βœ…
/wp-json/acf/v3/options/{id} πŸ†•βœ…βœ…
/wp-json/acf/v3/options/{id}/{field-name} πŸ†•βœ…βœ…

Filters

FilterArgument(s)
acf/rest_api/idmixed ( string, integer, boolean ) $id
string $type πŸ†•
string $controller πŸ†•
acf/rest_api/keystring $key
WP_REST_Request $request
string $type
acf/rest_api/item_permissions/getboolean $permission
WP_REST_Request $request
string $type
acf/rest_api/item_permissions/updateboolean $permission
WP_REST_Request $request
string $type
acf/rest_api/{type}/prepare_itemmixed ( array, boolean ) $item
WP_REST_Request $request
acf/rest_api/{type}/get_fieldsmixed ( array, WP_REST_Request ) $data
mixed ( WP_REST_Request, NULL ) $request
acf/rest_api/field_settings/show_in_rest πŸ†•boolean $show
acf/rest_api/field_settings/edit_in_rest πŸ†•boolean $edit

Basic example of how to use the filters, in this case I will set a new permission to get the fields

add_filter( 'acf/rest_api/item_permissions/get', function( $permission ) {
  return current_user_can( 'edit_posts' );
} );

Deprecated filters

FilterArgument(s)
acf/rest_api/typestring $type
acf/rest_api/typesarray $types
acf/rest_api/default_rest_baseboolean $default
string $type

Request API version

See below how to select the Request API Version.

  1. Open the plugins page;
  2. Click the settings link under the pluing name ( ACF to REST API );
  3. Select your version in the ACF to REST API session;
  4. Click in the button Save changes.

The other alternative is to define the constant ACF_TO_REST_API_REQUEST_VERSION in your wp-config.php

define( 'ACF_TO_REST_API_REQUEST_VERSION', 2 );

Field Settings

In this version is possible to configure the field options via admin.

The options are enabled using the filters below, by default theses options are disabled.

// Enable the option show in rest
add_filter( 'acf/rest_api/field_settings/show_in_rest', '__return_true' );

// Enable the option edit in rest
add_filter( 'acf/rest_api/field_settings/edit_in_rest', '__return_true' );

Editing the fields

The fields should be sent into the key fields.

Action: http://localhost/wp-json/acf/v3/posts/1

<form action="http://localhost/wp-json/acf/v3/posts/1" method="POST">
  <?php 
    // https://developer.wordpress.org/rest-api/using-the-rest-api/authentication/
    wp_nonce_field( 'wp_rest' ); 
  ?>
  <label>Site: <input type="text" name="fields[site]"></label>
  <button type="submit">Save</button>
</form>

Action: http://localhost/wp-json/wp/v2/posts/1

<form action="http://localhost/wp-json/wp/v2/posts/1" method="POST">
  <?php 
    // https://developer.wordpress.org/rest-api/using-the-rest-api/authentication/
    wp_nonce_field( 'wp_rest' ); 
  ?>
  <label>Title: <input type="text" name="title"></label>
  <h3>ACF</h3>
  <label>Site: <input type="text" name="fields[site]"></label>
  <button type="submit">Save</button>
</form>

Use the filter acf/rest_api/key to change the key fields.

add_filter( 'acf/rest_api/key', function( $key, $request, $type ) {
  return 'acf_fields';
}, 10, 3 );

Now, the fields should be sent into the key acf_fields

<form action="http://localhost/wp-json/acf/v3/posts/1" method="POST">
  <?php 
    // https://developer.wordpress.org/rest-api/using-the-rest-api/authentication/
    wp_nonce_field( 'wp_rest' ); 
  ?>
  <label>Site: <input type="text" name="acf_fields[site]"></label>
  <button type="submit">Save</button>
</form>

Examples

Sample theme to edit the ACF Fields.

https://github.com/airesvsg/acf-to-rest-api-example

To-do list πŸ†•

https://github.com/airesvsg/to-do-list-acf-to-rest-api

Get ACF Fields RecursivelyπŸ†•

https://github.com/airesvsg/acf-to-rest-api-recursive

More details:

Cache

Enable caching for WordPress REST API and increase speed of your application.

https://github.com/airesvsg/wp-rest-api-cache

acf
api
custom
fields
rest
rest-api
wordpress
wordpress-plugin
wp
wp-api

airesvsg/acf-to-rest-api

Exposes Advanced Custom Fields Endpoints in the WordPress REST API

PHP

1,360

54 commits

updated Dec 31, 2024

See the code

README

ACF to REST API

Exposes Advanced Custom Fields Endpoints in the WordPress REST API

https://wordpress.org/plugins/acf-to-rest-api/

Installation

  1. Copy the acf-to-rest-api folder into your wp-content/plugins folder
  2. Activate the ACF to REST API plugin via the plugin admin page

Endpoints

EndpointREADABLEEDITABLE
/wp-json/acf/v3/posts πŸ†•βœ…βŒ
/wp-json/acf/v3/posts/{id}βœ…βœ…
/wp-json/acf/v3/posts/{id}/{field-name}βœ…βœ…
/wp-json/acf/v3/pages πŸ†•βœ…βŒ
/wp-json/acf/v3/pages/{id}βœ…βœ…
/wp-json/acf/v3/pages/{id}/{field-name}βœ…βœ…
/wp-json/acf/v3/users πŸ†•βœ…βŒ
/wp-json/acf/v3/users/{id}βœ…βœ…
/wp-json/acf/v3/users/{id}/{field-name}βœ…βœ…
/wp-json/acf/v3/{taxonomy} πŸ†•βœ…βŒ
/wp-json/acf/v3/{taxonomy}/{id} πŸ†•βœ…βœ…
/wp-json/acf/v3/{taxonomy}/{id}/{field-name} πŸ†•βœ…βœ…
/wp-json/acf/v3/comments πŸ†•βœ…βŒ
/wp-json/acf/v3/comments/{id}βœ…βœ…
/wp-json/acf/v3/comments/{id}/{field-name}βœ…βœ…
/wp-json/acf/v3/media πŸ†•βœ…βŒ
/wp-json/acf/v3/media/{id}βœ…βœ…
/wp-json/acf/v3/media/{id}/{field-name}βœ…βœ…
/wp-json/acf/v3/{post-type} πŸ†•βœ…βŒ
/wp-json/acf/v3/{post-type}/{id} πŸ†•βœ…βœ…
/wp-json/acf/v3/{post-type}/{id}/{field-name} πŸ†•βœ…βœ…
/wp-json/acf/v3/options/{id} πŸ†•βœ…βœ…
/wp-json/acf/v3/options/{id}/{field-name} πŸ†•βœ…βœ…

Filters

FilterArgument(s)
acf/rest_api/idmixed ( string, integer, boolean ) $id
string $type πŸ†•
string $controller πŸ†•
acf/rest_api/keystring $key
WP_REST_Request $request
string $type
acf/rest_api/item_permissions/getboolean $permission
WP_REST_Request $request
string $type
acf/rest_api/item_permissions/updateboolean $permission
WP_REST_Request $request
string $type
acf/rest_api/{type}/prepare_itemmixed ( array, boolean ) $item
WP_REST_Request $request
acf/rest_api/{type}/get_fieldsmixed ( array, WP_REST_Request ) $data
mixed ( WP_REST_Request, NULL ) $request
acf/rest_api/field_settings/show_in_rest πŸ†•boolean $show
acf/rest_api/field_settings/edit_in_rest πŸ†•boolean $edit

Basic example of how to use the filters, in this case I will set a new permission to get the fields

add_filter( 'acf/rest_api/item_permissions/get', function( $permission ) {
  return current_user_can( 'edit_posts' );
} );

Deprecated filters

FilterArgument(s)
acf/rest_api/typestring $type
acf/rest_api/typesarray $types
acf/rest_api/default_rest_baseboolean $default
string $type

Request API version

See below how to select the Request API Version.

  1. Open the plugins page;
  2. Click the settings link under the pluing name ( ACF to REST API );
  3. Select your version in the ACF to REST API session;
  4. Click in the button Save changes.

The other alternative is to define the constant ACF_TO_REST_API_REQUEST_VERSION in your wp-config.php

define( 'ACF_TO_REST_API_REQUEST_VERSION', 2 );

Field Settings

In this version is possible to configure the field options via admin.

The options are enabled using the filters below, by default theses options are disabled.

// Enable the option show in rest
add_filter( 'acf/rest_api/field_settings/show_in_rest', '__return_true' );

// Enable the option edit in rest
add_filter( 'acf/rest_api/field_settings/edit_in_rest', '__return_true' );

Editing the fields

The fields should be sent into the key fields.

Action: http://localhost/wp-json/acf/v3/posts/1

<form action="http://localhost/wp-json/acf/v3/posts/1" method="POST">
  <?php 
    // https://developer.wordpress.org/rest-api/using-the-rest-api/authentication/
    wp_nonce_field( 'wp_rest' ); 
  ?>
  <label>Site: <input type="text" name="fields[site]"></label>
  <button type="submit">Save</button>
</form>

Action: http://localhost/wp-json/wp/v2/posts/1

<form action="http://localhost/wp-json/wp/v2/posts/1" method="POST">
  <?php 
    // https://developer.wordpress.org/rest-api/using-the-rest-api/authentication/
    wp_nonce_field( 'wp_rest' ); 
  ?>
  <label>Title: <input type="text" name="title"></label>
  <h3>ACF</h3>
  <label>Site: <input type="text" name="fields[site]"></label>
  <button type="submit">Save</button>
</form>

Use the filter acf/rest_api/key to change the key fields.

add_filter( 'acf/rest_api/key', function( $key, $request, $type ) {
  return 'acf_fields';
}, 10, 3 );

Now, the fields should be sent into the key acf_fields

<form action="http://localhost/wp-json/acf/v3/posts/1" method="POST">
  <?php 
    // https://developer.wordpress.org/rest-api/using-the-rest-api/authentication/
    wp_nonce_field( 'wp_rest' ); 
  ?>
  <label>Site: <input type="text" name="acf_fields[site]"></label>
  <button type="submit">Save</button>
</form>

Examples

Sample theme to edit the ACF Fields.

https://github.com/airesvsg/acf-to-rest-api-example

To-do list πŸ†•

https://github.com/airesvsg/to-do-list-acf-to-rest-api

Get ACF Fields RecursivelyπŸ†•

https://github.com/airesvsg/acf-to-rest-api-recursive

More details:

Cache

Enable caching for WordPress REST API and increase speed of your application.

https://github.com/airesvsg/wp-rest-api-cache

acf
api
custom
fields
rest
rest-api
wordpress
wordpress-plugin
wp
wp-api

Significant stargazers

Jamy

124 followers Β· starred Aug 2018

Michael Hadley

257 followers Β· starred Jan 2018

Mauro Bringolf

43 followers Β· starred Feb 2017

Heinrich Fenkart

321 followers Β· starred Feb 2019