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.