Duplicate code is one of the most pungent code smells. A rule that is often used is to re-structure code once it is duplicated in three or more places.
Common duplication problems, and corresponding solutions are:
Complex classes like PodsInit often do a lot of different things. To break such a class down, we need to identify a cohesive component within that class. A common approach to find such a component is to look for fields/methods that share the same prefixes, or suffixes. You can also have a look at the cohesion graph to spot any un-connected, or weakly-connected components.
Once you have determined the fields that belong together, you can apply the Extract Class refactoring. If the component makes sense as a sub-class, Extract Subclass is also a candidate, and is often faster.
While breaking up the class, it is a good idea to analyze how other classes use PodsInit, and based on these observations, apply Extract Interface, too.
1 | <?php |
||
5 | class PodsInit { |
||
6 | |||
7 | /** |
||
8 | * @var PodsInit |
||
9 | */ |
||
10 | static $instance = null; |
||
|
|||
11 | |||
12 | /** |
||
13 | * @var array |
||
14 | */ |
||
15 | static $no_conflict = array(); |
||
16 | |||
17 | /** |
||
18 | * @var array |
||
19 | */ |
||
20 | static $content_types_registered = array(); |
||
21 | |||
22 | /** |
||
23 | * @var PodsComponents |
||
24 | */ |
||
25 | static $components; |
||
26 | |||
27 | /** |
||
28 | * @var PodsMeta |
||
29 | */ |
||
30 | static $meta; |
||
31 | |||
32 | /** |
||
33 | * @var PodsI18n |
||
34 | */ |
||
35 | static $i18n; |
||
36 | |||
37 | /** |
||
38 | * @var PodsAdmin |
||
39 | */ |
||
40 | static $admin; |
||
41 | |||
42 | /** |
||
43 | * @var mixed|void |
||
44 | */ |
||
45 | static $version; |
||
46 | |||
47 | /** |
||
48 | * @var mixed|void |
||
49 | */ |
||
50 | static $version_last; |
||
51 | |||
52 | /** |
||
53 | * @var mixed|void |
||
54 | */ |
||
55 | static $db_version; |
||
56 | |||
57 | /** |
||
58 | * Upgrades to trigger (last installed version => upgrade version) |
||
59 | * |
||
60 | * @var array |
||
61 | */ |
||
62 | static $upgrades = array( |
||
63 | '1.0.0' => '2.0.0' |
||
64 | //'2.0.0' => '2.1.0' |
||
65 | ); |
||
66 | |||
67 | /** |
||
68 | * Whether an Upgrade for 1.x has happened |
||
69 | * |
||
70 | * @var bool |
||
71 | */ |
||
72 | static $upgraded; |
||
73 | |||
74 | /** |
||
75 | * Whether an Upgrade is needed |
||
76 | * |
||
77 | * @var bool |
||
78 | */ |
||
79 | static $upgrade_needed = false; |
||
80 | |||
81 | /** |
||
82 | * Singleton handling for a basic pods_init() request |
||
83 | * |
||
84 | * @return \PodsInit |
||
85 | * |
||
86 | * @since 2.3.5 |
||
87 | */ |
||
88 | public static function init() { |
||
96 | |||
97 | /** |
||
98 | * Setup and Initiate Pods |
||
99 | * |
||
100 | * @return \PodsInit |
||
101 | * |
||
102 | * @license http://www.gnu.org/licenses/gpl-2.0.html |
||
103 | * @since 1.8.9 |
||
104 | */ |
||
105 | function __construct() { |
||
136 | |||
137 | /** |
||
138 | * Load the plugin textdomain and set default constants |
||
139 | */ |
||
140 | public function plugins_loaded() { |
||
141 | |||
142 | if ( ! defined( 'PODS_LIGHT' ) ) { |
||
143 | define( 'PODS_LIGHT', false ); |
||
144 | } |
||
145 | |||
146 | if ( ! defined( 'PODS_TABLELESS' ) ) { |
||
147 | define( 'PODS_TABLELESS', false ); |
||
148 | } |
||
149 | |||
150 | load_plugin_textdomain( 'pods' ); |
||
151 | |||
152 | } |
||
153 | |||
154 | /** |
||
155 | * Load Pods Components |
||
156 | */ |
||
157 | public function load_components() { |
||
158 | |||
159 | if ( empty( self::$version ) ) { |
||
160 | return; |
||
161 | } |
||
162 | |||
163 | if ( ! defined( 'PODS_LIGHT' ) || ! PODS_LIGHT ) { |
||
164 | self::$components = pods_components(); |
||
165 | } |
||
166 | |||
167 | } |
||
168 | |||
169 | /** |
||
170 | * Load Pods Meta |
||
171 | */ |
||
172 | public function load_meta() { |
||
173 | |||
174 | self::$meta = pods_meta()->core(); |
||
175 | } |
||
176 | |||
177 | /** |
||
178 | * |
||
179 | */ |
||
180 | public function load_i18n() { |
||
181 | |||
182 | self::$i18n = pods_i18n(); |
||
183 | } |
||
184 | |||
185 | |||
186 | /** |
||
187 | * Set up the Pods core |
||
188 | */ |
||
189 | public function core() { |
||
190 | |||
191 | if ( empty( self::$version ) ) { |
||
192 | return; |
||
193 | } |
||
194 | |||
195 | // Session start |
||
196 | pods_session_start(); |
||
197 | |||
198 | add_shortcode( 'pods', 'pods_shortcode' ); |
||
199 | add_shortcode( 'pods-form', 'pods_shortcode_form' ); |
||
200 | |||
201 | $security_settings = array( |
||
202 | 'pods_disable_file_browser' => 0, |
||
203 | 'pods_files_require_login' => 1, |
||
204 | 'pods_files_require_login_cap' => '', |
||
205 | 'pods_disable_file_upload' => 0, |
||
206 | 'pods_upload_require_login' => 1, |
||
207 | 'pods_upload_require_login_cap' => '' |
||
208 | ); |
||
209 | |||
210 | foreach ( $security_settings as $security_setting => $setting ) { |
||
211 | $setting = get_option( $security_setting ); |
||
212 | if ( ! empty( $setting ) ) { |
||
213 | $security_settings[ $security_setting ] = $setting; |
||
214 | } |
||
215 | } |
||
216 | |||
217 | foreach ( $security_settings as $security_setting => $setting ) { |
||
218 | if ( 0 == $setting ) { |
||
219 | $setting = false; |
||
220 | } elseif ( 1 == $setting ) { |
||
221 | $setting = true; |
||
222 | } |
||
223 | |||
224 | if ( in_array( $security_setting, array( 'pods_files_require_login', 'pods_upload_require_login' ) ) ) { |
||
225 | if ( 0 < strlen( $security_settings[ $security_setting . '_cap' ] ) ) { |
||
226 | $setting = $security_settings[ $security_setting . '_cap' ]; |
||
227 | } |
||
228 | } elseif ( in_array( $security_setting, array( |
||
229 | 'pods_files_require_login_cap', |
||
230 | 'pods_upload_require_login_cap' |
||
231 | ) ) ) { |
||
232 | continue; |
||
233 | } |
||
234 | |||
235 | if ( ! defined( strtoupper( $security_setting ) ) ) { |
||
236 | define( strtoupper( $security_setting ), $setting ); |
||
237 | } |
||
238 | } |
||
239 | |||
240 | $this->register_pods(); |
||
241 | |||
242 | $avatar = PodsForm::field_loader( 'avatar' ); |
||
243 | |||
244 | if ( method_exists( $avatar, 'get_avatar' ) ) { |
||
245 | add_filter( 'get_avatar', array( $avatar, 'get_avatar' ), 10, 4 ); |
||
246 | } |
||
247 | } |
||
248 | |||
249 | /** |
||
250 | * Register Scripts and Styles |
||
251 | */ |
||
252 | public function register_assets() { |
||
253 | |||
254 | if ( ! wp_style_is( 'jquery-ui', 'registered' ) ) { |
||
255 | wp_register_style( 'jquery-ui', PODS_URL . 'ui/css/smoothness/jquery-ui.custom.css', array(), '1.8.16' ); |
||
256 | } |
||
257 | |||
258 | wp_register_script( 'pods-json', PODS_URL . 'ui/js/jquery.json.js', array( 'jquery' ), '2.3' ); |
||
259 | |||
260 | if ( ! wp_style_is( 'jquery-qtip2', 'registered' ) ) { |
||
261 | wp_register_style( 'jquery-qtip2', PODS_URL . 'ui/css/jquery.qtip.min.css', array(), '2.2' ); |
||
262 | } |
||
263 | |||
264 | if ( ! wp_script_is( 'jquery-qtip2', 'registered' ) ) { |
||
265 | wp_register_script( 'jquery-qtip2', PODS_URL . 'ui/js/jquery.qtip.min.js', array( 'jquery' ), '2.2' ); |
||
266 | } |
||
267 | |||
268 | wp_register_script( 'pods', PODS_URL . 'ui/js/jquery.pods.js', array( |
||
269 | 'jquery', |
||
270 | 'pods-i18n', |
||
271 | 'pods-json', |
||
272 | 'jquery-qtip2' |
||
273 | ), PODS_VERSION, true ); |
||
274 | |||
275 | wp_register_style( 'pods-form', PODS_URL . 'ui/css/pods-form.css', array(), PODS_VERSION ); |
||
276 | |||
277 | wp_register_style( 'pods-cleditor', PODS_URL . 'ui/css/jquery.cleditor.css', array(), '1.3.0' ); |
||
278 | wp_register_script( 'pods-cleditor', PODS_URL . 'ui/js/jquery.cleditor.min.js', array( 'jquery' ), '1.3.0' ); |
||
279 | |||
280 | wp_register_style( 'pods-codemirror', PODS_URL . 'ui/css/codemirror.css', array(), '4.8' ); |
||
281 | wp_register_script( 'pods-codemirror', PODS_URL . 'ui/js/codemirror.js', array(), '4.8', true ); |
||
282 | wp_register_script( 'pods-codemirror-loadmode', PODS_URL . 'ui/js/codemirror/addon/mode/loadmode.js', array( 'pods-codemirror' ), '4.8', true ); |
||
283 | wp_register_script( 'pods-codemirror-overlay', PODS_URL . 'ui/js/codemirror/addon/mode/overlay.js', array( 'pods-codemirror' ), '4.8', true ); |
||
284 | wp_register_script( 'pods-codemirror-hints', PODS_URL . 'ui/js/codemirror/addon/mode/show-hint.js', array( 'pods-codemirror' ), '4.8', true ); |
||
285 | wp_register_script( 'pods-codemirror-mode-xml', PODS_URL . 'ui/js/codemirror/mode/xml/xml.js', array( 'pods-codemirror' ), '4.8', true ); |
||
286 | wp_register_script( 'pods-codemirror-mode-html', PODS_URL . 'ui/js/codemirror/mode/htmlmixed/htmlmixed.js', array( 'pods-codemirror' ), '4.8', true ); |
||
287 | wp_register_script( 'pods-codemirror-mode-css', PODS_URL . 'ui/js/codemirror/mode/css/css.js', array( 'pods-codemirror' ), '4.8', true ); |
||
288 | |||
289 | if ( ! wp_style_is( 'jquery-ui-timepicker', 'registered' ) ) { |
||
290 | wp_register_style( 'jquery-ui-timepicker', PODS_URL . 'ui/css/jquery.ui.timepicker.css', array(), '1.1.1' ); |
||
291 | } |
||
292 | |||
293 | if ( ! wp_script_is( 'jquery-ui-timepicker', 'registered' ) ) { |
||
294 | wp_register_script( 'jquery-ui-timepicker', PODS_URL . 'ui/js/jquery.ui.timepicker.min.js', array( |
||
295 | 'jquery', |
||
296 | 'jquery-ui-core', |
||
297 | 'jquery-ui-datepicker', |
||
298 | 'jquery-ui-slider' |
||
299 | ), '1.1.1' ); |
||
300 | } |
||
301 | |||
302 | wp_register_style( 'pods-select2', PODS_URL . 'ui/js/select2/select2.min.css', array(), '4.0.3' ); |
||
303 | wp_register_script( 'pods-select2', PODS_URL . 'ui/js/select2/select2.min.js', array( 'jquery', 'pods-i18n' ), '4.0.3' ); |
||
304 | |||
305 | wp_register_script( 'pods-handlebars', PODS_URL . 'ui/js/handlebars.js', array(), '1.0.0.beta.6' ); |
||
306 | |||
307 | // Marionette dependencies for MV fields |
||
308 | wp_register_script( 'backbone.radio', PODS_URL . 'ui/js/marionette/backbone.radio.js', array( 'backbone' ), '2.0.0', true ); |
||
309 | wp_register_script( 'marionette', PODS_URL . 'ui/js/marionette/backbone.marionette.js', array( 'backbone', 'backbone.radio' ), '3.1.0', true ); |
||
310 | |||
311 | // MV stuff |
||
312 | wp_register_script( |
||
313 | 'pods-mv-fields', |
||
314 | PODS_URL . 'ui/fields-mv/js/pods-mv-fields.min.js', |
||
315 | array( |
||
316 | 'jquery', |
||
317 | 'jquery-ui-core', |
||
318 | 'jquery-ui-sortable', |
||
319 | 'pods-i18n', |
||
320 | 'marionette', |
||
321 | 'media-views', |
||
322 | 'media-models' |
||
323 | ), |
||
324 | PODS_VERSION, |
||
325 | true |
||
326 | ); |
||
327 | wp_register_style( 'pods-flex', PODS_URL . 'ui/css/pods-flex.css', array(), PODS_VERSION ); |
||
328 | } |
||
329 | |||
330 | /** |
||
331 | * Register internal Post Types |
||
332 | */ |
||
333 | public function register_pods() { |
||
334 | |||
335 | $args = array( |
||
336 | 'label' => 'Pods', |
||
337 | 'labels' => array( 'singular_name' => 'Pod' ), |
||
338 | 'public' => false, |
||
339 | 'can_export' => false, |
||
340 | 'query_var' => false, |
||
341 | 'rewrite' => false, |
||
342 | 'capability_type' => 'pods_pod', |
||
343 | 'has_archive' => false, |
||
344 | 'hierarchical' => false, |
||
345 | 'supports' => array( 'title', 'author' ), |
||
346 | 'menu_icon' => 'dashicons-pods' |
||
347 | ); |
||
348 | |||
349 | $args = self::object_label_fix( $args, 'post_type' ); |
||
350 | |||
351 | register_post_type( '_pods_pod', apply_filters( 'pods_internal_register_post_type_pod', $args ) ); |
||
352 | |||
353 | $args = array( |
||
354 | 'label' => 'Pod Fields', |
||
355 | 'labels' => array( 'singular_name' => 'Pod Field' ), |
||
356 | 'public' => false, |
||
357 | 'can_export' => false, |
||
358 | 'query_var' => false, |
||
359 | 'rewrite' => false, |
||
360 | 'capability_type' => 'pods_pod', |
||
361 | 'has_archive' => false, |
||
362 | 'hierarchical' => true, |
||
363 | 'supports' => array( 'title', 'editor', 'author' ), |
||
364 | 'menu_icon' => 'dashicons-pods' |
||
365 | ); |
||
366 | |||
367 | $args = self::object_label_fix( $args, 'post_type' ); |
||
368 | |||
369 | register_post_type( '_pods_field', apply_filters( 'pods_internal_register_post_type_field', $args ) ); |
||
370 | } |
||
371 | |||
372 | /** |
||
373 | * Include Admin |
||
374 | */ |
||
375 | public function admin_init() { |
||
376 | |||
377 | self::$admin = pods_admin(); |
||
378 | } |
||
379 | |||
380 | /** |
||
381 | * Register Post Types and Taxonomies |
||
382 | */ |
||
383 | public function setup_content_types( $force = false ) { |
||
384 | |||
385 | if ( empty( self::$version ) ) { |
||
386 | return; |
||
387 | } |
||
388 | |||
389 | $post_types = PodsMeta::$post_types; |
||
390 | $taxonomies = PodsMeta::$taxonomies; |
||
391 | |||
392 | $existing_post_types = get_post_types(); |
||
393 | $existing_taxonomies = get_taxonomies(); |
||
394 | |||
395 | $pods_cpt_ct = pods_transient_get( 'pods_wp_cpt_ct' ); |
||
396 | |||
397 | $cpt_positions = array(); |
||
398 | |||
399 | if ( empty( $pods_cpt_ct ) && ( ! empty( $post_types ) || ! empty( $taxonomies ) ) ) { |
||
400 | $force = true; |
||
401 | } elseif ( ! empty( $pods_cpt_ct ) && empty( $pods_cpt_ct['post_types'] ) && ! empty( $post_types ) ) { |
||
402 | $force = true; |
||
403 | } elseif ( ! empty( $pods_cpt_ct ) && empty( $pods_cpt_ct['taxonomies'] ) && ! empty( $taxonomies ) ) { |
||
404 | $force = true; |
||
405 | } |
||
406 | |||
407 | if ( false === $pods_cpt_ct || $force ) { |
||
408 | /** |
||
409 | * @var WP_Query |
||
410 | */ |
||
411 | global $wp_query; |
||
412 | |||
413 | $reserved_query_vars = array( |
||
414 | 'post_type', |
||
415 | 'taxonomy', |
||
416 | 'output' |
||
417 | ); |
||
418 | |||
419 | if ( is_object( $wp_query ) ) { |
||
420 | $reserved_query_vars = array_merge( $reserved_query_vars, array_keys( $wp_query->fill_query_vars( array() ) ) ); |
||
421 | } |
||
422 | |||
423 | $pods_cpt_ct = array( |
||
424 | 'post_types' => array(), |
||
425 | 'taxonomies' => array() |
||
426 | ); |
||
427 | |||
428 | $pods_post_types = $pods_taxonomies = array(); |
||
429 | $supported_post_types = $supported_taxonomies = array(); |
||
430 | |||
431 | foreach ( $post_types as $post_type ) { |
||
432 | // Post Type exists already |
||
433 | View Code Duplication | if ( isset( $pods_cpt_ct['post_types'][ $post_type['name'] ] ) ) { |
|
434 | continue; |
||
435 | } elseif ( ! empty( $post_type['object'] ) && isset( $existing_post_types[ $post_type['object'] ] ) ) { |
||
436 | continue; |
||
437 | } elseif ( ! $force && isset( $existing_post_types[ $post_type['name'] ] ) ) { |
||
438 | continue; |
||
439 | } |
||
440 | |||
441 | $post_type['options']['name'] = $post_type['name']; |
||
442 | $post_type = array_merge( $post_type, (array) $post_type['options'] ); |
||
443 | |||
444 | $post_type_name = pods_v_sanitized( 'name', $post_type ); |
||
445 | |||
446 | // Labels |
||
447 | $cpt_label = esc_html( pods_v( 'label', $post_type, ucwords( str_replace( '_', ' ', pods_v( 'name', $post_type ) ) ), true ) ); |
||
448 | $cpt_singular = esc_html( pods_v( 'label_singular', $post_type, ucwords( str_replace( '_', ' ', pods_v( 'label', $post_type, $post_type_name, null, true ) ) ), true ) ); |
||
449 | |||
450 | $cpt_labels = array(); |
||
451 | $cpt_labels['name'] = $cpt_label; |
||
452 | $cpt_labels['singular_name'] = $cpt_singular; |
||
453 | $cpt_labels['menu_name'] = pods_v( 'menu_name', $post_type, '', true ); |
||
454 | $cpt_labels['name_admin_bar'] = pods_v( 'name_admin_bar', $post_type, '', true ); |
||
455 | $cpt_labels['add_new'] = pods_v( 'label_add_new', $post_type, '', true ); |
||
456 | $cpt_labels['add_new_item'] = pods_v( 'label_add_new_item', $post_type, '', true ); |
||
457 | $cpt_labels['new_item'] = pods_v( 'label_new_item', $post_type, '', true ); |
||
458 | $cpt_labels['edit'] = pods_v( 'label_edit', $post_type, '', true ); |
||
459 | $cpt_labels['edit_item'] = pods_v( 'label_edit_item', $post_type, '', true ); |
||
460 | $cpt_labels['view'] = pods_v( 'label_view', $post_type, '', true ); |
||
461 | $cpt_labels['view_item'] = pods_v( 'label_view_item', $post_type, '', true ); |
||
462 | $cpt_labels['view_items'] = pods_v( 'label_view_items', $post_type, '', true ); |
||
463 | $cpt_labels['all_items'] = pods_v( 'label_all_items', $post_type, '', true ); |
||
464 | $cpt_labels['search_items'] = pods_v( 'label_search_items', $post_type, '', true ); |
||
465 | $cpt_labels['not_found'] = pods_v( 'label_not_found', $post_type, '', true ); |
||
466 | $cpt_labels['not_found_in_trash'] = pods_v( 'label_not_found_in_trash', $post_type, '', true ); |
||
467 | $cpt_labels['parent'] = pods_v( 'label_parent', $post_type, '', true ); |
||
468 | $cpt_labels['parent_item_colon'] = pods_v( 'label_parent_item_colon', $post_type, '', true ); |
||
469 | $cpt_labels['archives'] = pods_v( 'label_archives', $post_type, '', true ); |
||
470 | $cpt_labels['attributes'] = pods_v( 'label_attributes', $post_type, '', true ); |
||
471 | $cpt_labels['insert_into_item'] = pods_v( 'label_insert_into_item', $post_type, '', true ); |
||
472 | $cpt_labels['uploaded_to_this_item'] = pods_v( 'label_uploaded_to_this_item', $post_type, '', true ); |
||
473 | $cpt_labels['featured_image'] = pods_v( 'label_featured_image', $post_type, '', true ); |
||
474 | $cpt_labels['set_featured_image'] = pods_v( 'label_set_featured_image', $post_type, '', true ); |
||
475 | $cpt_labels['remove_featured_image'] = pods_v( 'label_remove_featured_image', $post_type, '', true ); |
||
476 | $cpt_labels['use_featured_image'] = pods_v( 'label_use_featured_image', $post_type, '', true ); |
||
477 | $cpt_labels['filter_items_list'] = pods_v( 'label_filter_items_list', $post_type, '', true ); |
||
478 | $cpt_labels['items_list_navigation'] = pods_v( 'label_items_list_navigation', $post_type, '', true ); |
||
479 | $cpt_labels['items_list'] = pods_v( 'label_items_list', $post_type, '', true ); |
||
480 | |||
481 | // Supported |
||
482 | $cpt_supported = array( |
||
483 | 'title' => (boolean) pods_v( 'supports_title', $post_type, false ), |
||
484 | 'editor' => (boolean) pods_v( 'supports_editor', $post_type, false ), |
||
485 | 'author' => (boolean) pods_v( 'supports_author', $post_type, false ), |
||
486 | 'thumbnail' => (boolean) pods_v( 'supports_thumbnail', $post_type, false ), |
||
487 | 'excerpt' => (boolean) pods_v( 'supports_excerpt', $post_type, false ), |
||
488 | 'trackbacks' => (boolean) pods_v( 'supports_trackbacks', $post_type, false ), |
||
489 | 'custom-fields' => (boolean) pods_v( 'supports_custom_fields', $post_type, false ), |
||
490 | 'comments' => (boolean) pods_v( 'supports_comments', $post_type, false ), |
||
491 | 'revisions' => (boolean) pods_v( 'supports_revisions', $post_type, false ), |
||
492 | 'page-attributes' => (boolean) pods_v( 'supports_page_attributes', $post_type, false ), |
||
493 | 'post-formats' => (boolean) pods_v( 'supports_post_formats', $post_type, false ) |
||
494 | ); |
||
495 | |||
496 | // Custom Supported |
||
497 | $cpt_supported_custom = pods_v_sanitized( 'supports_custom', $post_type, '' ); |
||
498 | |||
499 | if ( ! empty( $cpt_supported_custom ) ) { |
||
500 | $cpt_supported_custom = explode( ',', $cpt_supported_custom ); |
||
501 | $cpt_supported_custom = array_filter( array_unique( $cpt_supported_custom ) ); |
||
502 | |||
503 | foreach ( $cpt_supported_custom as $cpt_support ) { |
||
504 | $cpt_supported[ $cpt_support ] = true; |
||
505 | } |
||
506 | } |
||
507 | |||
508 | // Genesis Support |
||
509 | if ( function_exists( 'genesis' ) ) { |
||
510 | $cpt_supported['genesis-seo'] = (boolean) pods_var( 'supports_genesis_seo', $post_type, false ); |
||
511 | $cpt_supported['genesis-layouts'] = (boolean) pods_var( 'supports_genesis_layouts', $post_type, false ); |
||
512 | $cpt_supported['genesis-simple-sidebars'] = (boolean) pods_var( 'supports_genesis_simple_sidebars', $post_type, false ); |
||
513 | } |
||
514 | |||
515 | // YARPP Support |
||
516 | if ( defined( 'YARPP_VERSION' ) ) { |
||
517 | $cpt_supported['yarpp_support'] = (boolean) pods_var( 'supports_yarpp_support', $post_type, false ); |
||
518 | } |
||
519 | |||
520 | // Jetpack Support |
||
521 | if ( class_exists( 'Jetpack' ) ) { |
||
522 | $cpt_supported['supports_jetpack_publicize'] = (boolean) pods_var( 'supports_jetpack_publicize', $post_type, false ); |
||
523 | $cpt_supported['supports_jetpack_markdown'] = (boolean) pods_var( 'supports_jetpack_markdown', $post_type, false ); |
||
524 | } |
||
525 | |||
526 | // WP needs something, if this was empty and none were enabled, it would show title+editor pre 3.5 :( |
||
527 | $cpt_supports = array(); |
||
528 | |||
529 | if ( ! pods_version_check( 'wp', '3.5' ) ) { |
||
530 | $cpt_supports = array( '_bug_fix_pre_35' ); |
||
531 | } |
||
532 | |||
533 | foreach ( $cpt_supported as $cpt_support => $supported ) { |
||
534 | if ( true === $supported ) { |
||
535 | $cpt_supports[] = $cpt_support; |
||
536 | } |
||
537 | } |
||
538 | |||
539 | if ( empty( $cpt_supports ) && pods_version_check( 'wp', '3.5' ) ) { |
||
540 | $cpt_supports = false; |
||
541 | } |
||
542 | |||
543 | // Rewrite |
||
544 | $cpt_rewrite = (boolean) pods_var( 'rewrite', $post_type, true ); |
||
545 | $cpt_rewrite_array = array( |
||
546 | 'slug' => pods_var( 'rewrite_custom_slug', $post_type, str_replace( '_', '-', $post_type_name ), null, true ), |
||
547 | 'with_front' => (boolean) pods_var( 'rewrite_with_front', $post_type, true ), |
||
548 | 'feeds' => (boolean) pods_var( 'rewrite_feeds', $post_type, (boolean) pods_var( 'has_archive', $post_type, false ) ), |
||
549 | 'pages' => (boolean) pods_var( 'rewrite_pages', $post_type, true ) |
||
550 | ); |
||
551 | |||
552 | if ( false !== $cpt_rewrite ) { |
||
553 | $cpt_rewrite = $cpt_rewrite_array; |
||
554 | } |
||
555 | |||
556 | $capability_type = pods_var( 'capability_type', $post_type, 'post' ); |
||
557 | |||
558 | if ( 'custom' == $capability_type ) { |
||
559 | $capability_type = pods_var( 'capability_type_custom', $post_type, 'post' ); |
||
560 | } |
||
561 | |||
562 | $show_in_menu = (boolean) pods_var( 'show_in_menu', $post_type, true ); |
||
563 | |||
564 | if ( $show_in_menu && 0 < strlen( pods_var_raw( 'menu_location_custom', $post_type ) ) ) { |
||
565 | $show_in_menu = pods_var_raw( 'menu_location_custom', $post_type ); |
||
566 | } |
||
567 | |||
568 | $menu_icon = pods_var( 'menu_icon', $post_type, null, null, true ); |
||
569 | |||
570 | if ( ! empty( $menu_icon ) ) { |
||
571 | $menu_icon = pods_evaluate_tags( $menu_icon ); |
||
572 | } |
||
573 | |||
574 | // Register Post Type |
||
575 | $pods_post_types[ $post_type_name ] = array( |
||
576 | 'label' => $cpt_label, |
||
577 | 'labels' => $cpt_labels, |
||
578 | 'description' => esc_html( pods_var_raw( 'description', $post_type ) ), |
||
579 | 'public' => (boolean) pods_var( 'public', $post_type, true ), |
||
580 | 'publicly_queryable' => (boolean) pods_var( 'publicly_queryable', $post_type, (boolean) pods_var( 'public', $post_type, true ) ), |
||
581 | 'exclude_from_search' => (boolean) pods_var( 'exclude_from_search', $post_type, ( (boolean) pods_var( 'public', $post_type, true ) ? false : true ) ), |
||
582 | 'show_ui' => (boolean) pods_var( 'show_ui', $post_type, (boolean) pods_var( 'public', $post_type, true ) ), |
||
583 | 'show_in_menu' => $show_in_menu, |
||
584 | 'show_in_nav_menus' => (boolean) pods_var( 'show_in_nav_menus', $post_type, (boolean) pods_var( 'public', $post_type, true ) ), |
||
585 | 'show_in_admin_bar' => (boolean) pods_var( 'show_in_admin_bar', $post_type, (boolean) pods_var( 'show_in_menu', $post_type, true ) ), |
||
586 | 'menu_position' => (int) pods_var( 'menu_position', $post_type, 0, null, true ), |
||
587 | 'menu_icon' => $menu_icon, |
||
588 | 'capability_type' => $capability_type, |
||
589 | //'capabilities' => $cpt_capabilities, |
||
590 | 'map_meta_cap' => (boolean) pods_var( 'capability_type_extra', $post_type, true ), |
||
591 | 'hierarchical' => (boolean) pods_var( 'hierarchical', $post_type, false ), |
||
592 | 'supports' => $cpt_supports, |
||
593 | //'register_meta_box_cb' => array($this, 'manage_meta_box'), |
||
594 | //'permalink_epmask' => EP_PERMALINK, |
||
595 | 'has_archive' => pods_v( 'has_archive_slug', $post_type, (boolean) pods_v( 'has_archive', $post_type, false ), true ), |
||
596 | 'rewrite' => $cpt_rewrite, |
||
597 | 'query_var' => ( false !== (boolean) pods_var( 'query_var', $post_type, true ) ? pods_var( 'query_var_string', $post_type, $post_type_name, null, true ) : false ), |
||
598 | 'can_export' => (boolean) pods_var( 'can_export', $post_type, true ) |
||
599 | ); |
||
600 | |||
601 | // YARPP doesn't use 'supports' array option (yet) |
||
602 | if ( ! empty( $cpt_supports['yarpp_support'] ) ) { |
||
603 | $pods_post_types[ $post_type_name ]['yarpp_support'] = true; |
||
604 | } |
||
605 | |||
606 | // Prevent reserved query_var issues |
||
607 | if ( in_array( $pods_post_types[ $post_type_name ]['query_var'], $reserved_query_vars ) ) { |
||
608 | $pods_post_types[ $post_type_name ]['query_var'] = 'post_type_' . $pods_post_types[ $post_type_name ]['query_var']; |
||
609 | } |
||
610 | |||
611 | if ( 25 == $pods_post_types[ $post_type_name ]['menu_position'] ) { |
||
612 | $pods_post_types[ $post_type_name ]['menu_position'] ++; |
||
613 | } |
||
614 | |||
615 | if ( $pods_post_types[ $post_type_name ]['menu_position'] < 1 || in_array( $pods_post_types[ $post_type_name ]['menu_position'], $cpt_positions ) ) { |
||
616 | unset( $pods_post_types[ $post_type_name ]['menu_position'] ); |
||
617 | } else { |
||
618 | $cpt_positions[] = $pods_post_types[ $post_type_name ]['menu_position']; |
||
619 | |||
620 | // This would be nice if WP supported floats in menu_position |
||
621 | // $pods_post_types[ $post_type_name ][ 'menu_position' ] = $pods_post_types[ $post_type_name ][ 'menu_position' ] . '.1'; |
||
622 | } |
||
623 | |||
624 | // Taxonomies |
||
625 | $cpt_taxonomies = array(); |
||
626 | $_taxonomies = get_taxonomies(); |
||
627 | $_taxonomies = array_merge_recursive( $_taxonomies, $pods_taxonomies ); |
||
628 | $ignore = array( 'nav_menu', 'link_category', 'post_format' ); |
||
629 | |||
630 | View Code Duplication | foreach ( $_taxonomies as $taxonomy => $label ) { |
|
631 | if ( in_array( $taxonomy, $ignore ) ) { |
||
632 | continue; |
||
633 | } |
||
634 | |||
635 | if ( false !== (boolean) pods_var( 'built_in_taxonomies_' . $taxonomy, $post_type, false ) ) { |
||
636 | $cpt_taxonomies[] = $taxonomy; |
||
637 | |||
638 | if ( isset( $supported_post_types[ $taxonomy ] ) && ! in_array( $post_type_name, $supported_post_types[ $taxonomy ] ) ) { |
||
639 | $supported_post_types[ $taxonomy ][] = $post_type_name; |
||
640 | } |
||
641 | } |
||
642 | } |
||
643 | |||
644 | if ( isset( $supported_taxonomies[ $post_type_name ] ) ) { |
||
645 | $supported_taxonomies[ $post_type_name ] = array_merge( (array) $supported_taxonomies[ $post_type_name ], $cpt_taxonomies ); |
||
646 | } else { |
||
647 | $supported_taxonomies[ $post_type_name ] = $cpt_taxonomies; |
||
648 | } |
||
649 | } |
||
650 | |||
651 | foreach ( $taxonomies as $taxonomy ) { |
||
652 | // Taxonomy Type exists already |
||
653 | View Code Duplication | if ( isset( $pods_cpt_ct['taxonomies'][ $taxonomy['name'] ] ) ) { |
|
654 | continue; |
||
655 | } elseif ( ! empty( $taxonomy['object'] ) && isset( $existing_taxonomies[ $taxonomy['object'] ] ) ) { |
||
656 | continue; |
||
657 | } elseif ( ! $force && isset( $existing_taxonomies[ $taxonomy['name'] ] ) ) { |
||
658 | continue; |
||
659 | } |
||
660 | |||
661 | $taxonomy['options']['name'] = $taxonomy['name']; |
||
662 | $taxonomy = array_merge( $taxonomy, (array) $taxonomy['options'] ); |
||
663 | |||
664 | $taxonomy_name = pods_var( 'name', $taxonomy ); |
||
665 | |||
666 | // Labels |
||
667 | $ct_label = esc_html( pods_v( 'label', $taxonomy, ucwords( str_replace( '_', ' ', pods_v( 'name', $taxonomy ) ) ), true ) ); |
||
668 | $ct_singular = esc_html( pods_v( 'label_singular', $taxonomy, ucwords( str_replace( '_', ' ', pods_v( 'label', $taxonomy, pods_v( 'name', $taxonomy ), null, true ) ) ), true ) ); |
||
669 | |||
670 | $ct_labels = array(); |
||
671 | $ct_labels['name'] = $ct_label; |
||
672 | $ct_labels['singular_name'] = $ct_singular; |
||
673 | $ct_labels['menu_name'] = pods_v( 'menu_name', $taxonomy, '', true ); |
||
674 | $ct_labels['search_items'] = pods_v( 'label_search_items', $taxonomy, '', true ); |
||
675 | $ct_labels['popular_items'] = pods_v( 'label_popular_items', $taxonomy, '', true ); |
||
676 | $ct_labels['all_items'] = pods_v( 'label_all_items', $taxonomy, '', true ); |
||
677 | $ct_labels['parent_item'] = pods_v( 'label_parent_item', $taxonomy, '', true ); |
||
678 | $ct_labels['parent_item_colon'] = pods_v( 'label_parent_item_colon', $taxonomy, '', true ); |
||
679 | $ct_labels['edit_item'] = pods_v( 'label_edit_item', $taxonomy, '', true ); |
||
680 | $ct_labels['update_item'] = pods_v( 'label_update_item', $taxonomy, '', true ); |
||
681 | $ct_labels['view_item'] = pods_v( 'label_view_item', $taxonomy, '', true ); |
||
682 | $ct_labels['add_new_item'] = pods_v( 'label_add_new_item', $taxonomy, '', true ); |
||
683 | $ct_labels['new_item_name'] = pods_v( 'label_new_item_name', $taxonomy, '', true ); |
||
684 | $ct_labels['separate_items_with_commas'] = pods_v( 'label_separate_items_with_commas', $taxonomy, '', true ); |
||
685 | $ct_labels['add_or_remove_items'] = pods_v( 'label_add_or_remove_items', $taxonomy, '', true ); |
||
686 | $ct_labels['choose_from_most_used'] = pods_v( 'label_choose_from_the_most_used', $taxonomy, '', true ); |
||
687 | $ct_labels['not_found'] = pods_v( 'label_not_found', $taxonomy, '', true ); |
||
688 | $ct_labels['no_terms'] = pods_v( 'label_no_terms', $taxonomy, '', true ); |
||
689 | $ct_labels['items_list'] = pods_v( 'label_items_list', $taxonomy, '', true ); |
||
690 | $ct_labels['items_list_navigation'] = pods_v( 'label_items_list_navigation', $taxonomy, '', true ); |
||
691 | |||
692 | // Rewrite |
||
693 | $ct_rewrite = (boolean) pods_var( 'rewrite', $taxonomy, true ); |
||
694 | $ct_rewrite_array = array( |
||
695 | 'slug' => pods_var( 'rewrite_custom_slug', $taxonomy, str_replace( '_', '-', $taxonomy_name ), null, true ), |
||
696 | 'with_front' => (boolean) pods_var( 'rewrite_with_front', $taxonomy, true ), |
||
697 | 'hierarchical' => (boolean) pods_var( 'rewrite_hierarchical', $taxonomy, (boolean) pods_var( 'hierarchical', $taxonomy, false ) ) |
||
698 | ); |
||
699 | |||
700 | if ( false !== $ct_rewrite ) { |
||
701 | $ct_rewrite = $ct_rewrite_array; |
||
702 | } |
||
703 | |||
704 | /** |
||
705 | * Default tax capabilities |
||
706 | * @see https://codex.wordpress.org/Function_Reference/register_taxonomy |
||
707 | */ |
||
708 | $capability_type = pods_var( 'capability_type', $taxonomy, 'default' ); |
||
709 | $tax_capabilities = array(); |
||
710 | |||
711 | if ( 'custom' == $capability_type ) { |
||
712 | $capability_type = pods_var( 'capability_type_custom', $taxonomy, 'default' ); |
||
713 | if ( ! empty( $capability_type ) && 'default' != $capability_type ) { |
||
714 | $capability_type .= '_terms'; |
||
715 | $tax_capabilities = array( |
||
716 | 'manage_terms' => 'manage_' . $capability_type, |
||
717 | 'edit_terms' => 'edit_' . $capability_type, |
||
718 | 'delete_terms' => 'delete_' . $capability_type, |
||
719 | 'assign_terms' => 'assign_' . $capability_type, |
||
720 | ); |
||
721 | } |
||
722 | } |
||
723 | |||
724 | // Register Taxonomy |
||
725 | $pods_taxonomies[ $taxonomy_name ] = array( |
||
726 | 'label' => $ct_label, |
||
727 | 'labels' => $ct_labels, |
||
728 | 'public' => (boolean) pods_var( 'public', $taxonomy, true ), |
||
729 | 'show_ui' => (boolean) pods_var( 'show_ui', $taxonomy, (boolean) pods_var( 'public', $taxonomy, true ) ), |
||
730 | 'show_in_menu' => (boolean) pods_var( 'show_in_menu', $taxonomy, (boolean) pods_var( 'public', $taxonomy, true ) ), |
||
731 | 'show_in_nav_menus' => (boolean) pods_var( 'show_in_nav_menus', $taxonomy, (boolean) pods_var( 'public', $taxonomy, true ) ), |
||
732 | 'show_tagcloud' => (boolean) pods_var( 'show_tagcloud', $taxonomy, (boolean) pods_var( 'show_ui', $taxonomy, (boolean) pods_var( 'public', $taxonomy, true ) ) ), |
||
733 | 'show_tagcloud_in_edit' => (boolean) pods_var( 'show_tagcloud_in_edit', $taxonomy, (boolean) pods_var( 'show_tagcloud', $taxonomy, (boolean) pods_var( 'show_ui', $taxonomy, (boolean) pods_var( 'public', $taxonomy, true ) ) ) ), |
||
734 | 'show_in_quick_edit' => (boolean) pods_var( 'show_in_quick_edit', $taxonomy, (boolean) pods_var( 'show_ui', $taxonomy, (boolean) pods_var( 'public', $taxonomy, true ) ) ), |
||
735 | 'hierarchical' => (boolean) pods_var( 'hierarchical', $taxonomy, false ), |
||
736 | //'capability_type' => $capability_type, |
||
737 | 'capabilities' => $tax_capabilities, |
||
738 | //'map_meta_cap' => (boolean) pods_var( 'capability_type_extra', $taxonomy, true ), |
||
739 | 'update_count_callback' => pods_var( 'update_count_callback', $taxonomy, null, null, true ), |
||
740 | 'query_var' => ( false !== (boolean) pods_var( 'query_var', $taxonomy, true ) ? pods_var( 'query_var_string', $taxonomy, $taxonomy_name, null, true ) : false ), |
||
741 | 'rewrite' => $ct_rewrite, |
||
742 | 'show_admin_column' => (boolean) pods_var( 'show_admin_column', $taxonomy, false ), |
||
743 | 'sort' => (boolean) pods_var( 'sort', $taxonomy, false ), |
||
744 | ); |
||
745 | |||
746 | if ( is_array( $ct_rewrite ) && ! $pods_taxonomies[ $taxonomy_name ]['query_var'] ) { |
||
747 | $pods_taxonomies[ $taxonomy_name ]['query_var'] = pods_var( 'query_var_string', $taxonomy, $taxonomy_name, null, true ); |
||
748 | }; |
||
749 | |||
750 | // Prevent reserved query_var issues |
||
751 | if ( in_array( $pods_taxonomies[ $taxonomy_name ]['query_var'], $reserved_query_vars ) ) { |
||
752 | $pods_taxonomies[ $taxonomy_name ]['query_var'] = 'taxonomy_' . $pods_taxonomies[ $taxonomy_name ]['query_var']; |
||
753 | } |
||
754 | |||
755 | // Integration for Single Value Taxonomy UI |
||
756 | if ( function_exists( 'tax_single_value_meta_box' ) ) { |
||
757 | $pods_taxonomies[ $taxonomy_name ]['single_value'] = (boolean) pods_var( 'single_value', $taxonomy, false ); |
||
758 | $pods_taxonomies[ $taxonomy_name ]['required'] = (boolean) pods_var( 'single_value_required', $taxonomy, false ); |
||
759 | } |
||
760 | |||
761 | // Post Types |
||
762 | $ct_post_types = array(); |
||
763 | $_post_types = get_post_types(); |
||
764 | $_post_types = array_merge_recursive( $_post_types, $pods_post_types ); |
||
765 | $ignore = array( 'revision' ); |
||
766 | |||
767 | View Code Duplication | foreach ( $_post_types as $post_type => $options ) { |
|
768 | if ( in_array( $post_type, $ignore ) ) { |
||
769 | continue; |
||
770 | } |
||
771 | |||
772 | if ( false !== (boolean) pods_var( 'built_in_post_types_' . $post_type, $taxonomy, false ) ) { |
||
773 | $ct_post_types[] = $post_type; |
||
774 | |||
775 | if ( isset( $supported_taxonomies[ $post_type ] ) && ! in_array( $taxonomy_name, $supported_taxonomies[ $post_type ] ) ) { |
||
776 | $supported_taxonomies[ $post_type ][] = $taxonomy_name; |
||
777 | } |
||
778 | } |
||
779 | } |
||
780 | |||
781 | if ( isset( $supported_post_types[ $taxonomy_name ] ) ) { |
||
782 | $supported_post_types[ $taxonomy_name ] = array_merge( $supported_post_types[ $taxonomy_name ], $ct_post_types ); |
||
783 | } else { |
||
784 | $supported_post_types[ $taxonomy_name ] = $ct_post_types; |
||
785 | } |
||
786 | } |
||
787 | |||
788 | $pods_post_types = apply_filters( 'pods_wp_post_types', $pods_post_types ); |
||
789 | $pods_taxonomies = apply_filters( 'pods_wp_taxonomies', $pods_taxonomies ); |
||
790 | |||
791 | $supported_post_types = apply_filters( 'pods_wp_supported_post_types', $supported_post_types ); |
||
792 | $supported_taxonomies = apply_filters( 'pods_wp_supported_taxonomies', $supported_taxonomies ); |
||
793 | |||
794 | foreach ( $pods_taxonomies as $taxonomy => $options ) { |
||
795 | $ct_post_types = null; |
||
796 | |||
797 | if ( isset( $supported_post_types[ $taxonomy ] ) && ! empty( $supported_post_types[ $taxonomy ] ) ) { |
||
798 | $ct_post_types = $supported_post_types[ $taxonomy ]; |
||
799 | } |
||
800 | |||
801 | $pods_cpt_ct['taxonomies'][ $taxonomy ] = array( |
||
802 | 'post_types' => $ct_post_types, |
||
803 | 'options' => $options |
||
804 | ); |
||
805 | } |
||
806 | |||
807 | foreach ( $pods_post_types as $post_type => $options ) { |
||
808 | if ( isset( $supported_taxonomies[ $post_type ] ) && ! empty( $supported_taxonomies[ $post_type ] ) ) { |
||
809 | $options['taxonomies'] = $supported_taxonomies[ $post_type ]; |
||
810 | } |
||
811 | |||
812 | $pods_cpt_ct['post_types'][ $post_type ] = $options; |
||
813 | } |
||
814 | |||
815 | pods_transient_set( 'pods_wp_cpt_ct', $pods_cpt_ct ); |
||
816 | } |
||
817 | |||
818 | foreach ( $pods_cpt_ct['taxonomies'] as $taxonomy => $options ) { |
||
819 | if ( isset( self::$content_types_registered['taxonomies'] ) && in_array( $taxonomy, self::$content_types_registered['taxonomies'] ) ) { |
||
820 | continue; |
||
821 | } |
||
822 | |||
823 | $ct_post_types = $options['post_types']; |
||
824 | $options = $options['options']; |
||
825 | |||
826 | $options = apply_filters( 'pods_register_taxonomy_' . $taxonomy, $options, $taxonomy ); |
||
827 | $options = apply_filters( 'pods_register_taxonomy', $options, $taxonomy ); |
||
828 | |||
829 | $options = self::object_label_fix( $options, 'taxonomy' ); |
||
830 | |||
831 | /** |
||
832 | * Hide tagcloud compatibility |
||
833 | * @todo check https://core.trac.wordpress.org/ticket/36964 |
||
834 | * @see wp-admin/edit-tags.php L389 |
||
835 | */ |
||
836 | if ( true != (boolean) pods_var( 'show_tagcloud_in_edit', $options, (boolean) pods_var( 'show_tagcloud', $options, true ) ) ) { |
||
837 | $options['labels']['popular_items'] = null; |
||
838 | } |
||
839 | |||
840 | // Max length for taxonomies are 32 characters |
||
841 | $taxonomy = substr( $taxonomy, 0, 32 ); |
||
842 | |||
843 | // i18n compatibility for plugins that override it |
||
844 | View Code Duplication | if ( is_array( $options['rewrite'] ) && isset( $options['rewrite']['slug'] ) && ! empty( $options['rewrite']['slug'] ) ) { |
|
845 | $options['rewrite']['slug'] = _x( $options['rewrite']['slug'], 'URL taxonomy slug', 'pods' ); |
||
846 | } |
||
847 | |||
848 | View Code Duplication | if ( 1 == pods_var( 'pods_debug_register', 'get', 0 ) && pods_is_admin( array( 'pods' ) ) ) { |
|
849 | pods_debug( array( $taxonomy, $ct_post_types, $options ) ); |
||
850 | } |
||
851 | |||
852 | register_taxonomy( $taxonomy, $ct_post_types, $options ); |
||
853 | |||
854 | if ( ! isset( self::$content_types_registered['taxonomies'] ) ) { |
||
855 | self::$content_types_registered['taxonomies'] = array(); |
||
856 | } |
||
857 | |||
858 | self::$content_types_registered['taxonomies'][] = $taxonomy; |
||
859 | } |
||
860 | |||
861 | foreach ( $pods_cpt_ct['post_types'] as $post_type => $options ) { |
||
862 | if ( isset( self::$content_types_registered['post_types'] ) && in_array( $post_type, self::$content_types_registered['post_types'] ) ) { |
||
863 | continue; |
||
864 | } |
||
865 | |||
866 | $options = apply_filters( 'pods_register_post_type_' . $post_type, $options, $post_type ); |
||
867 | $options = apply_filters( 'pods_register_post_type', $options, $post_type ); |
||
868 | |||
869 | $options = self::object_label_fix( $options, 'post_type' ); |
||
870 | |||
871 | // Max length for post types are 20 characters |
||
872 | $post_type = substr( $post_type, 0, 20 ); |
||
873 | |||
874 | // i18n compatibility for plugins that override it |
||
875 | View Code Duplication | if ( is_array( $options['rewrite'] ) && isset( $options['rewrite']['slug'] ) && ! empty( $options['rewrite']['slug'] ) ) { |
|
876 | $options['rewrite']['slug'] = _x( $options['rewrite']['slug'], 'URL slug', 'pods' ); |
||
877 | } |
||
878 | |||
879 | View Code Duplication | if ( 1 == pods_var( 'pods_debug_register', 'get', 0 ) && pods_is_admin( array( 'pods' ) ) ) { |
|
880 | pods_debug( array( $post_type, $options ) ); |
||
881 | } |
||
882 | |||
883 | register_post_type( $post_type, $options ); |
||
884 | |||
885 | if ( ! isset( self::$content_types_registered['post_types'] ) ) { |
||
886 | self::$content_types_registered['post_types'] = array(); |
||
887 | } |
||
888 | |||
889 | self::$content_types_registered['post_types'][] = $post_type; |
||
890 | } |
||
891 | |||
892 | } |
||
893 | |||
894 | /** |
||
895 | * Check if we need to flush WordPress rewrite rules |
||
896 | * This gets run during 'init' action late in the game to give other plugins time to register their rewrite rules |
||
897 | */ |
||
898 | public function flush_rewrite_rules() { |
||
899 | |||
900 | $flush = (int) pods_transient_get( 'pods_flush_rewrites' ); |
||
901 | |||
902 | if ( 1 === $flush ) { |
||
903 | /** |
||
904 | * @var $wp_rewrite WP_Rewrite |
||
905 | */ |
||
906 | global $wp_rewrite; |
||
907 | $wp_rewrite->flush_rules(); |
||
908 | $wp_rewrite->init(); |
||
909 | |||
910 | pods_transient_set( 'pods_flush_rewrites', 0 ); |
||
911 | } |
||
912 | } |
||
913 | |||
914 | /** |
||
915 | * Update Post Type messages |
||
916 | * |
||
917 | * @param array $messages |
||
918 | * |
||
919 | * @return array |
||
920 | * @since 2.0.2 |
||
921 | */ |
||
922 | public function setup_updated_messages( $messages ) { |
||
923 | |||
924 | global $post, $post_ID; |
||
925 | |||
926 | $post_types = PodsMeta::$post_types; |
||
927 | $existing_post_types = get_post_types(); |
||
928 | |||
929 | $pods_cpt_ct = pods_transient_get( 'pods_wp_cpt_ct' ); |
||
930 | |||
931 | if ( empty( $pods_cpt_ct ) || empty( $post_types ) ) { |
||
932 | return $messages; |
||
933 | } |
||
934 | |||
935 | foreach ( $post_types as $post_type ) { |
||
936 | if ( ! isset( $pods_cpt_ct['post_types'][ $post_type['name'] ] ) ) { |
||
937 | continue; |
||
938 | } |
||
939 | |||
940 | $labels = self::object_label_fix( $pods_cpt_ct['post_types'][ $post_type['name'] ], 'post_type' ); |
||
941 | $labels = $labels['labels']; |
||
942 | |||
943 | $messages[ $post_type['name'] ] = array( |
||
944 | 1 => sprintf( __( '%s updated. <a href="%s">%s</a>', 'pods' ), $labels['singular_name'], esc_url( get_permalink( $post_ID ) ), $labels['view_item'] ), |
||
945 | 2 => __( 'Custom field updated.', 'pods' ), |
||
946 | 3 => __( 'Custom field deleted.', 'pods' ), |
||
947 | 4 => sprintf( __( '%s updated.', 'pods' ), $labels['singular_name'] ), |
||
948 | /* translators: %s: date and time of the revision */ |
||
949 | 5 => isset( $_GET['revision'] ) ? sprintf( __( '%s restored to revision from %s', 'pods' ), $labels['singular_name'], wp_post_revision_title( (int) $_GET['revision'], false ) ) : false, |
||
950 | 6 => sprintf( __( '%s published. <a href="%s">%s</a>', 'pods' ), $labels['singular_name'], esc_url( get_permalink( $post_ID ) ), $labels['view_item'] ), |
||
951 | 7 => sprintf( __( '%s saved.', 'pods' ), $labels['singular_name'] ), |
||
952 | 8 => sprintf( __( '%s submitted. <a target="_blank" href="%s">Preview %s</a>', 'pods' ), $labels['singular_name'], esc_url( add_query_arg( 'preview', 'true', get_permalink( $post_ID ) ) ), $labels['singular_name'] ), |
||
953 | 9 => sprintf( __( '%s scheduled for: <strong>%s</strong>. <a target="_blank" href="%s">Preview %s</a>', 'pods' ), $labels['singular_name'], // translators: Publish box date format, see http://php.net/date |
||
954 | date_i18n( __( 'M j, Y @ G:i' ), strtotime( $post->post_date ) ), esc_url( get_permalink( $post_ID ) ), $labels['singular_name'] ), |
||
955 | 10 => sprintf( __( '%s draft updated. <a target="_blank" href="%s">Preview %s</a>', 'pods' ), $labels['singular_name'], esc_url( add_query_arg( 'preview', 'true', get_permalink( $post_ID ) ) ), $labels['singular_name'] ) |
||
956 | ); |
||
957 | |||
958 | if ( false === (boolean) $pods_cpt_ct['post_types'][ $post_type['name'] ]['public'] ) { |
||
959 | $messages[ $post_type['name'] ][1] = sprintf( __( '%s updated.', 'pods' ), $labels['singular_name'] ); |
||
960 | $messages[ $post_type['name'] ][6] = sprintf( __( '%s published.', 'pods' ), $labels['singular_name'] ); |
||
961 | $messages[ $post_type['name'] ][8] = sprintf( __( '%s submitted.', 'pods' ), $labels['singular_name'] ); |
||
962 | $messages[ $post_type['name'] ][9] = sprintf( __( '%s scheduled for: <strong>%1$s</strong>.', 'pods' ), $labels['singular_name'], // translators: Publish box date format, see http://php.net/date |
||
963 | date_i18n( __( 'M j, Y @ G:i' ), strtotime( $post->post_date ) ) ); |
||
964 | $messages[ $post_type['name'] ][10] = sprintf( __( '%s draft updated.', 'pods' ), $labels['singular_name'] ); |
||
965 | } |
||
966 | } |
||
967 | |||
968 | return $messages; |
||
969 | } |
||
970 | |||
971 | /** |
||
972 | * @param $args |
||
973 | * @param string $type |
||
974 | * |
||
975 | * @return array |
||
976 | */ |
||
977 | public static function object_label_fix( $args, $type = 'post_type' ) { |
||
978 | |||
979 | if ( empty( $args ) || ! is_array( $args ) ) { |
||
980 | $args = array(); |
||
981 | } |
||
982 | |||
983 | if ( ! isset( $args['labels'] ) || ! is_array( $args['labels'] ) ) { |
||
984 | $args['labels'] = array(); |
||
985 | } |
||
986 | |||
987 | $label = pods_v( 'name', $args['labels'], pods_v( 'label', $args, __( 'Items', 'pods' ), true ), true ); |
||
988 | $singular_label = pods_v( 'singular_name', $args['labels'], pods_v( 'label_singular', $args, __( 'Item', 'pods' ), true ), true ); |
||
989 | |||
990 | $labels = $args['labels']; |
||
991 | |||
992 | $labels['name'] = $label; |
||
993 | $labels['singular_name'] = $singular_label; |
||
994 | |||
995 | if ( 'post_type' == $type ) { |
||
996 | $labels['menu_name'] = pods_v( 'menu_name', $labels, $label, true ); |
||
997 | $labels['name_admin_bar'] = pods_v( 'name_admin_bar', $labels, $singular_label, true ); |
||
998 | $labels['add_new'] = pods_v( 'add_new', $labels, __( 'Add New', 'pods' ), true ); |
||
999 | $labels['add_new_item'] = pods_v( 'add_new_item', $labels, sprintf( __( 'Add New %s', 'pods' ), $singular_label ), true ); |
||
1000 | $labels['new_item'] = pods_v( 'new_item', $labels, sprintf( __( 'New %s', 'pods' ), $singular_label ), true ); |
||
1001 | $labels['edit'] = pods_v( 'edit', $labels, __( 'Edit', 'pods' ), true ); |
||
1002 | $labels['edit_item'] = pods_v( 'edit_item', $labels, sprintf( __( 'Edit %s', 'pods' ), $singular_label ), true ); |
||
1003 | $labels['view'] = pods_v( 'view', $labels, sprintf( __( 'View %s', 'pods' ), $singular_label ), true ); |
||
1004 | $labels['view_item'] = pods_v( 'view_item', $labels, sprintf( __( 'View %s', 'pods' ), $singular_label ), true ); |
||
1005 | $labels['view_items'] = pods_v( 'view_items', $labels, sprintf( __( 'View %s', 'pods' ), $label ), true ); |
||
1006 | $labels['all_items'] = pods_v( 'all_items', $labels, sprintf( __( 'All %s', 'pods' ), $label ), true ); |
||
1007 | $labels['search_items'] = pods_v( 'search_items', $labels, sprintf( __( 'Search %s', 'pods' ), $label ), true ); |
||
1008 | $labels['not_found'] = pods_v( 'not_found', $labels, sprintf( __( 'No %s Found', 'pods' ), $label ), true ); |
||
1009 | $labels['not_found_in_trash'] = pods_v( 'not_found_in_trash', $labels, sprintf( __( 'No %s Found in Trash', 'pods' ), $label ), true ); |
||
1010 | $labels['parent'] = pods_v( 'parent', $labels, sprintf( __( 'Parent %s', 'pods' ), $singular_label ), true ); |
||
1011 | $labels['parent_item_colon'] = pods_v( 'parent_item_colon', $labels, sprintf( __( 'Parent %s:', 'pods' ), $singular_label ), true ); |
||
1012 | $labels['featured_image'] = pods_v( 'featured_image', $labels, __( 'Featured Image', 'pods' ), true ); |
||
1013 | $labels['set_featured_image'] = pods_v( 'set_featured_image', $labels, __( 'Set featured image', 'pods' ), true ); |
||
1014 | $labels['remove_featured_image'] = pods_v( 'remove_featured_image', $labels, __( 'Remove featured image', 'pods' ), true ); |
||
1015 | $labels['use_featured_image'] = pods_v( 'use_featured_image', $labels, __( 'Use as featured image', 'pods' ), true ); |
||
1016 | $labels['archives'] = pods_v( 'archives', $labels, sprintf( __( '%s Archives', 'pods' ), $singular_label ), true ); |
||
1017 | $labels['attributes'] = pods_v( 'attributes', $labels, sprintf( __( '%s Attributes', 'pods' ), $singular_label ), true ); |
||
1018 | $labels['insert_into_item'] = pods_v( 'insert_into_item', $labels, sprintf( __( 'Insert into %s', 'pods' ), $singular_label ), true ); |
||
1019 | $labels['uploaded_to_this_item'] = pods_v( 'uploaded_to_this_item', $labels, sprintf( __( 'Uploaded to this %s', 'pods' ), $singular_label ), true ); |
||
1020 | $labels['filter_items_list'] = pods_v( 'filter_items_list', $labels, sprintf( __( 'Filter %s lists', 'pods' ), $label ), true ); |
||
1021 | $labels['items_list_navigation'] = pods_v( 'items_list_navigation', $labels, sprintf( __( '%s navigation', 'pods' ), $label ), true ); |
||
1022 | $labels['items_list'] = pods_v( 'items_list', $labels, sprintf( __( '%s list', 'pods' ), $label ), true ); |
||
1023 | } elseif ( 'taxonomy' == $type ) { |
||
1024 | $labels['menu_name'] = pods_v( 'menu_name', $labels, $label, true ); |
||
1025 | $labels['search_items'] = pods_v( 'search_items', $labels, sprintf( __( 'Search %s', 'pods' ), $label ), true ); |
||
1026 | $labels['popular_items'] = pods_v( 'popular_items', $labels, sprintf( __( 'Popular %s', 'pods' ), $label ), true ); |
||
1027 | $labels['all_items'] = pods_v( 'all_items', $labels, sprintf( __( 'All %s', 'pods' ), $label ), true ); |
||
1028 | $labels['parent_item'] = pods_v( 'parent_item', $labels, sprintf( __( 'Parent %s', 'pods' ), $singular_label ), true ); |
||
1029 | $labels['parent_item_colon'] = pods_v( 'parent_item_colon', $labels, sprintf( __( 'Parent %s :', 'pods' ), $singular_label ), true ); |
||
1030 | $labels['edit_item'] = pods_v( 'edit_item', $labels, sprintf( __( 'Edit %s', 'pods' ), $singular_label ), true ); |
||
1031 | $labels['view_item'] = pods_v( 'view_item', $labels, sprintf( __( 'View %s', 'pods' ), $singular_label ), true ); |
||
1032 | $labels['update_item'] = pods_v( 'update_item', $labels, sprintf( __( 'Update %s', 'pods' ), $singular_label ), true ); |
||
1033 | $labels['add_new_item'] = pods_v( 'add_new_item', $labels, sprintf( __( 'Add New %s', 'pods' ), $singular_label ), true ); |
||
1034 | $labels['new_item_name'] = pods_v( 'new_item_name', $labels, sprintf( __( 'New %s Name', 'pods' ), $singular_label ), true ); |
||
1035 | $labels['separate_items_with_commas'] = pods_v( 'separate_items_with_commas', $labels, sprintf( __( 'Separate %s with commas', 'pods' ), $label ), true ); |
||
1036 | $labels['add_or_remove_items'] = pods_v( 'add_or_remove_items', $labels, sprintf( __( 'Add or remove %s', 'pods' ), $label ), true ); |
||
1037 | $labels['choose_from_most_used'] = pods_v( 'choose_from_most_used', $labels, sprintf( __( 'Choose from the most used %s', 'pods' ), $label ), true ); |
||
1038 | $labels['not_found'] = pods_v( 'not_found', $labels, sprintf( __( 'No %s found.', 'pods' ), $label ), true ); |
||
1039 | $labels['no_terms'] = pods_v( 'no_terms', $labels, sprintf( __( 'No %s', 'pods' ), $label ), true ); |
||
1040 | $labels['items_list_navigation'] = pods_v( 'items_list_navigation', $labels, sprintf( __( '%s navigation', 'pods' ), $label ), true ); |
||
1041 | $labels['items_list'] = pods_v( 'items_list', $labels, sprintf( __( '%s list', 'pods' ), $label ), true ); |
||
1042 | } |
||
1043 | |||
1044 | $args['labels'] = $labels; |
||
1045 | |||
1046 | return $args; |
||
1047 | } |
||
1048 | |||
1049 | /** |
||
1050 | * Activate and Install |
||
1051 | */ |
||
1052 | public function activate_install() { |
||
1071 | |||
1072 | /** |
||
1073 | * |
||
1074 | */ |
||
1075 | public function activate() { |
||
1089 | |||
1090 | /** |
||
1091 | * |
||
1092 | */ |
||
1093 | public function deactivate() { |
||
1098 | |||
1099 | /** |
||
1100 | * |
||
1101 | */ |
||
1102 | public function needs_upgrade( $current = null, $last = null ) { |
||
1129 | |||
1130 | /** |
||
1131 | * @param $_blog_id |
||
1132 | * @param $user_id |
||
1133 | * @param $domain |
||
1134 | * @param $path |
||
1135 | * @param $site_id |
||
1136 | * @param $meta |
||
1137 | */ |
||
1138 | public function new_blog( $_blog_id, $user_id, $domain, $path, $site_id, $meta ) { |
||
1144 | |||
1145 | /** |
||
1146 | * @param null $_blog_id |
||
1147 | */ |
||
1148 | public function setup( $_blog_id = null ) { |
||
1223 | |||
1224 | /** |
||
1225 | * @param null $_blog_id |
||
1226 | */ |
||
1227 | public function reset( $_blog_id = null ) { |
||
1307 | |||
1308 | public function run() { |
||
1309 | |||
1310 | static $ran; |
||
1311 | |||
1312 | if ( ! empty( $ran ) ) { |
||
1313 | return; |
||
1314 | } |
||
1315 | |||
1316 | $ran = true; |
||
1317 | |||
1318 | $this->load_i18n(); |
||
1319 | |||
1320 | if ( ! did_action( 'plugins_loaded' ) ) { |
||
1321 | add_action( 'plugins_loaded', array( $this, 'load_components' ), 11 ); |
||
1322 | } else { |
||
1323 | $this->load_components(); |
||
1324 | } |
||
1325 | |||
1326 | if ( ! did_action( 'setup_theme' ) ) { |
||
1327 | add_action( 'setup_theme', array( $this, 'load_meta' ), 14 ); |
||
1328 | } else { |
||
1329 | $this->load_meta(); |
||
1330 | } |
||
1331 | |||
1332 | if ( ! did_action( 'init' ) ) { |
||
1333 | add_action( 'init', array( $this, 'core' ), 11 ); |
||
1334 | add_action( 'init', array( $this, 'add_rest_support' ), 12 ); |
||
1335 | add_action( 'init', array( $this, 'setup_content_types' ), 11 ); |
||
1336 | |||
1337 | if ( is_admin() ) { |
||
1338 | add_action( 'init', array( $this, 'admin_init' ), 12 ); |
||
1339 | } |
||
1340 | } else { |
||
1341 | $this->core(); |
||
1342 | $this->add_rest_support(); |
||
1343 | $this->setup_content_types(); |
||
1344 | |||
1345 | if ( is_admin() ) { |
||
1346 | $this->admin_init(); |
||
1347 | } |
||
1348 | } |
||
1349 | |||
1350 | add_action( 'wp_enqueue_scripts', array( $this, 'register_assets' ), 15 ); |
||
1351 | add_action( 'admin_enqueue_scripts', array( $this, 'register_assets' ), 15 ); |
||
1352 | add_action( 'login_enqueue_scripts', array( $this, 'register_assets' ), 15 ); |
||
1353 | |||
1354 | add_filter( 'post_updated_messages', array( $this, 'setup_updated_messages' ), 10, 1 ); |
||
1355 | add_action( 'delete_attachment', array( $this, 'delete_attachment' ) ); |
||
1356 | |||
1357 | // Register widgets |
||
1358 | add_action( 'widgets_init', array( $this, 'register_widgets' ) ); |
||
1359 | |||
1360 | // Show admin bar links |
||
1361 | add_action( 'admin_bar_menu', array( $this, 'admin_bar_links' ), 81 ); |
||
1362 | |||
1363 | } |
||
1364 | |||
1365 | /** |
||
1366 | * Delete Attachments from relationships |
||
1367 | * |
||
1368 | * @param int $_ID |
||
1369 | */ |
||
1370 | public function delete_attachment( $_ID ) { |
||
1467 | |||
1468 | /** |
||
1469 | * Register widgets for Pods |
||
1470 | */ |
||
1471 | public function register_widgets() { |
||
1491 | |||
1492 | /** |
||
1493 | * Add Admin Bar links |
||
1494 | */ |
||
1495 | public function admin_bar_links() { |
||
1541 | |||
1542 | /** |
||
1543 | * Add REST API support to post type and taxonomy objects. |
||
1544 | * |
||
1545 | * @uses "init" |
||
1546 | * |
||
1547 | * @since 2.5.6 |
||
1548 | */ |
||
1549 | public function add_rest_support() { |
||
1611 | } |
||
1612 |
The PSR-2 coding standard requires that all properties in a class have their visibility explicitly declared. If you declare a property using
the property is implicitly global.
To learn more about the PSR-2, please see the PHP-FIG site on the PSR-2.