1
|
|
|
<?php |
2
|
|
|
/** |
3
|
|
|
* Plugin Name: Fields API |
4
|
|
|
* Plugin URI: https://github.com/sc0ttkclark/wordpress-fields-api |
5
|
|
|
* Description: WordPress Fields API prototype and proposal for WordPress core |
6
|
|
|
* Version: 0.0.6 Beta |
7
|
|
|
* Author: Scott Kingsley Clark |
8
|
|
|
* Author URI: http://scottkclark.com/ |
9
|
|
|
* License: GPL2+ |
10
|
|
|
* GitHub Plugin URI: https://github.com/sc0ttkclark/wordpress-fields-api |
11
|
|
|
* GitHub Branch: master |
12
|
|
|
* Requires WP: 4.4 |
13
|
|
|
*/ |
14
|
|
|
|
15
|
|
|
// @todo Remove this when done testing |
16
|
|
|
if ( defined( 'WP_FIELDS_API_TESTING' ) && WP_FIELDS_API_TESTING && ! empty( $_GET['no-fields-api'] ) ) { |
17
|
|
|
return; |
18
|
|
|
} |
19
|
|
|
|
20
|
|
|
/** |
21
|
|
|
* @package WordPress |
22
|
|
|
* @subpackage Fields_API |
23
|
|
|
* |
24
|
|
|
* @codeCoverageIgnore |
25
|
|
|
*/ |
26
|
|
|
|
27
|
|
|
/** |
28
|
|
|
* The absolute server path to the fields API directory. |
29
|
|
|
*/ |
30
|
|
|
define( 'WP_FIELDS_API_DIR', plugin_dir_path( __FILE__ ) ); |
31
|
|
|
|
32
|
|
|
/** |
33
|
|
|
* On `plugins_loaded`, create an instance of the Fields API manager class. |
34
|
|
|
*/ |
35
|
|
|
function _wp_fields_api_include() { |
36
|
|
|
|
37
|
|
|
// Bail if we're already in WP core (depending on the name used) |
38
|
|
|
if ( class_exists( 'WP_Fields_API' ) || class_exists( 'Fields_API' ) ) { |
39
|
|
|
return; |
40
|
|
|
} |
41
|
|
|
|
42
|
|
|
if ( ! defined( 'WP_FIELDS_API_EXAMPLES' ) ) { |
43
|
|
|
define( 'WP_FIELDS_API_EXAMPLES', false ); |
44
|
|
|
} |
45
|
|
|
|
46
|
|
|
require_once( WP_FIELDS_API_DIR . 'implementation/wp-includes/fields-api/class-wp-fields-api.php' ); |
47
|
|
|
|
48
|
|
|
// Init Fields API class |
49
|
|
|
$GLOBALS['wp_fields'] = WP_Fields_API::get_instance(); |
50
|
|
|
|
51
|
|
|
} |
52
|
|
|
|
53
|
|
|
add_action( 'plugins_loaded', '_wp_fields_api_include', 8 ); |
54
|
|
|
|
55
|
|
|
/** |
56
|
|
|
* Implement Fields API Customizer instead of WP Core Customizer. |
57
|
|
|
*/ |
58
|
|
|
function _wp_fields_api_customize_include() { |
59
|
|
|
|
60
|
|
|
if ( ! ( ( isset( $_REQUEST['wp_customize'] ) && 'on' == $_REQUEST['wp_customize'] ) || ( is_admin() && 'customize.php' == basename( $_SERVER['PHP_SELF'] ) ) ) ) { |
61
|
|
|
return; |
62
|
|
|
} |
63
|
|
|
|
64
|
|
|
require_once( WP_FIELDS_API_DIR . 'implementation/wp-includes/class-wp-customize-manager.php' ); |
65
|
|
|
|
66
|
|
|
// Init Customize class |
67
|
|
|
$GLOBALS['wp_customize'] = new WP_Customize_Manager; |
68
|
|
|
|
69
|
|
|
} |
70
|
|
|
|
71
|
|
|
/*remove_action( 'plugins_loaded', '_wp_customize_include' ); |
|
|
|
|
72
|
|
|
add_action( 'plugins_loaded', '_wp_fields_api_customize_include', 9 );*/ |
73
|
|
|
|
74
|
|
|
/** |
75
|
|
|
* Include Implementations |
76
|
|
|
*/ |
77
|
|
|
function _wp_fields_api_implementations() { |
78
|
|
|
|
79
|
|
|
$implementation_dir = WP_FIELDS_API_DIR . 'implementation/wp-includes/fields-api/forms/'; |
80
|
|
|
|
81
|
|
|
// Meta boxes |
82
|
|
|
add_action( 'add_meta_boxes', array( 'WP_Fields_API_Meta_Box_Section', 'add_meta_boxes' ), 10, 2 ); |
83
|
|
|
|
84
|
|
|
// Post |
85
|
|
|
require_once( $implementation_dir . 'class-wp-fields-api-form-post.php' ); |
86
|
|
|
|
87
|
|
|
WP_Fields_API_Form_Post::register( 'post', 'post-edit' ); |
88
|
|
|
|
89
|
|
|
// Term |
90
|
|
|
require_once( $implementation_dir . 'class-wp-fields-api-form-term.php' ); |
91
|
|
|
require_once( $implementation_dir . 'class-wp-fields-api-form-term-add.php' ); |
92
|
|
|
|
93
|
|
|
WP_Fields_API_Form_Term::register( 'term', 'term-edit' ); |
94
|
|
|
WP_Fields_API_Form_Term_Add::register( 'term', 'term-add' ); |
95
|
|
|
|
96
|
|
|
// User |
97
|
|
|
require_once( $implementation_dir . 'class-wp-fields-api-form-user-edit.php' ); |
98
|
|
|
|
99
|
|
|
WP_Fields_API_Form_User_Edit::register( 'user', 'user-edit' ); |
100
|
|
|
|
101
|
|
|
// Comment |
102
|
|
|
require_once( $implementation_dir . 'class-wp-fields-api-form-comment.php' ); |
103
|
|
|
|
104
|
|
|
WP_Fields_API_Form_Comment::register( 'comment', 'comment-edit' ); |
105
|
|
|
|
106
|
|
|
// Settings |
107
|
|
|
require_once( $implementation_dir . 'settings/class-wp-fields-api-form-settings.php' ); |
108
|
|
|
require_once( $implementation_dir . 'settings/class-wp-fields-api-form-settings-general.php' ); |
109
|
|
|
|
110
|
|
|
WP_Fields_API_Form_Settings_General::register( 'settings', 'general' ); |
111
|
|
|
|
112
|
|
|
// Settings API compatibility |
113
|
|
|
require_once( $implementation_dir . 'settings/class-wp-fields-api-settings-api.php' ); |
114
|
|
|
|
115
|
|
|
// Run Settings API compatibility (has it's own hooks) |
116
|
|
|
new WP_Fields_API_Settings_API; |
117
|
|
|
|
118
|
|
|
} |
119
|
|
|
add_action( 'fields_register', '_wp_fields_api_implementations', 5 ); |
120
|
|
|
|
121
|
|
|
// Post |
122
|
|
|
add_action( 'load-post.php', '_wp_fields_api_load_include', 999 ); |
123
|
|
|
|
124
|
|
|
// Term |
125
|
|
|
add_action( 'load-edit-tags.php', '_wp_fields_api_load_include', 999 ); |
126
|
|
|
|
127
|
|
|
// User |
128
|
|
|
add_action( 'load-user-edit.php', '_wp_fields_api_load_include', 999 ); |
129
|
|
|
add_action( 'load-profile.php', '_wp_fields_api_load_include', 999 ); |
130
|
|
|
|
131
|
|
|
// Comment |
132
|
|
|
add_action( 'load-comment.php', '_wp_fields_api_load_include', 999 ); |
133
|
|
|
|
134
|
|
|
// Settings |
135
|
|
|
add_action( 'load-options-general.php', '_wp_fields_api_load_include', 999 ); |
136
|
|
|
|
137
|
|
|
function _wp_fields_api_load_include() { |
138
|
|
|
|
139
|
|
|
global $pagenow; |
140
|
|
|
|
141
|
|
|
static $overridden; |
142
|
|
|
|
143
|
|
|
if ( empty( $overridden ) ) { |
144
|
|
|
$overridden = array(); |
145
|
|
|
} |
146
|
|
|
|
147
|
|
|
$load_path = WP_FIELDS_API_DIR . 'implementation/wp-admin/'; |
148
|
|
|
|
149
|
|
|
if ( file_exists( $load_path . $pagenow ) && ! in_array( $pagenow, $overridden ) ) { |
150
|
|
|
$overridden[] = $pagenow; |
151
|
|
|
|
152
|
|
|
_wp_fields_api_override_compatibility(); |
153
|
|
|
|
154
|
|
|
// Load our override |
155
|
|
|
require_once( $load_path . $pagenow ); |
156
|
|
|
|
157
|
|
|
// Bail on original core file, don't run the rest |
158
|
|
|
exit; |
159
|
|
|
} |
160
|
|
|
|
161
|
|
|
} |
162
|
|
|
|
163
|
|
|
/** |
164
|
|
|
* Used to maintain compatibiltiy on all overrides |
165
|
|
|
*/ |
166
|
|
|
function _wp_fields_api_override_compatibility() { |
167
|
|
|
|
168
|
|
|
global $typenow, $pagenow, $taxnow; |
169
|
|
|
|
170
|
|
|
/* |
171
|
|
|
* The following hooks are fired to ensure backward compatibility. |
172
|
|
|
* In all other cases, 'load-' . $pagenow should be used instead. |
173
|
|
|
*/ |
174
|
|
|
if ( $typenow == 'page' ) { |
175
|
|
|
if ( $pagenow == 'post-new.php' ) |
176
|
|
|
do_action( 'load-page-new.php' ); |
177
|
|
|
elseif ( $pagenow == 'post.php' ) |
178
|
|
|
do_action( 'load-page.php' ); |
179
|
|
|
} elseif ( $pagenow == 'edit-tags.php' ) { |
180
|
|
|
if ( $taxnow == 'category' ) |
181
|
|
|
do_action( 'load-categories.php' ); |
182
|
|
|
elseif ( $taxnow == 'link_category' ) |
183
|
|
|
do_action( 'load-edit-link-categories.php' ); |
184
|
|
|
} |
185
|
|
|
|
186
|
|
|
if ( ! empty( $_REQUEST['action'] ) ) { |
187
|
|
|
/** |
188
|
|
|
* Fires when an 'action' request variable is sent. |
189
|
|
|
* |
190
|
|
|
* The dynamic portion of the hook name, `$_REQUEST['action']`, |
191
|
|
|
* refers to the action derived from the `GET` or `POST` request. |
192
|
|
|
* |
193
|
|
|
* @since 2.6.0 |
194
|
|
|
*/ |
195
|
|
|
do_action( 'admin_action_' . $_REQUEST['action'] ); |
196
|
|
|
} |
197
|
|
|
|
198
|
|
|
} |
Sometimes obsolete code just ends up commented out instead of removed. In this case it is better to remove the code once you have checked you do not need it.
The code might also have been commented out for debugging purposes. In this case it is vital that someone uncomments it again or your project may behave in very unexpected ways in production.
This check looks for comments that seem to be mostly valid code and reports them.