Version Description
stable version
Download this release
Release Info
Developer | airesvsg |
Plugin | ACF to REST API |
Version | 3.0.2 |
Comparing to | |
See all releases |
Code changes from version 2.2.1 to 3.0.2
- class-acf-to-rest-api.php +51 -44
- composer.json +25 -0
- languages/pt_BR.mo +0 -0
- legacy/v2/class-acf-to-rest-api-v2.php +53 -0
- {lib → legacy/v2/lib}/endpoints/class-acf-to-rest-api-attachment-controller.php +0 -0
- {lib → legacy/v2/lib}/endpoints/class-acf-to-rest-api-controller.php +20 -20
- {lib → legacy/v2/lib}/endpoints/class-acf-to-rest-api-option-controller.php +1 -1
- {lib → legacy/v2/lib}/endpoints/class-acf-to-rest-api-term-controller.php +5 -7
- readme.md +109 -58
- readme.txt +25 -6
- {includes → shared/includes}/admin/views/html-notice-missing-acf.php +2 -2
- {includes → shared/includes}/admin/views/html-notice-missing-rest-api.php +2 -2
- shared/includes/admin/views/html-settings-field.php +16 -0
- shared/includes/admin/views/html-settings-section.php +8 -0
- shared/lib/class-acf-to-rest-api-settings.php +97 -0
- v3/class-acf-to-rest-api-v3.php +56 -0
- v3/lib/class-acf-to-rest-api-acf-api.php +188 -0
- v3/lib/class-acf-to-rest-api-acf-field-settings.php +103 -0
- v3/lib/endpoints/class-acf-to-rest-api-attachments-controller.php +20 -0
- v3/lib/endpoints/class-acf-to-rest-api-comments-controller.php +20 -0
- v3/lib/endpoints/class-acf-to-rest-api-controller.php +184 -0
- v3/lib/endpoints/class-acf-to-rest-api-options-controller.php +31 -0
- v3/lib/endpoints/class-acf-to-rest-api-posts-controller.php +20 -0
- v3/lib/endpoints/class-acf-to-rest-api-terms-controller.php +20 -0
- v3/lib/endpoints/class-acf-to-rest-api-users-controller.php +20 -0
class-acf-to-rest-api.php
CHANGED
@@ -1,10 +1,10 @@
|
|
1 |
<?php
|
2 |
/**
|
3 |
* Plugin Name: ACF to REST API
|
4 |
-
* Description: Exposes Advanced Custom Fields Endpoints in the
|
5 |
* Author: Aires Gonçalves
|
6 |
* Author URI: http://github.com/airesvsg
|
7 |
-
* Version:
|
8 |
* Plugin URI: http://github.com/airesvsg/acf-to-rest-api
|
9 |
*/
|
10 |
|
@@ -16,29 +16,67 @@ if ( ! class_exists( 'ACF_To_REST_API' ) ) {
|
|
16 |
|
17 |
class ACF_To_REST_API {
|
18 |
|
19 |
-
const VERSION = '
|
|
|
|
|
|
|
|
|
|
|
|
|
20 |
|
21 |
public static function init() {
|
22 |
self::includes();
|
23 |
self::hooks();
|
24 |
}
|
25 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
26 |
private static function includes() {
|
|
|
|
|
|
|
|
|
|
|
|
|
27 |
if ( self::is_plugin_active( 'all' ) ) {
|
28 |
-
|
29 |
-
|
30 |
-
|
31 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
32 |
}
|
|
|
33 |
}
|
34 |
|
35 |
private static function hooks() {
|
36 |
add_action( 'init', array( __CLASS__, 'load_plugin_textdomain' ) );
|
|
|
37 |
if ( self::is_plugin_active( 'all' ) ) {
|
38 |
add_action( 'rest_api_init', array( __CLASS__, 'create_rest_routes' ), 10 );
|
|
|
|
|
|
|
39 |
} else {
|
40 |
add_action( 'admin_notices', array( __CLASS__, 'missing_notice' ) );
|
41 |
}
|
|
|
42 |
}
|
43 |
|
44 |
public static function load_plugin_textdomain() {
|
@@ -47,32 +85,7 @@ if ( ! class_exists( 'ACF_To_REST_API' ) ) {
|
|
47 |
}
|
48 |
|
49 |
public static function create_rest_routes() {
|
50 |
-
|
51 |
-
$types = get_post_types( array( 'show_in_rest' => true ) );
|
52 |
-
|
53 |
-
if ( $types && isset( $types['attachment'] ) ) {
|
54 |
-
unset( $types['attachment'] );
|
55 |
-
$default[] = 'media';
|
56 |
-
}
|
57 |
-
|
58 |
-
$types = apply_filters( 'acf/rest_api/types', array_merge( $types, array_combine( $default, $default ) ) );
|
59 |
-
|
60 |
-
if ( is_array( $types ) && count( $types ) > 0 ) {
|
61 |
-
foreach( $types as $type ) {
|
62 |
-
if ( 'term' == $type ) {
|
63 |
-
$controller = new ACF_To_REST_API_Term_Controller( $type );
|
64 |
-
} elseif ( 'media' == $type ) {
|
65 |
-
$controller = new ACF_To_REST_API_Attachment_Controller( $type );
|
66 |
-
} elseif ( 'option' == $type ) {
|
67 |
-
$controller = new ACF_To_REST_API_Option_Controller( $type );
|
68 |
-
} else {
|
69 |
-
$controller = new ACF_To_REST_API_Controller( $type );
|
70 |
-
}
|
71 |
-
|
72 |
-
$controller->register_routes();
|
73 |
-
$controller->register_hooks();
|
74 |
-
}
|
75 |
-
}
|
76 |
}
|
77 |
|
78 |
public static function is_plugin_active( $plugin ) {
|
@@ -89,7 +102,7 @@ if ( ! class_exists( 'ACF_To_REST_API' ) ) {
|
|
89 |
|
90 |
public static function is_plugin_installed( $plugin ) {
|
91 |
if ( ! function_exists( 'get_plugins' ) ) {
|
92 |
-
include_once( ABSPATH . 'wp-admin/includes/plugin.php' );
|
93 |
}
|
94 |
|
95 |
$paths = false;
|
@@ -103,10 +116,10 @@ if ( ! class_exists( 'ACF_To_REST_API' ) ) {
|
|
103 |
$plugins = get_plugins();
|
104 |
if ( is_array( $plugins ) && count( $plugins ) > 0 ) {
|
105 |
foreach ( $paths as $path ) {
|
106 |
-
if ( isset( $plugins[$path] ) && ! empty( $plugins[$path] ) ) {
|
107 |
return $path;
|
108 |
}
|
109 |
-
}
|
110 |
}
|
111 |
}
|
112 |
|
@@ -114,16 +127,10 @@ if ( ! class_exists( 'ACF_To_REST_API' ) ) {
|
|
114 |
}
|
115 |
|
116 |
public static function missing_notice() {
|
117 |
-
|
118 |
-
include dirname( __FILE__ ) . '/includes/admin/views/html-notice-missing-rest-api.php';
|
119 |
-
}
|
120 |
-
|
121 |
-
if ( ! self::is_plugin_active( 'acf' ) ) {
|
122 |
-
include dirname( __FILE__ ) . '/includes/admin/views/html-notice-missing-acf.php';
|
123 |
-
}
|
124 |
}
|
125 |
}
|
126 |
|
127 |
add_action( 'plugins_loaded', array( 'ACF_To_REST_API', 'init' ) );
|
128 |
|
129 |
-
}
|
1 |
<?php
|
2 |
/**
|
3 |
* Plugin Name: ACF to REST API
|
4 |
+
* Description: Exposes Advanced Custom Fields Endpoints in the WordPress REST API
|
5 |
* Author: Aires Gonçalves
|
6 |
* Author URI: http://github.com/airesvsg
|
7 |
+
* Version: 3.0.2
|
8 |
* Plugin URI: http://github.com/airesvsg/acf-to-rest-api
|
9 |
*/
|
10 |
|
16 |
|
17 |
class ACF_To_REST_API {
|
18 |
|
19 |
+
const VERSION = '3.0.2';
|
20 |
+
|
21 |
+
private static $old_request_version = 2;
|
22 |
+
private static $default_request_version = 3;
|
23 |
+
private static $request_version;
|
24 |
+
|
25 |
+
private static $instance = null;
|
26 |
|
27 |
public static function init() {
|
28 |
self::includes();
|
29 |
self::hooks();
|
30 |
}
|
31 |
|
32 |
+
protected static function instance() {
|
33 |
+
if ( is_null( self::$instance ) ) {
|
34 |
+
$class = 'ACF_To_REST_API_V' . self::handle_request_version();
|
35 |
+
if ( class_exists( $class ) ) {
|
36 |
+
self::$instance = new $class;
|
37 |
+
}
|
38 |
+
}
|
39 |
+
return self::$instance;
|
40 |
+
}
|
41 |
+
|
42 |
private static function includes() {
|
43 |
+
if ( self::$old_request_version == self::handle_request_version() ) {
|
44 |
+
require_once dirname( __FILE__ ) . '/legacy/v2/class-acf-to-rest-api-v2.php';
|
45 |
+
} else {
|
46 |
+
require_once dirname( __FILE__ ) . '/v3/class-acf-to-rest-api-v3.php';
|
47 |
+
}
|
48 |
+
|
49 |
if ( self::is_plugin_active( 'all' ) ) {
|
50 |
+
if ( is_admin() ) {
|
51 |
+
require_once dirname( __FILE__ ) . '/shared/lib/class-acf-to-rest-api-settings.php';
|
52 |
+
}
|
53 |
+
self::instance()->includes();
|
54 |
+
}
|
55 |
+
}
|
56 |
+
|
57 |
+
public static function handle_request_version() {
|
58 |
+
if ( is_null( self::$request_version ) ) {
|
59 |
+
if ( defined( 'ACF_TO_REST_API_REQUEST_VERSION' ) ) {
|
60 |
+
self::$request_version = (int) ACF_TO_REST_API_REQUEST_VERSION;
|
61 |
+
} else {
|
62 |
+
self::$request_version = (int) get_option( 'acf_to_rest_api_request_version', self::$default_request_version );
|
63 |
+
}
|
64 |
}
|
65 |
+
return self::$request_version;
|
66 |
}
|
67 |
|
68 |
private static function hooks() {
|
69 |
add_action( 'init', array( __CLASS__, 'load_plugin_textdomain' ) );
|
70 |
+
|
71 |
if ( self::is_plugin_active( 'all' ) ) {
|
72 |
add_action( 'rest_api_init', array( __CLASS__, 'create_rest_routes' ), 10 );
|
73 |
+
if ( self::$default_request_version == self::handle_request_version() ) {
|
74 |
+
ACF_To_REST_API_ACF_Field_Settings::hooks();
|
75 |
+
}
|
76 |
} else {
|
77 |
add_action( 'admin_notices', array( __CLASS__, 'missing_notice' ) );
|
78 |
}
|
79 |
+
|
80 |
}
|
81 |
|
82 |
public static function load_plugin_textdomain() {
|
85 |
}
|
86 |
|
87 |
public static function create_rest_routes() {
|
88 |
+
self::instance()->create_rest_routes();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
89 |
}
|
90 |
|
91 |
public static function is_plugin_active( $plugin ) {
|
102 |
|
103 |
public static function is_plugin_installed( $plugin ) {
|
104 |
if ( ! function_exists( 'get_plugins' ) ) {
|
105 |
+
include_once( ABSPATH . 'wp-admin/includes/plugin.php' );
|
106 |
}
|
107 |
|
108 |
$paths = false;
|
116 |
$plugins = get_plugins();
|
117 |
if ( is_array( $plugins ) && count( $plugins ) > 0 ) {
|
118 |
foreach ( $paths as $path ) {
|
119 |
+
if ( isset( $plugins[ $path ] ) && ! empty( $plugins[ $path ] ) ) {
|
120 |
return $path;
|
121 |
}
|
122 |
+
}
|
123 |
}
|
124 |
}
|
125 |
|
127 |
}
|
128 |
|
129 |
public static function missing_notice() {
|
130 |
+
self::instance()->missing_notice();
|
|
|
|
|
|
|
|
|
|
|
|
|
131 |
}
|
132 |
}
|
133 |
|
134 |
add_action( 'plugins_loaded', array( 'ACF_To_REST_API', 'init' ) );
|
135 |
|
136 |
+
}
|
composer.json
ADDED
@@ -0,0 +1,25 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
{
|
2 |
+
"name": "airesvsg/acf-to-rest-api",
|
3 |
+
"description": "Exposes Advanced Custom Fields Endpoints in the WordPress REST API",
|
4 |
+
"type": "wordpress-plugin",
|
5 |
+
"version": "3.0.2",
|
6 |
+
"keywords": ["wordpress", "wp", "rest-api", "acf", "wp-api", "json", "wordpres-plugin", "fields"],
|
7 |
+
"homepage": "https://github.com/airesvsg/acf-to-rest-api",
|
8 |
+
"license": "GPLv2.0+",
|
9 |
+
"authors": [
|
10 |
+
{
|
11 |
+
"name": "Aires Gonçalves",
|
12 |
+
"email": "airesvsg@gmail.com",
|
13 |
+
"homepage": "http://airesgoncalves.com",
|
14 |
+
"role": "Developer"
|
15 |
+
}
|
16 |
+
],
|
17 |
+
"support": {
|
18 |
+
"email": "airesvsg@gmail.com",
|
19 |
+
"issues": "https://github.com/airesvsg/acf-to-rest-api/issues"
|
20 |
+
},
|
21 |
+
"require": {
|
22 |
+
"php": ">=5.3.2",
|
23 |
+
"composer/installers": "~1.0"
|
24 |
+
}
|
25 |
+
}
|
languages/pt_BR.mo
CHANGED
Binary file
|
legacy/v2/class-acf-to-rest-api-v2.php
ADDED
@@ -0,0 +1,53 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
if ( ! defined( 'ABSPATH' ) ) {
|
4 |
+
exit;
|
5 |
+
}
|
6 |
+
|
7 |
+
if ( ! class_exists( 'ACF_To_REST_API_V2' ) ) {
|
8 |
+
|
9 |
+
class ACF_To_REST_API_V2 {
|
10 |
+
|
11 |
+
public static function includes() {
|
12 |
+
require_once dirname( __FILE__ ) . '/lib/endpoints/class-acf-to-rest-api-controller.php';
|
13 |
+
require_once dirname( __FILE__ ) . '/lib/endpoints/class-acf-to-rest-api-option-controller.php';
|
14 |
+
require_once dirname( __FILE__ ) . '/lib/endpoints/class-acf-to-rest-api-term-controller.php';
|
15 |
+
require_once dirname( __FILE__ ) . '/lib/endpoints/class-acf-to-rest-api-attachment-controller.php';
|
16 |
+
}
|
17 |
+
|
18 |
+
public static function create_rest_routes() {
|
19 |
+
$default = array( 'user', 'comment', 'term', 'option' );
|
20 |
+
$types = get_post_types( array( 'show_in_rest' => true ) );
|
21 |
+
if ( $types && isset( $types['attachment'] ) ) {
|
22 |
+
unset( $types['attachment'] );
|
23 |
+
$default[] = 'media';
|
24 |
+
}
|
25 |
+
$types = apply_filters( 'acf/rest_api/types', array_merge( $types, array_combine( $default, $default ) ) );
|
26 |
+
if ( is_array( $types ) && count( $types ) > 0 ) {
|
27 |
+
foreach ( $types as $type ) {
|
28 |
+
if ( 'term' == $type ) {
|
29 |
+
$controller = new ACF_To_REST_API_Term_Controller( $type );
|
30 |
+
} elseif ( 'media' == $type ) {
|
31 |
+
$controller = new ACF_To_REST_API_Attachment_Controller( $type );
|
32 |
+
} elseif ( 'option' == $type ) {
|
33 |
+
$controller = new ACF_To_REST_API_Option_Controller( $type );
|
34 |
+
} else {
|
35 |
+
$controller = new ACF_To_REST_API_Controller( $type );
|
36 |
+
}
|
37 |
+
$controller->register_routes();
|
38 |
+
$controller->register_hooks();
|
39 |
+
}
|
40 |
+
}
|
41 |
+
}
|
42 |
+
|
43 |
+
public static function missing_notice() {
|
44 |
+
if ( ! ACF_To_REST_API::is_plugin_active( 'rest-api' ) ) {
|
45 |
+
include dirname( __FILE__ ) . '/../../shared/includes/admin/views/html-notice-missing-rest-api.php';
|
46 |
+
}
|
47 |
+
if ( ! ACF_To_REST_API::is_plugin_active( 'acf' ) ) {
|
48 |
+
include dirname( __FILE__ ) . '/../../shared/includes/admin/views/html-notice-missing-acf.php';
|
49 |
+
}
|
50 |
+
}
|
51 |
+
|
52 |
+
}
|
53 |
+
}
|
{lib → legacy/v2/lib}/endpoints/class-acf-to-rest-api-attachment-controller.php
RENAMED
File without changes
|
{lib → legacy/v2/lib}/endpoints/class-acf-to-rest-api-controller.php
RENAMED
@@ -41,11 +41,11 @@ if ( ! class_exists( 'ACF_To_REST_API_Controller' ) ) {
|
|
41 |
|
42 |
protected function get_rest_base( $type ) {
|
43 |
global $wp_post_types;
|
44 |
-
|
45 |
$default = apply_filters( 'acf/rest_api/default_rest_base', ! in_array( $type, array( 'post', 'page' ) ), $type );
|
46 |
|
47 |
-
if ( $default && isset( $wp_post_types[$type] ) && isset( $wp_post_types[$type]->rest_base ) ) {
|
48 |
-
return $wp_post_types[$type]->rest_base;
|
49 |
}
|
50 |
|
51 |
return $type;
|
@@ -58,11 +58,11 @@ if ( ! class_exists( 'ACF_To_REST_API_Controller' ) ) {
|
|
58 |
public function get_item_permissions_check( $request ) {
|
59 |
return apply_filters( 'acf/rest_api/item_permissions/get', true, $request, $this->type );
|
60 |
}
|
61 |
-
|
62 |
public function rest_prepare( $response, $post, $request ) {
|
63 |
return $this->get_fields( $request, $response, $post );
|
64 |
}
|
65 |
-
|
66 |
public function update_item_permissions_check( $request ) {
|
67 |
return apply_filters( 'acf/rest_api/item_permissions/update', current_user_can( 'edit_posts' ), $request, $this->type );
|
68 |
}
|
@@ -72,8 +72,8 @@ if ( ! class_exists( 'ACF_To_REST_API_Controller' ) ) {
|
|
72 |
|
73 |
if ( is_array( $item ) && count( $item ) > 0 ) {
|
74 |
foreach ( $item['data'] as $key => $value ) {
|
75 |
-
if ( isset( $item['fields'][$key]['key'] ) ) {
|
76 |
-
$field = $item['fields'][$key];
|
77 |
if ( function_exists( 'acf_update_value' ) ) {
|
78 |
acf_update_value( $value, $item['id'], $field );
|
79 |
} elseif ( function_exists( 'update_field' ) ) {
|
@@ -86,7 +86,7 @@ if ( ! class_exists( 'ACF_To_REST_API_Controller' ) ) {
|
|
86 |
|
87 |
return new WP_REST_Response( $this->get_fields( $request ), 200 );
|
88 |
}
|
89 |
-
|
90 |
return new WP_Error( 'cant_update_item', __( 'Cannot update item', 'acf-to-rest-api' ), array( 'status' => 500 ) );
|
91 |
}
|
92 |
|
@@ -114,8 +114,8 @@ if ( ! class_exists( 'ACF_To_REST_API_Controller' ) ) {
|
|
114 |
$fields = $this->get_field_objects( $this->id );
|
115 |
|
116 |
if ( is_array( $fields ) && ! empty( $fields ) ) {
|
117 |
-
if ( $field && isset( $data[$field] ) ) {
|
118 |
-
$data = array( $field => $data[$field] );
|
119 |
}
|
120 |
|
121 |
$item = array(
|
@@ -142,7 +142,7 @@ if ( ! class_exists( 'ACF_To_REST_API_Controller' ) ) {
|
|
142 |
$this->id = $object['ID'];
|
143 |
}
|
144 |
} elseif ( is_object( $object ) ) {
|
145 |
-
if( $object instanceof WP_REST_Response ) {
|
146 |
return $this->get_id( $object->get_data() );
|
147 |
} elseif ( $object instanceof WP_REST_Request ) {
|
148 |
$this->id = $object->get_param( 'id' );
|
@@ -162,8 +162,8 @@ if ( ! class_exists( 'ACF_To_REST_API_Controller' ) ) {
|
|
162 |
|
163 |
protected function format_id( $object ) {
|
164 |
$this->get_id( $object );
|
165 |
-
|
166 |
-
switch( $this->type ) {
|
167 |
case 'comment' :
|
168 |
$this->id = 'comment_' . $this->id;
|
169 |
break;
|
@@ -220,7 +220,7 @@ if ( ! class_exists( 'ACF_To_REST_API_Controller' ) ) {
|
|
220 |
} else {
|
221 |
$data['acf'] = array();
|
222 |
}
|
223 |
-
|
224 |
if ( $swap ) {
|
225 |
$response->data = $data;
|
226 |
$data = $response;
|
@@ -237,14 +237,14 @@ if ( ! class_exists( 'ACF_To_REST_API_Controller' ) ) {
|
|
237 |
$fields = array();
|
238 |
$fields_tmp = array();
|
239 |
|
240 |
-
if ( function_exists( 'acf_get_field_groups' ) && function_exists( 'acf_get_fields' ) && function_exists( 'acf_extract_var' ) ) {
|
241 |
$field_groups = acf_get_field_groups( array( 'post_id' => $id ) );
|
242 |
|
243 |
if ( is_array( $field_groups ) && ! empty( $field_groups ) ) {
|
244 |
foreach ( $field_groups as $field_group ) {
|
245 |
$field_group_fields = acf_get_fields( $field_group );
|
246 |
if ( is_array( $field_group_fields ) && ! empty( $field_group_fields ) ) {
|
247 |
-
foreach( array_keys( $field_group_fields ) as $i ) {
|
248 |
$fields_tmp[] = acf_extract_var( $field_group_fields, $i );
|
249 |
}
|
250 |
}
|
@@ -263,7 +263,7 @@ if ( ! class_exists( 'ACF_To_REST_API_Controller' ) ) {
|
|
263 |
$acfs = apply_filters( 'acf/get_field_groups', array() );
|
264 |
|
265 |
if ( is_array( $acfs ) && ! empty( $acfs ) && is_array( $field_groups ) && ! empty( $field_groups ) ) {
|
266 |
-
foreach( $acfs as $acf ) {
|
267 |
if ( in_array( $acf['id'], $field_groups ) ) {
|
268 |
$fields_tmp = array_merge( $fields_tmp, apply_filters( 'acf/field_group/get_fields', array(), $acf['id'] ) );
|
269 |
}
|
@@ -272,9 +272,9 @@ if ( ! class_exists( 'ACF_To_REST_API_Controller' ) ) {
|
|
272 |
}
|
273 |
|
274 |
if ( is_array( $fields_tmp ) && ! empty( $fields_tmp ) ) {
|
275 |
-
foreach( $fields_tmp as $field ) {
|
276 |
if ( is_array( $field ) && isset( $field['name'] ) ) {
|
277 |
-
$fields[$field['name']] = $field;
|
278 |
}
|
279 |
}
|
280 |
}
|
@@ -283,4 +283,4 @@ if ( ! class_exists( 'ACF_To_REST_API_Controller' ) ) {
|
|
283 |
}
|
284 |
|
285 |
}
|
286 |
-
}
|
41 |
|
42 |
protected function get_rest_base( $type ) {
|
43 |
global $wp_post_types;
|
44 |
+
|
45 |
$default = apply_filters( 'acf/rest_api/default_rest_base', ! in_array( $type, array( 'post', 'page' ) ), $type );
|
46 |
|
47 |
+
if ( $default && isset( $wp_post_types[ $type ] ) && isset( $wp_post_types[ $type ]->rest_base ) ) {
|
48 |
+
return $wp_post_types[ $type ]->rest_base;
|
49 |
}
|
50 |
|
51 |
return $type;
|
58 |
public function get_item_permissions_check( $request ) {
|
59 |
return apply_filters( 'acf/rest_api/item_permissions/get', true, $request, $this->type );
|
60 |
}
|
61 |
+
|
62 |
public function rest_prepare( $response, $post, $request ) {
|
63 |
return $this->get_fields( $request, $response, $post );
|
64 |
}
|
65 |
+
|
66 |
public function update_item_permissions_check( $request ) {
|
67 |
return apply_filters( 'acf/rest_api/item_permissions/update', current_user_can( 'edit_posts' ), $request, $this->type );
|
68 |
}
|
72 |
|
73 |
if ( is_array( $item ) && count( $item ) > 0 ) {
|
74 |
foreach ( $item['data'] as $key => $value ) {
|
75 |
+
if ( isset( $item['fields'][ $key ]['key'] ) ) {
|
76 |
+
$field = $item['fields'][ $key ];
|
77 |
if ( function_exists( 'acf_update_value' ) ) {
|
78 |
acf_update_value( $value, $item['id'], $field );
|
79 |
} elseif ( function_exists( 'update_field' ) ) {
|
86 |
|
87 |
return new WP_REST_Response( $this->get_fields( $request ), 200 );
|
88 |
}
|
89 |
+
|
90 |
return new WP_Error( 'cant_update_item', __( 'Cannot update item', 'acf-to-rest-api' ), array( 'status' => 500 ) );
|
91 |
}
|
92 |
|
114 |
$fields = $this->get_field_objects( $this->id );
|
115 |
|
116 |
if ( is_array( $fields ) && ! empty( $fields ) ) {
|
117 |
+
if ( $field && isset( $data[ $field ] ) ) {
|
118 |
+
$data = array( $field => $data[ $field ] );
|
119 |
}
|
120 |
|
121 |
$item = array(
|
142 |
$this->id = $object['ID'];
|
143 |
}
|
144 |
} elseif ( is_object( $object ) ) {
|
145 |
+
if ( $object instanceof WP_REST_Response ) {
|
146 |
return $this->get_id( $object->get_data() );
|
147 |
} elseif ( $object instanceof WP_REST_Request ) {
|
148 |
$this->id = $object->get_param( 'id' );
|
162 |
|
163 |
protected function format_id( $object ) {
|
164 |
$this->get_id( $object );
|
165 |
+
|
166 |
+
switch ( $this->type ) {
|
167 |
case 'comment' :
|
168 |
$this->id = 'comment_' . $this->id;
|
169 |
break;
|
220 |
} else {
|
221 |
$data['acf'] = array();
|
222 |
}
|
223 |
+
|
224 |
if ( $swap ) {
|
225 |
$response->data = $data;
|
226 |
$data = $response;
|
237 |
$fields = array();
|
238 |
$fields_tmp = array();
|
239 |
|
240 |
+
if ( function_exists( 'acf_get_field_groups' ) && function_exists( 'acf_get_fields' ) && function_exists( 'acf_extract_var' ) ) {
|
241 |
$field_groups = acf_get_field_groups( array( 'post_id' => $id ) );
|
242 |
|
243 |
if ( is_array( $field_groups ) && ! empty( $field_groups ) ) {
|
244 |
foreach ( $field_groups as $field_group ) {
|
245 |
$field_group_fields = acf_get_fields( $field_group );
|
246 |
if ( is_array( $field_group_fields ) && ! empty( $field_group_fields ) ) {
|
247 |
+
foreach ( array_keys( $field_group_fields ) as $i ) {
|
248 |
$fields_tmp[] = acf_extract_var( $field_group_fields, $i );
|
249 |
}
|
250 |
}
|
263 |
$acfs = apply_filters( 'acf/get_field_groups', array() );
|
264 |
|
265 |
if ( is_array( $acfs ) && ! empty( $acfs ) && is_array( $field_groups ) && ! empty( $field_groups ) ) {
|
266 |
+
foreach ( $acfs as $acf ) {
|
267 |
if ( in_array( $acf['id'], $field_groups ) ) {
|
268 |
$fields_tmp = array_merge( $fields_tmp, apply_filters( 'acf/field_group/get_fields', array(), $acf['id'] ) );
|
269 |
}
|
272 |
}
|
273 |
|
274 |
if ( is_array( $fields_tmp ) && ! empty( $fields_tmp ) ) {
|
275 |
+
foreach ( $fields_tmp as $field ) {
|
276 |
if ( is_array( $field ) && isset( $field['name'] ) ) {
|
277 |
+
$fields[ $field['name'] ] = $field;
|
278 |
}
|
279 |
}
|
280 |
}
|
283 |
}
|
284 |
|
285 |
}
|
286 |
+
}
|
{lib → legacy/v2/lib}/endpoints/class-acf-to-rest-api-option-controller.php
RENAMED
@@ -10,7 +10,7 @@ if ( ! class_exists( 'ACF_To_REST_API_Option_Controller' ) ) {
|
|
10 |
parent::__construct( $type );
|
11 |
$this->rest_base = 'options';
|
12 |
}
|
13 |
-
|
14 |
public function register_routes() {
|
15 |
register_rest_route( $this->namespace, '/' . $this->rest_base . '/?(?P<field>[\w\-\_]+)?', array(
|
16 |
array(
|
10 |
parent::__construct( $type );
|
11 |
$this->rest_base = 'options';
|
12 |
}
|
13 |
+
|
14 |
public function register_routes() {
|
15 |
register_rest_route( $this->namespace, '/' . $this->rest_base . '/?(?P<field>[\w\-\_]+)?', array(
|
16 |
array(
|
{lib → legacy/v2/lib}/endpoints/class-acf-to-rest-api-term-controller.php
RENAMED
@@ -31,14 +31,14 @@ if ( ! class_exists( 'ACF_To_REST_API_Term_Controller' ) ) {
|
|
31 |
|
32 |
protected function get_rest_base( $request ) {
|
33 |
global $wp_taxonomies;
|
34 |
-
|
35 |
$taxonomy = false;
|
36 |
if ( $request instanceof WP_REST_Request ) {
|
37 |
-
$taxonomy = $request->get_param( 'taxonomy' );
|
38 |
}
|
39 |
|
40 |
if ( $taxonomy && ! array_key_exists( $taxonomy, $wp_taxonomies ) ) {
|
41 |
-
foreach( $wp_taxonomies as $tax_key => $tax_value ) {
|
42 |
if ( isset( $tax_value->rest_base ) && $taxonomy == $tax_value->rest_base ) {
|
43 |
$request->set_param( 'taxonomy', $tax_key );
|
44 |
return $tax_key;
|
@@ -50,11 +50,9 @@ if ( ! class_exists( 'ACF_To_REST_API_Term_Controller' ) ) {
|
|
50 |
}
|
51 |
|
52 |
protected function show( $object ) {
|
53 |
-
global $wp_taxonomies;
|
54 |
-
|
55 |
$taxonomy = $this->get_rest_base( $object );
|
56 |
-
|
57 |
-
return $taxonomy && isset( $wp_taxonomies[$taxonomy]->show_in_rest ) && $wp_taxonomies[$taxonomy]->show_in_rest;
|
58 |
}
|
59 |
}
|
60 |
}
|
31 |
|
32 |
protected function get_rest_base( $request ) {
|
33 |
global $wp_taxonomies;
|
34 |
+
|
35 |
$taxonomy = false;
|
36 |
if ( $request instanceof WP_REST_Request ) {
|
37 |
+
$taxonomy = $request->get_param( 'taxonomy' );
|
38 |
}
|
39 |
|
40 |
if ( $taxonomy && ! array_key_exists( $taxonomy, $wp_taxonomies ) ) {
|
41 |
+
foreach ( $wp_taxonomies as $tax_key => $tax_value ) {
|
42 |
if ( isset( $tax_value->rest_base ) && $taxonomy == $tax_value->rest_base ) {
|
43 |
$request->set_param( 'taxonomy', $tax_key );
|
44 |
return $tax_key;
|
50 |
}
|
51 |
|
52 |
protected function show( $object ) {
|
53 |
+
global $wp_taxonomies;
|
|
|
54 |
$taxonomy = $this->get_rest_base( $object );
|
55 |
+
return $taxonomy && isset( $wp_taxonomies[ $taxonomy ]->show_in_rest ) && $wp_taxonomies[ $taxonomy ]->show_in_rest;
|
|
|
56 |
}
|
57 |
}
|
58 |
}
|
readme.md
CHANGED
@@ -1,14 +1,17 @@
|
|
1 |
ACF to REST API
|
2 |
====
|
3 |
-
Exposes [Advanced Custom Fields](https://wordpress.org/plugins/advanced-custom-fields/) Endpoints in the [
|
4 |
|
5 |
https://wordpress.org/plugins/acf-to-rest-api/
|
6 |
|
7 |
- [Installation](#installation)
|
8 |
- [Endpoints](#endpoints)
|
9 |
- [Filters](#filters)
|
10 |
-
- [
|
11 |
-
- [
|
|
|
|
|
|
|
12 |
- [Cache](#cache)
|
13 |
|
14 |
Installation
|
@@ -21,65 +24,109 @@ Endpoints
|
|
21 |
|
22 |
| Endpoint | READABLE | EDITABLE |
|
23 |
|----------|:--------:|:--------:|
|
24 |
-
| /wp-json/acf/
|
25 |
-
| /wp-json/acf/
|
26 |
-
| /wp-json/acf/
|
27 |
-
| /wp-json/acf/
|
28 |
-
| /wp-json/acf/
|
29 |
-
| /wp-json/acf/
|
30 |
-
| /wp-json/acf/
|
31 |
-
| /wp-json/acf/
|
32 |
-
| /wp-json/acf/
|
33 |
-
| /wp-json/acf/
|
34 |
-
| /wp-json/acf/
|
35 |
-
| /wp-json/acf/
|
36 |
-
| /wp-json/acf/
|
37 |
-
| /wp-json/acf/
|
38 |
-
| /wp-json/acf/
|
39 |
-
| /wp-json/acf/
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
40 |
|
41 |
Filters
|
42 |
====
|
43 |
| Filter | Argument(s) |
|
44 |
|-----------|-----------|
|
45 |
-
| acf/rest_api/
|
46 |
-
| acf/rest_api/type | string **$type** |
|
47 |
-
| acf/rest_api/id | mixed ( string, integer, boolean ) **$id** |
|
48 |
| acf/rest_api/key | string **$key**<br>WP_REST_Request **$request**<br>string **$type** |
|
49 |
| acf/rest_api/item_permissions/get | boolean **$permission**<br>WP_REST_Request **$request**<br>string **$type** |
|
50 |
| acf/rest_api/item_permissions/update | boolean **$permission**<br>WP_REST_Request **$request**<br>string **$type** |
|
51 |
-
| acf/rest_api/default_rest_base | boolean **$default**<br>string **$type** |
|
52 |
| acf/rest_api/**{type}**/prepare_item | mixed ( array, boolean ) **$item**<br>WP_REST_Request **$request** |
|
53 |
-
| acf/rest_api/**{type}**/get_fields | mixed ( array, WP_REST_Request ) **$data**<br>mixed ( WP_REST_Request, NULL ) **$request
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
54 |
|
55 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
56 |
|
57 |
```PHP
|
58 |
-
|
59 |
-
|
60 |
-
unset( $types['post'] );
|
61 |
-
}
|
62 |
|
63 |
-
|
64 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
65 |
```
|
66 |
|
|
|
|
|
|
|
|
|
67 |
Editing the fields
|
68 |
====
|
69 |
The fields should be sent into the key `fields`.
|
70 |
|
71 |
-
![Field Name](http://airesgoncalves.com.br/screenshot/acf-to-rest-api/readme/field-name.jpg)
|
72 |
|
73 |
-
**Action:** http://localhost/wp-json/acf/
|
74 |
|
75 |
```HTML
|
76 |
-
<form action="http://localhost/wp-json/acf/
|
77 |
-
|
78 |
-
|
79 |
-
|
80 |
-
|
81 |
-
|
82 |
-
|
83 |
</form>
|
84 |
```
|
85 |
|
@@ -87,14 +134,14 @@ The fields should be sent into the key `fields`.
|
|
87 |
|
88 |
```HTML
|
89 |
<form action="http://localhost/wp-json/wp/v2/posts/1" method="POST">
|
90 |
-
|
91 |
-
|
92 |
-
|
93 |
-
|
94 |
-
|
95 |
-
|
96 |
-
|
97 |
-
|
98 |
</form>
|
99 |
```
|
100 |
|
@@ -102,31 +149,35 @@ Use the filter `acf/rest_api/key` to change the key `fields`.
|
|
102 |
|
103 |
```PHP
|
104 |
add_filter( 'acf/rest_api/key', function( $key, $request, $type ) {
|
105 |
-
|
106 |
}, 10, 3 );
|
107 |
```
|
108 |
|
109 |
Now, the fields should be sent into the key `acf_fields`
|
110 |
|
111 |
```HTML
|
112 |
-
<form action="http://localhost/wp-json/acf/
|
113 |
-
|
114 |
-
|
115 |
-
|
116 |
-
|
117 |
-
|
118 |
-
|
119 |
</form>
|
120 |
```
|
121 |
|
122 |
-
|
123 |
====
|
124 |
Sample theme to edit the ACF Fields.
|
125 |
|
126 |
https://github.com/airesvsg/acf-to-rest-api-example
|
127 |
|
|
|
|
|
|
|
|
|
128 |
Cache
|
129 |
====
|
130 |
Enable caching for WordPress REST API and increase speed of your application.
|
131 |
|
132 |
-
https://github.com/airesvsg/wp-rest-api-cache
|
1 |
ACF to REST API
|
2 |
====
|
3 |
+
Exposes [Advanced Custom Fields](https://wordpress.org/plugins/advanced-custom-fields/) Endpoints in the [WordPress REST API](https://developer.wordpress.org/rest-api/)
|
4 |
|
5 |
https://wordpress.org/plugins/acf-to-rest-api/
|
6 |
|
7 |
- [Installation](#installation)
|
8 |
- [Endpoints](#endpoints)
|
9 |
- [Filters](#filters)
|
10 |
+
- [Deprecated Filters ![new](http://airesgoncalves.com.br/screenshot/acf-to-rest-api/readme/new-v3.1.png)](#deprecated-filters)
|
11 |
+
- [Request API Version ![new](http://airesgoncalves.com.br/screenshot/acf-to-rest-api/readme/new-v3.1.png)](#request-api-version)
|
12 |
+
- [Field Settings ![new](http://airesgoncalves.com.br/screenshot/acf-to-rest-api/readme/new-v3.1.png)](#field-settings)
|
13 |
+
- [Editing the Fields](#editing-the-fields)
|
14 |
+
- [Examples](#examples)
|
15 |
- [Cache](#cache)
|
16 |
|
17 |
Installation
|
24 |
|
25 |
| Endpoint | READABLE | EDITABLE |
|
26 |
|----------|:--------:|:--------:|
|
27 |
+
| /wp-json/acf/v3/posts ![new](http://airesgoncalves.com.br/screenshot/acf-to-rest-api/readme/new-v3.1.png) | ![yes](http://airesgoncalves.com.br/screenshot/acf-to-rest-api/readme/yes.png) | ![no](http://airesgoncalves.com.br/screenshot/acf-to-rest-api/readme/no.png) |
|
28 |
+
| /wp-json/acf/v3/posts/**{id}** | ![yes](http://airesgoncalves.com.br/screenshot/acf-to-rest-api/readme/yes.png) | ![yes](http://airesgoncalves.com.br/screenshot/acf-to-rest-api/readme/yes.png) |
|
29 |
+
| /wp-json/acf/v3/posts/**{id}**/**{field-name}** | ![yes](http://airesgoncalves.com.br/screenshot/acf-to-rest-api/readme/yes.png) | ![yes](http://airesgoncalves.com.br/screenshot/acf-to-rest-api/readme/yes.png) |
|
30 |
+
| /wp-json/acf/v3/pages ![new](http://airesgoncalves.com.br/screenshot/acf-to-rest-api/readme/new-v3.1.png) | ![yes](http://airesgoncalves.com.br/screenshot/acf-to-rest-api/readme/yes.png) | ![no](http://airesgoncalves.com.br/screenshot/acf-to-rest-api/readme/no.png) |
|
31 |
+
| /wp-json/acf/v3/pages/**{id}** | ![yes](http://airesgoncalves.com.br/screenshot/acf-to-rest-api/readme/yes.png) | ![yes](http://airesgoncalves.com.br/screenshot/acf-to-rest-api/readme/yes.png) |
|
32 |
+
| /wp-json/acf/v3/pages/**{id}**/**{field-name}** | ![yes](http://airesgoncalves.com.br/screenshot/acf-to-rest-api/readme/yes.png) | ![yes](http://airesgoncalves.com.br/screenshot/acf-to-rest-api/readme/yes.png) |
|
33 |
+
| /wp-json/acf/v3/users ![new](http://airesgoncalves.com.br/screenshot/acf-to-rest-api/readme/new-v3.1.png) | ![yes](http://airesgoncalves.com.br/screenshot/acf-to-rest-api/readme/yes.png) | ![no](http://airesgoncalves.com.br/screenshot/acf-to-rest-api/readme/no.png) |
|
34 |
+
| /wp-json/acf/v3/users/**{id}** | ![yes](http://airesgoncalves.com.br/screenshot/acf-to-rest-api/readme/yes.png) | ![yes](http://airesgoncalves.com.br/screenshot/acf-to-rest-api/readme/yes.png) |
|
35 |
+
| /wp-json/acf/v3/users/**{id}**/**{field-name}** | ![yes](http://airesgoncalves.com.br/screenshot/acf-to-rest-api/readme/yes.png) | ![yes](http://airesgoncalves.com.br/screenshot/acf-to-rest-api/readme/yes.png) |
|
36 |
+
| /wp-json/acf/v3/**{taxonomy}** ![new](http://airesgoncalves.com.br/screenshot/acf-to-rest-api/readme/new-v3.1.png) | ![yes](http://airesgoncalves.com.br/screenshot/acf-to-rest-api/readme/yes.png) | ![no](http://airesgoncalves.com.br/screenshot/acf-to-rest-api/readme/no.png) |
|
37 |
+
| /wp-json/acf/v3/**{taxonomy}**/**{id}** ![new](http://airesgoncalves.com.br/screenshot/acf-to-rest-api/readme/new-v3.1.png) | ![yes](http://airesgoncalves.com.br/screenshot/acf-to-rest-api/readme/yes.png) | ![yes](http://airesgoncalves.com.br/screenshot/acf-to-rest-api/readme/yes.png) |
|
38 |
+
| /wp-json/acf/v3/**{taxonomy}**/**{id}**/**{field-name}** ![new](http://airesgoncalves.com.br/screenshot/acf-to-rest-api/readme/new-v3.1.png) | ![yes](http://airesgoncalves.com.br/screenshot/acf-to-rest-api/readme/yes.png) | ![yes](http://airesgoncalves.com.br/screenshot/acf-to-rest-api/readme/yes.png) |
|
39 |
+
| /wp-json/acf/v3/comments ![new](http://airesgoncalves.com.br/screenshot/acf-to-rest-api/readme/new-v3.1.png) | ![yes](http://airesgoncalves.com.br/screenshot/acf-to-rest-api/readme/yes.png) | ![no](http://airesgoncalves.com.br/screenshot/acf-to-rest-api/readme/no.png) |
|
40 |
+
| /wp-json/acf/v3/comments/**{id}** | ![yes](http://airesgoncalves.com.br/screenshot/acf-to-rest-api/readme/yes.png) | ![yes](http://airesgoncalves.com.br/screenshot/acf-to-rest-api/readme/yes.png) |
|
41 |
+
| /wp-json/acf/v3/comments/**{id}**/**{field-name}** | ![yes](http://airesgoncalves.com.br/screenshot/acf-to-rest-api/readme/yes.png) | ![yes](http://airesgoncalves.com.br/screenshot/acf-to-rest-api/readme/yes.png) |
|
42 |
+
| /wp-json/acf/v3/media ![new](http://airesgoncalves.com.br/screenshot/acf-to-rest-api/readme/new-v3.1.png) | ![yes](http://airesgoncalves.com.br/screenshot/acf-to-rest-api/readme/yes.png) | ![no](http://airesgoncalves.com.br/screenshot/acf-to-rest-api/readme/no.png) |
|
43 |
+
| /wp-json/acf/v3/media/**{id}** | ![yes](http://airesgoncalves.com.br/screenshot/acf-to-rest-api/readme/yes.png) | ![yes](http://airesgoncalves.com.br/screenshot/acf-to-rest-api/readme/yes.png) |
|
44 |
+
| /wp-json/acf/v3/media/**{id}**/**{field-name}** | ![yes](http://airesgoncalves.com.br/screenshot/acf-to-rest-api/readme/yes.png) | ![yes](http://airesgoncalves.com.br/screenshot/acf-to-rest-api/readme/yes.png) |
|
45 |
+
| /wp-json/acf/v3/**{post-type}** ![new](http://airesgoncalves.com.br/screenshot/acf-to-rest-api/readme/new-v3.1.png) | ![yes](http://airesgoncalves.com.br/screenshot/acf-to-rest-api/readme/yes.png) | ![no](http://airesgoncalves.com.br/screenshot/acf-to-rest-api/readme/no.png) |
|
46 |
+
| /wp-json/acf/v3/**{post-type}**/**{id}** ![new](http://airesgoncalves.com.br/screenshot/acf-to-rest-api/readme/new-v3.1.png) | ![yes](http://airesgoncalves.com.br/screenshot/acf-to-rest-api/readme/yes.png) | ![yes](http://airesgoncalves.com.br/screenshot/acf-to-rest-api/readme/yes.png) |
|
47 |
+
| /wp-json/acf/v3/**{post-type}**/**{id}**/**{field-name}** ![new](http://airesgoncalves.com.br/screenshot/acf-to-rest-api/readme/new-v3.1.png) | ![yes](http://airesgoncalves.com.br/screenshot/acf-to-rest-api/readme/yes.png) | ![yes](http://airesgoncalves.com.br/screenshot/acf-to-rest-api/readme/yes.png) |
|
48 |
+
| /wp-json/acf/v3/options/**{id}** ![new](http://airesgoncalves.com.br/screenshot/acf-to-rest-api/readme/new-v3.1.png) | ![yes](http://airesgoncalves.com.br/screenshot/acf-to-rest-api/readme/yes.png) | ![yes](http://airesgoncalves.com.br/screenshot/acf-to-rest-api/readme/yes.png) |
|
49 |
+
| /wp-json/acf/v3/options/**{id}**/**{field-name}** ![new](http://airesgoncalves.com.br/screenshot/acf-to-rest-api/readme/new-v3.1.png) | ![yes](http://airesgoncalves.com.br/screenshot/acf-to-rest-api/readme/yes.png) | ![yes](http://airesgoncalves.com.br/screenshot/acf-to-rest-api/readme/yes.png) |
|
50 |
|
51 |
Filters
|
52 |
====
|
53 |
| Filter | Argument(s) |
|
54 |
|-----------|-----------|
|
55 |
+
| acf/rest_api/id | mixed ( string, integer, boolean ) **$id**<br>string **$type** ![new](http://airesgoncalves.com.br/screenshot/acf-to-rest-api/readme/new-v3.1.png)<br>string **$controller** ![new](http://airesgoncalves.com.br/screenshot/acf-to-rest-api/readme/new-v3.1.png) |
|
|
|
|
|
56 |
| acf/rest_api/key | string **$key**<br>WP_REST_Request **$request**<br>string **$type** |
|
57 |
| acf/rest_api/item_permissions/get | boolean **$permission**<br>WP_REST_Request **$request**<br>string **$type** |
|
58 |
| acf/rest_api/item_permissions/update | boolean **$permission**<br>WP_REST_Request **$request**<br>string **$type** |
|
|
|
59 |
| acf/rest_api/**{type}**/prepare_item | mixed ( array, boolean ) **$item**<br>WP_REST_Request **$request** |
|
60 |
+
| acf/rest_api/**{type}**/get_fields | mixed ( array, WP_REST_Request ) **$data**<br>mixed ( WP_REST_Request, NULL ) **$request** |
|
61 |
+
| acf/rest_api/field_settings/show_in_rest ![new](http://airesgoncalves.com.br/screenshot/acf-to-rest-api/readme/new-v3.1.png) | boolean **$show** |
|
62 |
+
| acf/rest_api/field_settings/edit_in_rest ![new](http://airesgoncalves.com.br/screenshot/acf-to-rest-api/readme/new-v3.1.png) | boolean **$edit** |
|
63 |
+
|
64 |
+
Basic example of how to use the filters, in this case I will set a new permission to get the fields
|
65 |
+
```PHP
|
66 |
+
add_filter( 'acf/rest_api/item_permissions/get', function( $permission ) {
|
67 |
+
return current_user_can( 'edit_posts' );
|
68 |
+
} );
|
69 |
+
```
|
70 |
|
71 |
+
Deprecated filters
|
72 |
+
====
|
73 |
+
| Filter | Argument(s) |
|
74 |
+
|-----------|-----------|
|
75 |
+
| acf/rest_api/type | string **$type** |
|
76 |
+
| acf/rest_api/types | array **$types** |
|
77 |
+
| acf/rest_api/default_rest_base | boolean **$default**<br>string **$type** |
|
78 |
+
|
79 |
+
Request API version
|
80 |
+
====
|
81 |
+
See below how to select the Request API Version.
|
82 |
+
|
83 |
+
1. Open the plugins page;
|
84 |
+
2. Click the settings link under the pluing name ( `ACF to REST API` );
|
85 |
+
3. Select your version in the `ACF to REST API` session;
|
86 |
+
4. Click in the button Save changes.
|
87 |
+
|
88 |
+
![Choose request API version](http://airesgoncalves.com.br/screenshot/acf-to-rest-api/readme/request-api-version-v3.jpg)
|
89 |
+
|
90 |
+
The other alternative is to define the constant `ACF_TO_REST_API_REQUEST_VERSION` in your `wp-config.php`
|
91 |
|
92 |
```PHP
|
93 |
+
define( 'ACF_TO_REST_API_REQUEST_VERSION', 2 );
|
94 |
+
```
|
|
|
|
|
95 |
|
96 |
+
Field Settings
|
97 |
+
====
|
98 |
+
In this version is possible to configure the field options via admin.
|
99 |
+
|
100 |
+
The options are enabled using the filters below, by default theses options are disabled.
|
101 |
+
|
102 |
+
```PHP
|
103 |
+
// Enable the option show in rest
|
104 |
+
add_filter( 'acf/rest_api/field_settings/show_in_rest', '__return_true' );
|
105 |
+
|
106 |
+
// Enable the option edit in rest
|
107 |
+
add_filter( 'acf/rest_api/field_settings/edit_in_rest', '__return_true' );
|
108 |
```
|
109 |
|
110 |
+
After you activate the filters, all your fields should show these options:
|
111 |
+
![Choose request API version](http://airesgoncalves.com.br/screenshot/acf-to-rest-api/readme/field-settings-v3.jpg)
|
112 |
+
|
113 |
+
|
114 |
Editing the fields
|
115 |
====
|
116 |
The fields should be sent into the key `fields`.
|
117 |
|
118 |
+
![Field Name](http://airesgoncalves.com.br/screenshot/acf-to-rest-api/readme/field-name-v3.jpg)
|
119 |
|
120 |
+
**Action:** http://localhost/wp-json/acf/v3/posts/1
|
121 |
|
122 |
```HTML
|
123 |
+
<form action="http://localhost/wp-json/acf/v3/posts/1" method="POST">
|
124 |
+
<?php
|
125 |
+
// https://developer.wordpress.org/rest-api/using-the-rest-api/authentication/
|
126 |
+
wp_nonce_field( 'wp_rest' );
|
127 |
+
?>
|
128 |
+
<label>Site: <input type="text" name="fields[site]"></label>
|
129 |
+
<button type="submit">Save</button>
|
130 |
</form>
|
131 |
```
|
132 |
|
134 |
|
135 |
```HTML
|
136 |
<form action="http://localhost/wp-json/wp/v2/posts/1" method="POST">
|
137 |
+
<?php
|
138 |
+
// https://developer.wordpress.org/rest-api/using-the-rest-api/authentication/
|
139 |
+
wp_nonce_field( 'wp_rest' );
|
140 |
+
?>
|
141 |
+
<label>Title: <input type="text" name="title"></label>
|
142 |
+
<h3>ACF</h3>
|
143 |
+
<label>Site: <input type="text" name="fields[site]"></label>
|
144 |
+
<button type="submit">Save</button>
|
145 |
</form>
|
146 |
```
|
147 |
|
149 |
|
150 |
```PHP
|
151 |
add_filter( 'acf/rest_api/key', function( $key, $request, $type ) {
|
152 |
+
return 'acf_fields';
|
153 |
}, 10, 3 );
|
154 |
```
|
155 |
|
156 |
Now, the fields should be sent into the key `acf_fields`
|
157 |
|
158 |
```HTML
|
159 |
+
<form action="http://localhost/wp-json/acf/v3/posts/1" method="POST">
|
160 |
+
<?php
|
161 |
+
// https://developer.wordpress.org/rest-api/using-the-rest-api/authentication/
|
162 |
+
wp_nonce_field( 'wp_rest' );
|
163 |
+
?>
|
164 |
+
<label>Site: <input type="text" name="acf_fields[site]"></label>
|
165 |
+
<button type="submit">Save</button>
|
166 |
</form>
|
167 |
```
|
168 |
|
169 |
+
Examples
|
170 |
====
|
171 |
Sample theme to edit the ACF Fields.
|
172 |
|
173 |
https://github.com/airesvsg/acf-to-rest-api-example
|
174 |
|
175 |
+
To-do list ![new](http://airesgoncalves.com.br/screenshot/acf-to-rest-api/readme/new-v3.1.png)
|
176 |
+
|
177 |
+
https://github.com/airesvsg/to-do-list-acf-to-rest-api
|
178 |
+
|
179 |
Cache
|
180 |
====
|
181 |
Enable caching for WordPress REST API and increase speed of your application.
|
182 |
|
183 |
+
https://github.com/airesvsg/wp-rest-api-cache
|
readme.txt
CHANGED
@@ -1,17 +1,17 @@
|
|
1 |
=== ACF to REST API ===
|
2 |
Contributors: airesvsg
|
3 |
Donate link: https://www.paypal.com/cgi-bin/webscr?cmd=_donations&business=airesvsg%40gmail%2ecom&lc=BR&item_name=Aires%20Goncalves&no_note=0¤cy_code=USD&bn=PP%2dDonationsBF%3abtn_donateCC_LG%2egif%3aNonHostedGuest
|
4 |
-
Tags: acf, api, rest, wp-api, wp-rest-api, json, wp, wordpress, wp-rest-api
|
5 |
-
Requires at least: 4.
|
6 |
-
Tested up to: 4.
|
7 |
-
Stable tag:
|
8 |
License: GPLv2 or later
|
9 |
License URI: http://www.gnu.org/licenses/gpl-2.0.html
|
10 |
|
11 |
-
Exposes Advanced Custom Fields Endpoints in the
|
12 |
|
13 |
== Description ==
|
14 |
-
Exposes [Advanced Custom Fields](https://wordpress.org/plugins/advanced-custom-fields/) Endpoints in the [
|
15 |
|
16 |
**See details on GitHub:** http://github.com/airesvsg/acf-to-rest-api
|
17 |
|
@@ -21,6 +21,25 @@ Exposes [Advanced Custom Fields](https://wordpress.org/plugins/advanced-custom-f
|
|
21 |
|
22 |
== Changelog ==
|
23 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
24 |
= 2.2.1 =
|
25 |
bugfix options page id
|
26 |
|
1 |
=== ACF to REST API ===
|
2 |
Contributors: airesvsg
|
3 |
Donate link: https://www.paypal.com/cgi-bin/webscr?cmd=_donations&business=airesvsg%40gmail%2ecom&lc=BR&item_name=Aires%20Goncalves&no_note=0¤cy_code=USD&bn=PP%2dDonationsBF%3abtn_donateCC_LG%2egif%3aNonHostedGuest
|
4 |
+
Tags: acf, api, rest, wp-api, wp-rest-api, json, wp, wordpress, wp-rest-api, wordpress-rest-api
|
5 |
+
Requires at least: 4.6
|
6 |
+
Tested up to: 4.8.2
|
7 |
+
Stable tag: 3.0.2
|
8 |
License: GPLv2 or later
|
9 |
License URI: http://www.gnu.org/licenses/gpl-2.0.html
|
10 |
|
11 |
+
Exposes Advanced Custom Fields Endpoints in the WordPress REST API
|
12 |
|
13 |
== Description ==
|
14 |
+
Exposes [Advanced Custom Fields](https://wordpress.org/plugins/advanced-custom-fields/) Endpoints in the [WordPress REST API](https://developer.wordpress.org/rest-api/)
|
15 |
|
16 |
**See details on GitHub:** http://github.com/airesvsg/acf-to-rest-api
|
17 |
|
21 |
|
22 |
== Changelog ==
|
23 |
|
24 |
+
= 3.0.2 =
|
25 |
+
stable version
|
26 |
+
|
27 |
+
= 3.0.2-beta =
|
28 |
+
adding fallback to get_fields
|
29 |
+
changing default value to acf field setting
|
30 |
+
|
31 |
+
= 3.0.1-beta =
|
32 |
+
fix default params bug
|
33 |
+
|
34 |
+
= 3.0.0-beta =
|
35 |
+
more readable endpoints ( https://github.com/airesvsg/acf-to-rest-api/issues/46 ) - Thanks to Imaginet
|
36 |
+
change return when acf filed key is empty ( https://github.com/airesvsg/acf-to-rest-api/issues/48 ) - Thanks to Joris Verbogt
|
37 |
+
multiple custom options pages ( https://github.com/airesvsg/acf-to-rest-api/issues/85 ) - Thanks to Alex Patton
|
38 |
+
bugfix ACF key in taxonomy ( https://github.com/airesvsg/acf-to-rest-api/issues/43 ) - Thanks to Cesar Denis
|
39 |
+
depreacted filter acf/rest_api/type
|
40 |
+
depreacted filter acf/rest_api/types
|
41 |
+
depreacted filter acf/rest_api/default_rest_base
|
42 |
+
|
43 |
= 2.2.1 =
|
44 |
bugfix options page id
|
45 |
|
{includes → shared/includes}/admin/views/html-notice-missing-acf.php
RENAMED
@@ -17,7 +17,7 @@ if ( current_user_can( 'install_plugins' ) ) {
|
|
17 |
}
|
18 |
} else {
|
19 |
$target = true;
|
20 |
-
$url =
|
21 |
}
|
22 |
|
23 |
?>
|
@@ -25,4 +25,4 @@ if ( current_user_can( 'install_plugins' ) ) {
|
|
25 |
<div class="notice error is-dismissible">
|
26 |
<p><strong><?php esc_html_e( 'ACF to REST API', 'act-to-rest-api' ); ?></strong> <?php esc_html_e( 'depends on the last version of Advanced Custom Fields to work!', 'acf-to-rest-api' ); ?></p>
|
27 |
<p><a href="<?php echo esc_url( $url ); ?>" class="button button-primary"<?php if ( $target ) : ?> target="_blank"<?php endif; ?>><?php esc_html_e( $action . ' Advanced Custom Fields', 'acf-to-rest-api' ); ?></a></p>
|
28 |
-
</div>
|
17 |
}
|
18 |
} else {
|
19 |
$target = true;
|
20 |
+
$url = 'http://wordpress.org/plugins/advanced-custom-fields/';
|
21 |
}
|
22 |
|
23 |
?>
|
25 |
<div class="notice error is-dismissible">
|
26 |
<p><strong><?php esc_html_e( 'ACF to REST API', 'act-to-rest-api' ); ?></strong> <?php esc_html_e( 'depends on the last version of Advanced Custom Fields to work!', 'acf-to-rest-api' ); ?></p>
|
27 |
<p><a href="<?php echo esc_url( $url ); ?>" class="button button-primary"<?php if ( $target ) : ?> target="_blank"<?php endif; ?>><?php esc_html_e( $action . ' Advanced Custom Fields', 'acf-to-rest-api' ); ?></a></p>
|
28 |
+
</div>
|
{includes → shared/includes}/admin/views/html-notice-missing-rest-api.php
RENAMED
@@ -17,7 +17,7 @@ if ( current_user_can( 'install_plugins' ) ) {
|
|
17 |
}
|
18 |
} else {
|
19 |
$target = true;
|
20 |
-
$url =
|
21 |
}
|
22 |
|
23 |
?>
|
@@ -25,4 +25,4 @@ if ( current_user_can( 'install_plugins' ) ) {
|
|
25 |
<div class="notice error is-dismissible">
|
26 |
<p><strong><?php esc_html_e( 'ACF to REST API', 'act-to-rest-api' ); ?></strong> <?php esc_html_e( 'depends on the last version of WordPress REST API to work!', 'acf-to-rest-api' ); ?></p>
|
27 |
<p><a href="<?php echo esc_url( $url ); ?>" class="button button-primary"<?php if ( $target ) : ?> target="_blank"<?php endif; ?>><?php esc_html_e( $action . ' WordPress REST API', 'acf-to-rest-api' ); ?></a></p>
|
28 |
-
</div>
|
17 |
}
|
18 |
} else {
|
19 |
$target = true;
|
20 |
+
$url = 'http://wordpress.org/plugins/rest-api/';
|
21 |
}
|
22 |
|
23 |
?>
|
25 |
<div class="notice error is-dismissible">
|
26 |
<p><strong><?php esc_html_e( 'ACF to REST API', 'act-to-rest-api' ); ?></strong> <?php esc_html_e( 'depends on the last version of WordPress REST API to work!', 'acf-to-rest-api' ); ?></p>
|
27 |
<p><a href="<?php echo esc_url( $url ); ?>" class="button button-primary"<?php if ( $target ) : ?> target="_blank"<?php endif; ?>><?php esc_html_e( $action . ' WordPress REST API', 'acf-to-rest-api' ); ?></a></p>
|
28 |
+
</div>
|
shared/includes/admin/views/html-settings-field.php
ADDED
@@ -0,0 +1,16 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
if ( ! defined( 'ABSPATH' ) ) {
|
4 |
+
exit;
|
5 |
+
}
|
6 |
+
|
7 |
+
?>
|
8 |
+
|
9 |
+
<div id="acf-to-rest-api-settings">
|
10 |
+
<code><?php echo esc_url( site_url( 'wp-json/acf/' ) ); ?></code>
|
11 |
+
<select name="acf_to_rest_api_settings[request_version]">
|
12 |
+
<option value="2"<?php selected( 2, $request_version ); ?>>v2</option>
|
13 |
+
<option value="3"<?php selected( 3, $request_version ); ?>>v3</option>
|
14 |
+
</select>
|
15 |
+
<p><a href="<?php echo esc_url( self::$donation_url ); ?>" target="_blank"><?php esc_html_e( 'Click here', 'acf-to-rest-api' ); ?></a> <?php esc_html_e( 'to make a donation and help to improve the plugin.', 'acf-to-rest-api' ); ?></p>
|
16 |
+
</div>
|
shared/includes/admin/views/html-settings-section.php
ADDED
@@ -0,0 +1,8 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
if ( ! defined( 'ABSPATH' ) ) {
|
3 |
+
exit;
|
4 |
+
}
|
5 |
+
|
6 |
+
?>
|
7 |
+
|
8 |
+
<p><?php esc_html_e( 'Choose your request api version', 'acf-to-rest-api' ); ?></p>
|
shared/lib/class-acf-to-rest-api-settings.php
ADDED
@@ -0,0 +1,97 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
if ( ! defined( 'ABSPATH' ) ) {
|
4 |
+
exit;
|
5 |
+
}
|
6 |
+
|
7 |
+
if ( ! class_exists( 'ACF_To_REST_API_Settings' ) ) {
|
8 |
+
|
9 |
+
class ACF_To_REST_API_Settings {
|
10 |
+
|
11 |
+
private static $donation_url = 'https://www.paypal.com/cgi-bin/webscr?cmd=_donations&business=airesvsg%40gmail%2ecom&lc=BR&item_name=Aires%20Goncalves&no_note=0¤cy_code=USD&bn=PP%2dDonationsBF%3abtn_donateCC_LG%2egif%3aNonHostedGuest';
|
12 |
+
private static $github_url = 'http://github.com/airesvsg/acf-to-rest-api';
|
13 |
+
|
14 |
+
public static function init() {
|
15 |
+
self::hooks();
|
16 |
+
self::save();
|
17 |
+
}
|
18 |
+
|
19 |
+
private static function hooks() {
|
20 |
+
if ( ACF_To_REST_API::is_plugin_active( 'all' ) ) {
|
21 |
+
if ( current_user_can( 'manage_options' ) && ! defined( 'ACF_TO_REST_API_REQUEST_VERSION' ) ) {
|
22 |
+
add_action( 'admin_init', array( __CLASS__, 'acf_admin_setting' ) );
|
23 |
+
add_filter( 'plugin_action_links_acf-to-rest-api/class-acf-to-rest-api.php', array( __CLASS__, 'plugin_action_links' ) );
|
24 |
+
}
|
25 |
+
|
26 |
+
add_filter( 'plugin_row_meta', array( __CLASS__, 'plugin_row_meta' ), 10, 3 );
|
27 |
+
}
|
28 |
+
}
|
29 |
+
|
30 |
+
public static function add_settings_section() {
|
31 |
+
include_once dirname( __FILE__ ) . '/../includes/admin/views/html-settings-section.php';
|
32 |
+
}
|
33 |
+
|
34 |
+
public static function add_settings_field( $args ) {
|
35 |
+
$request_version = ACF_To_REST_API::handle_request_version();
|
36 |
+
|
37 |
+
include_once dirname( __FILE__ ) . '/../includes/admin/views/html-settings-field.php';
|
38 |
+
}
|
39 |
+
|
40 |
+
public static function plugin_action_links( $actions ) {
|
41 |
+
if ( ! empty( $actions ) ) {
|
42 |
+
$new_actions = array(
|
43 |
+
'acf_to_rest_api_settings' => sprintf( '<a href="%s">%s</a>', admin_url( 'options-permalink.php#acf-to-rest-api-settings' ), esc_html__( 'Settings', 'acf-to-rest-api' ) ),
|
44 |
+
);
|
45 |
+
|
46 |
+
$new_actions += $actions;
|
47 |
+
|
48 |
+
return $new_actions;
|
49 |
+
}
|
50 |
+
|
51 |
+
return $actions;
|
52 |
+
}
|
53 |
+
|
54 |
+
public static function plugin_row_meta( $plugin_meta, $plugin_file, $plugin_data ) {
|
55 |
+
if ( isset( $plugin_data['slug'] ) && 'acf-to-rest-api' == $plugin_data['slug'] ) {
|
56 |
+
$plugin_meta['acf-to-rest-api-github'] = sprintf( '<a href="%s" target="_blank">%s</a>', self::$github_url, esc_html__( 'Fork me on GitHub' ) );
|
57 |
+
$plugin_meta['acf_to_rest_api_donation'] = sprintf( '<a href="%s" target="_blank">%s</a>', self::$donation_url, esc_html__( 'Make a donation', 'acf-to-rest-api' ) );
|
58 |
+
}
|
59 |
+
|
60 |
+
return $plugin_meta;
|
61 |
+
}
|
62 |
+
|
63 |
+
public static function acf_admin_setting() {
|
64 |
+
add_settings_section(
|
65 |
+
'acf_to_rest_api_settings_section',
|
66 |
+
__( 'ACF to REST API', 'acf-to-rest-api' ),
|
67 |
+
array( __CLASS__, 'add_settings_section' ),
|
68 |
+
'permalink'
|
69 |
+
);
|
70 |
+
|
71 |
+
add_settings_field(
|
72 |
+
'acf_to_rest_api_request_version',
|
73 |
+
__( 'Request Version', 'acf-to-rest-api' ),
|
74 |
+
array( __CLASS__, 'add_settings_field' ),
|
75 |
+
'permalink',
|
76 |
+
'acf_to_rest_api_settings_section'
|
77 |
+
);
|
78 |
+
}
|
79 |
+
|
80 |
+
private static function save() {
|
81 |
+
if ( ! is_admin() ) {
|
82 |
+
return;
|
83 |
+
}
|
84 |
+
|
85 |
+
if ( isset( $_POST['acf_to_rest_api_settings'] ) ) {
|
86 |
+
$settings = $_POST['acf_to_rest_api_settings'];
|
87 |
+
if ( array_key_exists( 'request_version', $settings ) ) {
|
88 |
+
update_option( 'acf_to_rest_api_request_version', absint( $settings['request_version'] ) );
|
89 |
+
}
|
90 |
+
}
|
91 |
+
}
|
92 |
+
|
93 |
+
}
|
94 |
+
|
95 |
+
ACF_To_REST_API_Settings::init();
|
96 |
+
|
97 |
+
}
|
v3/class-acf-to-rest-api-v3.php
ADDED
@@ -0,0 +1,56 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
if ( ! defined( 'ABSPATH' ) ) {
|
4 |
+
exit;
|
5 |
+
}
|
6 |
+
|
7 |
+
if ( ! class_exists( 'ACF_To_REST_API_V3' ) ) {
|
8 |
+
class ACF_To_REST_API_V3 {
|
9 |
+
public static function includes() {
|
10 |
+
require_once dirname( __FILE__ ) . '/lib/class-acf-to-rest-api-acf-api.php';
|
11 |
+
require_once dirname( __FILE__ ) . '/lib/class-acf-to-rest-api-acf-field-settings.php';
|
12 |
+
require_once dirname( __FILE__ ) . '/lib/endpoints/class-acf-to-rest-api-controller.php';
|
13 |
+
require_once dirname( __FILE__ ) . '/lib/endpoints/class-acf-to-rest-api-posts-controller.php';
|
14 |
+
require_once dirname( __FILE__ ) . '/lib/endpoints/class-acf-to-rest-api-terms-controller.php';
|
15 |
+
require_once dirname( __FILE__ ) . '/lib/endpoints/class-acf-to-rest-api-comments-controller.php';
|
16 |
+
require_once dirname( __FILE__ ) . '/lib/endpoints/class-acf-to-rest-api-attachments-controller.php';
|
17 |
+
require_once dirname( __FILE__ ) . '/lib/endpoints/class-acf-to-rest-api-options-controller.php';
|
18 |
+
require_once dirname( __FILE__ ) . '/lib/endpoints/class-acf-to-rest-api-users-controller.php';
|
19 |
+
}
|
20 |
+
|
21 |
+
public static function create_rest_routes() {
|
22 |
+
foreach ( get_post_types( array( 'show_in_rest' => true ), 'objects' ) as $post_type ) {
|
23 |
+
if ( 'attachment' == $post_type->name ) {
|
24 |
+
$controller = new ACF_To_REST_API_Attachments_Controller( $post_type );
|
25 |
+
} else {
|
26 |
+
$controller = new ACF_To_REST_API_Posts_Controller( $post_type );
|
27 |
+
}
|
28 |
+
$controller->register();
|
29 |
+
}
|
30 |
+
|
31 |
+
foreach ( get_taxonomies( array( 'show_in_rest' => true ), 'objects' ) as $taxonomy ) {
|
32 |
+
$controller = new ACF_To_REST_API_Terms_Controller( $taxonomy );
|
33 |
+
$controller->register();
|
34 |
+
}
|
35 |
+
|
36 |
+
$controller = new ACF_To_REST_API_Comments_Controller;
|
37 |
+
$controller->register();
|
38 |
+
|
39 |
+
$controller = new ACF_To_REST_API_Options_Controller;
|
40 |
+
$controller->register();
|
41 |
+
|
42 |
+
$controller = new ACF_To_REST_API_Users_Controller;
|
43 |
+
$controller->register();
|
44 |
+
}
|
45 |
+
|
46 |
+
public static function missing_notice() {
|
47 |
+
if ( ! ACF_To_REST_API::is_plugin_active( 'rest-api' ) ) {
|
48 |
+
include dirname( __FILE__ ) . '/../shared/includes/admin/views/html-notice-missing-rest-api.php';
|
49 |
+
}
|
50 |
+
|
51 |
+
if ( ! ACF_To_REST_API::is_plugin_active( 'acf' ) ) {
|
52 |
+
include dirname( __FILE__ ) . '/../shared/includes/admin/views/html-notice-missing-acf.php';
|
53 |
+
}
|
54 |
+
}
|
55 |
+
}
|
56 |
+
}
|
v3/lib/class-acf-to-rest-api-acf-api.php
ADDED
@@ -0,0 +1,188 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
if ( ! defined( 'ABSPATH' ) ) {
|
4 |
+
exit;
|
5 |
+
}
|
6 |
+
|
7 |
+
if ( ! class_exists( 'ACF_To_REST_API_ACF_API' ) ) {
|
8 |
+
class ACF_To_REST_API_ACF_API {
|
9 |
+
protected $id = null;
|
10 |
+
protected $type = null;
|
11 |
+
protected $controller = null;
|
12 |
+
protected $field_objects = null;
|
13 |
+
|
14 |
+
public function __construct( $type, $controller = null ) {
|
15 |
+
$this->type = $type;
|
16 |
+
$this->controller = $controller;
|
17 |
+
}
|
18 |
+
|
19 |
+
protected function format_id( $object ) {
|
20 |
+
if ( $this->id ) {
|
21 |
+
switch ( $this->type ) {
|
22 |
+
case 'comment' :
|
23 |
+
$this->id = 'comment_' . $this->id;
|
24 |
+
break;
|
25 |
+
case 'user' :
|
26 |
+
$this->id = 'user_' . $this->id;
|
27 |
+
break;
|
28 |
+
default :
|
29 |
+
if ( 'ACF_To_REST_API_Terms_Controller' == $this->controller ) {
|
30 |
+
$this->id = $this->type . '_' . $this->id;
|
31 |
+
}
|
32 |
+
break;
|
33 |
+
}
|
34 |
+
}
|
35 |
+
|
36 |
+
$this->id = apply_filters( 'acf/rest_api/id', $this->id, $this->type, $this->controller );
|
37 |
+
|
38 |
+
return $this->id;
|
39 |
+
}
|
40 |
+
|
41 |
+
public function get_id( $obj ) {
|
42 |
+
$this->id = false;
|
43 |
+
|
44 |
+
if ( is_numeric( $obj ) ) {
|
45 |
+
$this->id = $obj;
|
46 |
+
} elseif ( is_array( $obj ) && isset( $obj['id'] ) ) {
|
47 |
+
$this->id = $obj['id'];
|
48 |
+
} elseif ( is_object( $obj ) ) {
|
49 |
+
if ( $obj instanceof WP_REST_Response ) {
|
50 |
+
$data = $obj->get_data();
|
51 |
+
if ( isset( $data['id'] ) ) {
|
52 |
+
$this->id = $data['id'];
|
53 |
+
}
|
54 |
+
} elseif ( $obj instanceof WP_REST_Request ) {
|
55 |
+
$this->id = $obj->get_param( 'id' );
|
56 |
+
} elseif ( isset( $obj->ID ) ) {
|
57 |
+
$this->id = $obj->ID;
|
58 |
+
} elseif ( isset( $obj->comment_ID ) ) {
|
59 |
+
$this->id = $obj->comment_ID;
|
60 |
+
} elseif ( isset( $obj->term_id ) ) {
|
61 |
+
$this->id = $obj->term_id;
|
62 |
+
}
|
63 |
+
}
|
64 |
+
|
65 |
+
if ( 'option' == $this->type ) {
|
66 |
+
$this->id = sanitize_title( $this->id );
|
67 |
+
} else {
|
68 |
+
$this->id = absint( $this->id );
|
69 |
+
}
|
70 |
+
|
71 |
+
return $this->format_id( $this->id );
|
72 |
+
}
|
73 |
+
|
74 |
+
public function get_fields( $request ) {
|
75 |
+
$data = array();
|
76 |
+
$field = null;
|
77 |
+
|
78 |
+
if ( $request instanceof WP_REST_Request ) {
|
79 |
+
$field = $request->get_param( 'field' );
|
80 |
+
}
|
81 |
+
|
82 |
+
if ( $this->get_id( $request ) ) {
|
83 |
+
if ( $field ) {
|
84 |
+
$data[ $field ] = get_field( $field, $this->id );
|
85 |
+
} else {
|
86 |
+
$fields = get_fields( $this->id );
|
87 |
+
if ( ! $fields ) {
|
88 |
+
$this->get_field_objects( $this->id );
|
89 |
+
$fields = $this->get_fields_fallback();
|
90 |
+
}
|
91 |
+
$data['acf'] = $fields;
|
92 |
+
}
|
93 |
+
|
94 |
+
if ( apply_filters( 'acf/rest_api/field_settings/show_in_rest', false ) && $this->get_field_objects( $this->id ) ) {
|
95 |
+
if ( $field ) {
|
96 |
+
$this->show_in_rest( $data, $field, $this->field_objects );
|
97 |
+
} else {
|
98 |
+
foreach ( array_keys( $data['acf'] ) as $key ) {
|
99 |
+
$this->show_in_rest( $data['acf'], $key, $this->field_objects );
|
100 |
+
}
|
101 |
+
}
|
102 |
+
}
|
103 |
+
} else {
|
104 |
+
$data['acf'] = array();
|
105 |
+
}
|
106 |
+
|
107 |
+
return apply_filters( 'acf/rest_api/' . $this->type . '/get_fields', $data, $request );
|
108 |
+
}
|
109 |
+
|
110 |
+
protected function get_fields_fallback() {
|
111 |
+
$fields = array();
|
112 |
+
|
113 |
+
if ( ! empty( $this->field_objects ) ) {
|
114 |
+
foreach ( $this->field_objects as $obj ) {
|
115 |
+
if( isset( $obj['name'] ) && ! empty( $obj['name'] ) ) {
|
116 |
+
$fields[ $obj['name'] ] = get_field( $obj['name'], $this->id );
|
117 |
+
}
|
118 |
+
}
|
119 |
+
}
|
120 |
+
|
121 |
+
return $fields;
|
122 |
+
}
|
123 |
+
|
124 |
+
public function get_field_objects( $id ) {
|
125 |
+
if ( empty( $id ) ) {
|
126 |
+
return false;
|
127 |
+
}
|
128 |
+
|
129 |
+
$this->field_objects = false;
|
130 |
+
$fields_tmp = array();
|
131 |
+
|
132 |
+
if ( function_exists( 'acf_get_field_groups' ) && function_exists( 'acf_get_fields' ) && function_exists( 'acf_extract_var' ) ) {
|
133 |
+
$field_groups = acf_get_field_groups( array( 'post_id' => $id ) );
|
134 |
+
|
135 |
+
if ( is_array( $field_groups ) && ! empty( $field_groups ) ) {
|
136 |
+
foreach ( $field_groups as $field_group ) {
|
137 |
+
$field_group_fields = acf_get_fields( $field_group );
|
138 |
+
if ( is_array( $field_group_fields ) && ! empty( $field_group_fields ) ) {
|
139 |
+
foreach ( array_keys( $field_group_fields ) as $i ) {
|
140 |
+
$fields_tmp[] = acf_extract_var( $field_group_fields, $i );
|
141 |
+
}
|
142 |
+
}
|
143 |
+
}
|
144 |
+
}
|
145 |
+
} else {
|
146 |
+
if ( strpos( $id, 'user_' ) !== false ) {
|
147 |
+
$filter = array( 'ef_user' => str_replace( 'user_', '', $id ) );
|
148 |
+
} elseif ( strpos( $id, 'taxonomy_' ) !== false ) {
|
149 |
+
$filter = array( 'ef_taxonomy' => str_replace( 'taxonomy_', '', $id ) );
|
150 |
+
} else {
|
151 |
+
$filter = array( 'post_id' => $id );
|
152 |
+
}
|
153 |
+
|
154 |
+
$field_groups = apply_filters( 'acf/location/match_field_groups', array(), $filter );
|
155 |
+
$acfs = apply_filters( 'acf/get_field_groups', array() );
|
156 |
+
|
157 |
+
if ( is_array( $acfs ) && ! empty( $acfs ) && is_array( $field_groups ) && ! empty( $field_groups ) ) {
|
158 |
+
foreach ( $acfs as $acf ) {
|
159 |
+
if ( in_array( $acf['id'], $field_groups ) ) {
|
160 |
+
$fields_tmp = array_merge( $fields_tmp, apply_filters( 'acf/field_group/get_fields', array(), $acf['id'] ) );
|
161 |
+
}
|
162 |
+
}
|
163 |
+
}
|
164 |
+
}
|
165 |
+
|
166 |
+
if ( is_array( $fields_tmp ) && ! empty( $fields_tmp ) ) {
|
167 |
+
$this->field_objects = array();
|
168 |
+
foreach ( $fields_tmp as $field ) {
|
169 |
+
if ( is_array( $field ) && isset( $field['name'] ) ) {
|
170 |
+
$this->field_objects[ $field['name'] ] = $field;
|
171 |
+
}
|
172 |
+
}
|
173 |
+
}
|
174 |
+
|
175 |
+
return $this->field_objects;
|
176 |
+
}
|
177 |
+
|
178 |
+
public function show_in_rest( &$data, $field, $field_objects ) {
|
179 |
+
if ( ! array_key_exists( $field, $field_objects ) || ! isset( $field_objects[ $field ]['show_in_rest'] ) || ! $field_objects[ $field ]['show_in_rest'] ) {
|
180 |
+
unset( $data[ $field ] );
|
181 |
+
}
|
182 |
+
}
|
183 |
+
|
184 |
+
public function edit_in_rest( $field ) {
|
185 |
+
return ! ( apply_filters( 'acf/rest_api/field_settings/edit_in_rest', false ) && isset( $field['edit_in_rest'] ) && ! $field['edit_in_rest'] );
|
186 |
+
}
|
187 |
+
}
|
188 |
+
}
|
v3/lib/class-acf-to-rest-api-acf-field-settings.php
ADDED
@@ -0,0 +1,103 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
if ( ! defined( 'ABSPATH' ) ) {
|
4 |
+
exit;
|
5 |
+
}
|
6 |
+
|
7 |
+
if ( ! class_exists( 'ACF_To_REST_API_ACF_Field_Settings' ) ) {
|
8 |
+
class ACF_To_REST_API_ACF_Field_Settings {
|
9 |
+
private function __construct() {}
|
10 |
+
|
11 |
+
public static function hooks() {
|
12 |
+
if ( function_exists( 'acf_render_field_setting' ) ) {
|
13 |
+
add_action( 'acf/render_field_settings', array( __CLASS__, 'render_field_settings' ) );
|
14 |
+
} else {
|
15 |
+
add_action( 'acf/create_field_options', array( __CLASS__, 'render_field_settings' ) );
|
16 |
+
}
|
17 |
+
}
|
18 |
+
|
19 |
+
public static function render_field_settings( $field ) {
|
20 |
+
if ( apply_filters( 'acf/rest_api/field_settings/show_in_rest', false ) ) {
|
21 |
+
self::show_in_rest( $field );
|
22 |
+
}
|
23 |
+
|
24 |
+
if ( apply_filters( 'acf/rest_api/field_settings/edit_in_rest', false ) ) {
|
25 |
+
self::edit_in_rest( $field );
|
26 |
+
}
|
27 |
+
}
|
28 |
+
|
29 |
+
private static function edit_in_rest( $field ) {
|
30 |
+
if ( function_exists( 'acf_render_field_setting' ) ) {
|
31 |
+
acf_render_field_setting( $field, array(
|
32 |
+
'label' => __( 'Edit in REST API?', 'acf-to-rest-api' ),
|
33 |
+
'instructions' => '',
|
34 |
+
'type' => 'true_false',
|
35 |
+
'name' => 'edit_in_rest',
|
36 |
+
'ui' => 1,
|
37 |
+
'class' => 'field-edit_in_rest',
|
38 |
+
'default_value' => 0,
|
39 |
+
), true );
|
40 |
+
} else { ?>
|
41 |
+
<tr>
|
42 |
+
<td class="label">
|
43 |
+
<label><?php esc_html_e( 'Edit in REST API?', 'acf-to-rest-api' ); ?></label>
|
44 |
+
</td>
|
45 |
+
<td>
|
46 |
+
<?php
|
47 |
+
if ( ! isset( $field['edit_in_rest'] ) ) {
|
48 |
+
$field['edit_in_rest'] = 0;
|
49 |
+
}
|
50 |
+
do_action( 'acf/create_field', array(
|
51 |
+
'type' => 'radio',
|
52 |
+
'name' => 'fields[' . $field['name'] . '][edit_in_rest]',
|
53 |
+
'value' => $field['edit_in_rest'],
|
54 |
+
'layout' => 'horizontal',
|
55 |
+
'choices' => array(
|
56 |
+
1 => __( 'Yes', 'acf-to-rest-api' ),
|
57 |
+
0 => __( 'No', 'acf-to-rest-api' ),
|
58 |
+
),
|
59 |
+
) ); ?>
|
60 |
+
</td>
|
61 |
+
</tr>
|
62 |
+
<?php
|
63 |
+
}
|
64 |
+
}
|
65 |
+
|
66 |
+
private static function show_in_rest( $field ) {
|
67 |
+
if ( function_exists( 'acf_render_field_setting' ) ) {
|
68 |
+
acf_render_field_setting( $field, array(
|
69 |
+
'label' => __( 'Show in REST API?', 'acf-to-rest-api' ),
|
70 |
+
'instructions' => '',
|
71 |
+
'type' => 'true_false',
|
72 |
+
'name' => 'show_in_rest',
|
73 |
+
'ui' => 1,
|
74 |
+
'class' => 'field-show_in_rest',
|
75 |
+
'default_value' => 0,
|
76 |
+
), true );
|
77 |
+
} else { ?>
|
78 |
+
<tr>
|
79 |
+
<td class="label">
|
80 |
+
<label><?php esc_html_e( 'Show in REST API?', 'acf-to-rest-api' ); ?></label>
|
81 |
+
</td>
|
82 |
+
<td>
|
83 |
+
<?php
|
84 |
+
if ( ! isset( $field['show_in_rest'] ) ) {
|
85 |
+
$field['show_in_rest'] = 0;
|
86 |
+
}
|
87 |
+
do_action( 'acf/create_field', array(
|
88 |
+
'type' => 'radio',
|
89 |
+
'name' => 'fields[' . $field['name'] . '][show_in_rest]',
|
90 |
+
'value' => $field['show_in_rest'],
|
91 |
+
'layout' => 'horizontal',
|
92 |
+
'choices' => array(
|
93 |
+
1 => __( 'Yes', 'acf-to-rest-api' ),
|
94 |
+
0 => __( 'No', 'acf-to-rest-api' ),
|
95 |
+
),
|
96 |
+
) ); ?>
|
97 |
+
</td>
|
98 |
+
</tr>
|
99 |
+
<?php
|
100 |
+
}
|
101 |
+
}
|
102 |
+
}
|
103 |
+
}
|
v3/lib/endpoints/class-acf-to-rest-api-attachments-controller.php
ADDED
@@ -0,0 +1,20 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
if ( ! defined( 'ABSPATH' ) ) {
|
4 |
+
exit;
|
5 |
+
}
|
6 |
+
|
7 |
+
if ( ! class_exists( 'ACF_To_REST_API_Attachments_Controller' ) ) {
|
8 |
+
class ACF_To_REST_API_Attachments_Controller extends ACF_To_REST_API_Controller {
|
9 |
+
public function __construct( $type ) {
|
10 |
+
$this->type = $type->name;
|
11 |
+
$this->rest_base = ! empty( $type->rest_base ) ? $type->rest_base : $type->name;
|
12 |
+
parent::__construct( $type );
|
13 |
+
}
|
14 |
+
|
15 |
+
public function get_items( $request ) {
|
16 |
+
$this->controller = new WP_REST_Attachments_Controller( $this->type );
|
17 |
+
return parent::get_items( $request );
|
18 |
+
}
|
19 |
+
}
|
20 |
+
}
|
v3/lib/endpoints/class-acf-to-rest-api-comments-controller.php
ADDED
@@ -0,0 +1,20 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
if ( ! defined( 'ABSPATH' ) ) {
|
4 |
+
exit;
|
5 |
+
}
|
6 |
+
|
7 |
+
if ( ! class_exists( 'ACF_To_REST_API_Comments_Controller' ) ) {
|
8 |
+
class ACF_To_REST_API_Comments_Controller extends ACF_To_REST_API_Controller {
|
9 |
+
public function __construct() {
|
10 |
+
$this->type = 'comment';
|
11 |
+
$this->rest_base = 'comments';
|
12 |
+
parent::__construct();
|
13 |
+
}
|
14 |
+
|
15 |
+
public function get_items( $request ) {
|
16 |
+
$this->controller = new WP_REST_Comments_Controller;
|
17 |
+
return parent::get_items( $request );
|
18 |
+
}
|
19 |
+
}
|
20 |
+
}
|
v3/lib/endpoints/class-acf-to-rest-api-controller.php
ADDED
@@ -0,0 +1,184 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
if ( ! defined( 'ABSPATH' ) ) {
|
4 |
+
exit;
|
5 |
+
}
|
6 |
+
|
7 |
+
if ( ! class_exists( 'ACF_To_REST_API_Controller' ) ) {
|
8 |
+
class ACF_To_REST_API_Controller extends WP_REST_Controller {
|
9 |
+
protected $acf = null;
|
10 |
+
protected $type = null;
|
11 |
+
protected $controller = null;
|
12 |
+
|
13 |
+
protected static $default_params = array(
|
14 |
+
'page' => 1,
|
15 |
+
'per_page' => 10,
|
16 |
+
'orderby' => 'id',
|
17 |
+
);
|
18 |
+
|
19 |
+
public function __construct( $type = null ) {
|
20 |
+
$this->namespace = 'acf/v3';
|
21 |
+
$this->acf = new ACF_To_REST_API_ACF_API( $this->type, get_class( $this ) );
|
22 |
+
}
|
23 |
+
|
24 |
+
public function register_hooks() {
|
25 |
+
add_action( 'rest_insert_' . $this->type, array( $this, 'rest_insert' ), 10, 3 );
|
26 |
+
}
|
27 |
+
|
28 |
+
public function register_routes() {
|
29 |
+
register_rest_route( $this->namespace, '/' . $this->rest_base . '/(?P<id>[\d]+)/?(?P<field>[\w\-\_]+)?', array(
|
30 |
+
array(
|
31 |
+
'methods' => WP_REST_Server::READABLE,
|
32 |
+
'callback' => array( $this, 'get_item' ),
|
33 |
+
'permission_callback' => array( $this, 'get_item_permissions_check' ),
|
34 |
+
),
|
35 |
+
array(
|
36 |
+
'methods' => WP_REST_Server::EDITABLE,
|
37 |
+
'callback' => array( $this, 'update_item' ),
|
38 |
+
'permission_callback' => array( $this, 'update_item_permissions_check' ),
|
39 |
+
),
|
40 |
+
) );
|
41 |
+
|
42 |
+
register_rest_route( $this->namespace, '/' . $this->rest_base, array(
|
43 |
+
array(
|
44 |
+
'methods' => WP_REST_Server::READABLE,
|
45 |
+
'callback' => array( $this, 'get_items' ),
|
46 |
+
'permission_callback' => array( $this, 'get_items_permissions_check' ),
|
47 |
+
),
|
48 |
+
) );
|
49 |
+
}
|
50 |
+
|
51 |
+
public function register_field() {
|
52 |
+
register_rest_field( $this->type, 'acf', array(
|
53 |
+
'get_callback' => function( $data ) {
|
54 |
+
$fields = $this->acf->get_fields( $data );
|
55 |
+
return $fields['acf'];
|
56 |
+
},
|
57 |
+
'schema' => array(
|
58 |
+
'description' => __( 'Expose advanced custom fields.', 'acf-to-rest-api' ),
|
59 |
+
'type' => 'object',
|
60 |
+
),
|
61 |
+
) );
|
62 |
+
}
|
63 |
+
|
64 |
+
public function register() {
|
65 |
+
$this->register_routes();
|
66 |
+
$this->register_hooks();
|
67 |
+
$this->register_field();
|
68 |
+
}
|
69 |
+
|
70 |
+
public function get_item( $request ) {
|
71 |
+
$fields = $this->acf->get_fields( $request );
|
72 |
+
return rest_ensure_response( $fields );
|
73 |
+
}
|
74 |
+
|
75 |
+
public function get_item_permissions_check( $request ) {
|
76 |
+
return apply_filters( 'acf/rest_api/item_permissions/get', true, $request, $this->type );
|
77 |
+
}
|
78 |
+
|
79 |
+
public function get_items( $request ) {
|
80 |
+
if ( ! method_exists( $this->controller, 'get_items' ) ) {
|
81 |
+
return new WP_Error( 'cant_get_items', __( 'Cannot get items', 'acf-to-rest-api' ), array( 'status' => 500 ) );
|
82 |
+
}
|
83 |
+
|
84 |
+
$this->set_default_parameters( $request );
|
85 |
+
$data = $this->controller->get_items( $request )->get_data();
|
86 |
+
|
87 |
+
$response = array();
|
88 |
+
if ( ! empty( $data ) ) {
|
89 |
+
foreach ( $data as $v ) {
|
90 |
+
if ( isset( $v['acf'] ) ) {
|
91 |
+
$response[] = array(
|
92 |
+
'id' => $v['id'],
|
93 |
+
'acf' => $v['acf'],
|
94 |
+
);
|
95 |
+
}
|
96 |
+
}
|
97 |
+
}
|
98 |
+
|
99 |
+
return apply_filters( 'acf/rest_api/' . $this->type . '/get_items', rest_ensure_response( $response ), rest_ensure_request( $request ) );
|
100 |
+
}
|
101 |
+
|
102 |
+
public function get_items_permissions_check( $request ) {
|
103 |
+
return apply_filters( 'acf/rest_api/items_permissions/get', true, $request, $this->type );
|
104 |
+
}
|
105 |
+
|
106 |
+
public function update_item_permissions_check( $request ) {
|
107 |
+
return apply_filters( 'acf/rest_api/item_permissions/update', current_user_can( 'edit_posts' ), $request, $this->type );
|
108 |
+
}
|
109 |
+
|
110 |
+
public function update_item( $request ) {
|
111 |
+
$item = $this->prepare_item_for_database( $request );
|
112 |
+
if ( is_array( $item ) && count( $item ) > 0 ) {
|
113 |
+
foreach ( $item['data'] as $key => $value ) {
|
114 |
+
if ( isset( $item['fields'][ $key ]['key'] ) ) {
|
115 |
+
$field = $item['fields'][ $key ];
|
116 |
+
$edit = $this->acf->edit_in_rest( $field );
|
117 |
+
if ( $edit ) {
|
118 |
+
if ( function_exists( 'acf_update_value' ) ) {
|
119 |
+
acf_update_value( $value, $item['id'], $field );
|
120 |
+
} elseif ( function_exists( 'update_field' ) ) {
|
121 |
+
update_field( $field['key'], $value, $item['id'] );
|
122 |
+
} else {
|
123 |
+
do_action( 'acf/update_value', $value, $item['id'], $field );
|
124 |
+
}
|
125 |
+
}
|
126 |
+
}
|
127 |
+
}
|
128 |
+
|
129 |
+
return new WP_REST_Response( $this->acf->get_fields( $request ), 200 );
|
130 |
+
}
|
131 |
+
|
132 |
+
return new WP_Error( 'cant_update_item', __( 'Cannot update item', 'acf-to-rest-api' ), array( 'status' => 500 ) );
|
133 |
+
}
|
134 |
+
|
135 |
+
public function rest_insert( $object, $request, $creating ) {
|
136 |
+
if ( $request instanceof WP_REST_Request ) {
|
137 |
+
$id = $this->acf->get_id( $object );
|
138 |
+
if ( ! $id ) {
|
139 |
+
$id = $this->acf->get_id( $request );
|
140 |
+
}
|
141 |
+
$request->set_param( 'id', $id );
|
142 |
+
}
|
143 |
+
|
144 |
+
return $this->update_item( $request );
|
145 |
+
}
|
146 |
+
|
147 |
+
public function prepare_item_for_database( $request ) {
|
148 |
+
$item = false;
|
149 |
+
if ( $request instanceof WP_REST_Request ) {
|
150 |
+
$key = apply_filters( 'acf/rest_api/key', 'fields', $request, $this->type );
|
151 |
+
if ( is_string( $key ) && ! empty( $key ) ) {
|
152 |
+
$data = $request->get_param( $key );
|
153 |
+
$field = $request->get_param( 'field' );
|
154 |
+
$id = $this->acf->get_id( $request );
|
155 |
+
if ( $id && is_array( $data ) ) {
|
156 |
+
$fields = $this->acf->get_field_objects( $id );
|
157 |
+
if ( is_array( $fields ) && ! empty( $fields ) ) {
|
158 |
+
if ( $field && isset( $data[ $field ] ) ) {
|
159 |
+
$data = array( $field => $data[ $field ] );
|
160 |
+
}
|
161 |
+
$item = array(
|
162 |
+
'id' => $id,
|
163 |
+
'fields' => $fields,
|
164 |
+
'data' => $data,
|
165 |
+
);
|
166 |
+
}
|
167 |
+
}
|
168 |
+
}
|
169 |
+
}
|
170 |
+
return apply_filters( 'acf/rest_api/' . $this->type . '/prepare_item', $item, $request );
|
171 |
+
}
|
172 |
+
|
173 |
+
protected function set_default_parameters( &$request ) {
|
174 |
+
if ( $request instanceof WP_REST_Request ) {
|
175 |
+
$params = $request->get_params();
|
176 |
+
foreach ( self::$default_params as $k => $v ) {
|
177 |
+
if ( ! isset( $params[ $k ] ) ) {
|
178 |
+
$request->set_param( $k, $v );
|
179 |
+
}
|
180 |
+
}
|
181 |
+
}
|
182 |
+
}
|
183 |
+
}
|
184 |
+
}
|
v3/lib/endpoints/class-acf-to-rest-api-options-controller.php
ADDED
@@ -0,0 +1,31 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
if ( ! defined( 'ABSPATH' ) ) {
|
4 |
+
exit;
|
5 |
+
}
|
6 |
+
|
7 |
+
if ( ! class_exists( 'ACF_To_REST_API_Options_Controller' ) ) {
|
8 |
+
class ACF_To_REST_API_Options_Controller extends ACF_To_REST_API_Controller {
|
9 |
+
public function __construct() {
|
10 |
+
$this->type = 'option';
|
11 |
+
$this->rest_base = 'options';
|
12 |
+
parent::__construct();
|
13 |
+
}
|
14 |
+
|
15 |
+
public function register_routes() {
|
16 |
+
register_rest_route( $this->namespace, '/' . $this->rest_base . '/(?P<id>[\w\-\_]+)/?(?P<field>[\w\-\_]+)?', array(
|
17 |
+
array(
|
18 |
+
'methods' => WP_REST_Server::READABLE,
|
19 |
+
'callback' => array( $this, 'get_item' ),
|
20 |
+
'permission_callback' => array( $this, 'get_item_permissions_check' ),
|
21 |
+
),
|
22 |
+
array(
|
23 |
+
'methods' => WP_REST_Server::EDITABLE,
|
24 |
+
'callback' => array( $this, 'update_item' ),
|
25 |
+
'permission_callback' => array( $this, 'update_item_permissions_check' ),
|
26 |
+
),
|
27 |
+
) );
|
28 |
+
}
|
29 |
+
|
30 |
+
}
|
31 |
+
}
|
v3/lib/endpoints/class-acf-to-rest-api-posts-controller.php
ADDED
@@ -0,0 +1,20 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
if ( ! defined( 'ABSPATH' ) ) {
|
4 |
+
exit;
|
5 |
+
}
|
6 |
+
|
7 |
+
if ( ! class_exists( 'ACF_To_REST_API_Posts_Controller' ) ) {
|
8 |
+
class ACF_To_REST_API_Posts_Controller extends ACF_To_REST_API_Controller {
|
9 |
+
public function __construct( $type ) {
|
10 |
+
$this->type = $type->name;
|
11 |
+
$this->rest_base = ! empty( $type->rest_base ) ? $type->rest_base : $type->name;
|
12 |
+
parent::__construct( $type );
|
13 |
+
}
|
14 |
+
|
15 |
+
public function get_items( $request ) {
|
16 |
+
$this->controller = new WP_REST_Posts_Controller( $this->type );
|
17 |
+
return parent::get_items( $request );
|
18 |
+
}
|
19 |
+
}
|
20 |
+
}
|
v3/lib/endpoints/class-acf-to-rest-api-terms-controller.php
ADDED
@@ -0,0 +1,20 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
if ( ! defined( 'ABSPATH' ) ) {
|
4 |
+
exit;
|
5 |
+
}
|
6 |
+
|
7 |
+
if ( ! class_exists( 'ACF_To_REST_API_Terms_Controller' ) ) {
|
8 |
+
class ACF_To_REST_API_Terms_Controller extends ACF_To_REST_API_Controller {
|
9 |
+
public function __construct( $type ) {
|
10 |
+
$this->type = $type->name;
|
11 |
+
$this->rest_base = ! empty( $type->rest_base ) ? $type->rest_base : $type->name;
|
12 |
+
parent::__construct( $type );
|
13 |
+
}
|
14 |
+
|
15 |
+
public function get_items( $request ) {
|
16 |
+
$this->controller = new WP_REST_Terms_Controller( $this->type );
|
17 |
+
return parent::get_items( $request );
|
18 |
+
}
|
19 |
+
}
|
20 |
+
}
|
v3/lib/endpoints/class-acf-to-rest-api-users-controller.php
ADDED
@@ -0,0 +1,20 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
if ( ! defined( 'ABSPATH' ) ) {
|
4 |
+
exit;
|
5 |
+
}
|
6 |
+
|
7 |
+
if ( ! class_exists( 'ACF_To_REST_API_Users_Controller' ) ) {
|
8 |
+
class ACF_To_REST_API_Users_Controller extends ACF_To_REST_API_Controller {
|
9 |
+
public function __construct() {
|
10 |
+
$this->type = 'user';
|
11 |
+
$this->rest_base = 'users';
|
12 |
+
parent::__construct();
|
13 |
+
}
|
14 |
+
|
15 |
+
public function get_items( $request ) {
|
16 |
+
$this->controller = new WP_REST_Users_Controller;
|
17 |
+
return parent::get_items( $request );
|
18 |
+
}
|
19 |
+
}
|
20 |
+
}
|