diff options
Diffstat (limited to 'srcs/wordpress/wp-includes/class-wp-taxonomy.php')
| -rw-r--r-- | srcs/wordpress/wp-includes/class-wp-taxonomy.php | 450 |
1 files changed, 450 insertions, 0 deletions
diff --git a/srcs/wordpress/wp-includes/class-wp-taxonomy.php b/srcs/wordpress/wp-includes/class-wp-taxonomy.php new file mode 100644 index 0000000..716da8d --- /dev/null +++ b/srcs/wordpress/wp-includes/class-wp-taxonomy.php @@ -0,0 +1,450 @@ +<?php +/** + * Taxonomy API: WP_Taxonomy class + * + * @package WordPress + * @subpackage Taxonomy + * @since 4.7.0 + */ + +/** + * Core class used for interacting with taxonomies. + * + * @since 4.7.0 + */ +final class WP_Taxonomy { + /** + * Taxonomy key. + * + * @since 4.7.0 + * @var string + */ + public $name; + + /** + * Name of the taxonomy shown in the menu. Usually plural. + * + * @since 4.7.0 + * @var string + */ + public $label; + + /** + * An array of labels for this taxonomy. + * + * @since 4.7.0 + * @var object + */ + public $labels = array(); + + /** + * A short descriptive summary of what the taxonomy is for. + * + * @since 4.7.0 + * @var string + */ + public $description = ''; + + /** + * Whether a taxonomy is intended for use publicly either via the admin interface or by front-end users. + * + * @since 4.7.0 + * @var bool + */ + public $public = true; + + /** + * Whether the taxonomy is publicly queryable. + * + * @since 4.7.0 + * @var bool + */ + public $publicly_queryable = true; + + /** + * Whether the taxonomy is hierarchical. + * + * @since 4.7.0 + * @var bool + */ + public $hierarchical = false; + + /** + * Whether to generate and allow a UI for managing terms in this taxonomy in the admin. + * + * @since 4.7.0 + * @var bool + */ + public $show_ui = true; + + /** + * Whether to show the taxonomy in the admin menu. + * + * If true, the taxonomy is shown as a submenu of the object type menu. If false, no menu is shown. + * + * @since 4.7.0 + * @var bool + */ + public $show_in_menu = true; + + /** + * Whether the taxonomy is available for selection in navigation menus. + * + * @since 4.7.0 + * @var bool + */ + public $show_in_nav_menus = true; + + /** + * Whether to list the taxonomy in the tag cloud widget controls. + * + * @since 4.7.0 + * @var bool + */ + public $show_tagcloud = true; + + /** + * Whether to show the taxonomy in the quick/bulk edit panel. + * + * @since 4.7.0 + * @var bool + */ + public $show_in_quick_edit = true; + + /** + * Whether to display a column for the taxonomy on its post type listing screens. + * + * @since 4.7.0 + * @var bool + */ + public $show_admin_column = false; + + /** + * The callback function for the meta box display. + * + * @since 4.7.0 + * @var bool|callable + */ + public $meta_box_cb = null; + + /** + * The callback function for sanitizing taxonomy data saved from a meta box. + * + * @since 5.1.0 + * @var callable + */ + public $meta_box_sanitize_cb = null; + + /** + * An array of object types this taxonomy is registered for. + * + * @since 4.7.0 + * @var array + */ + public $object_type = null; + + /** + * Capabilities for this taxonomy. + * + * @since 4.7.0 + * @var object + */ + public $cap; + + /** + * Rewrites information for this taxonomy. + * + * @since 4.7.0 + * @var array|false + */ + public $rewrite; + + /** + * Query var string for this taxonomy. + * + * @since 4.7.0 + * @var string|false + */ + public $query_var; + + /** + * Function that will be called when the count is updated. + * + * @since 4.7.0 + * @var callable + */ + public $update_count_callback; + + /** + * Whether this taxonomy should appear in the REST API. + * + * Default false. If true, standard endpoints will be registered with + * respect to $rest_base and $rest_controller_class. + * + * @since 4.7.4 + * @var bool $show_in_rest + */ + public $show_in_rest; + + /** + * The base path for this taxonomy's REST API endpoints. + * + * @since 4.7.4 + * @var string|bool $rest_base + */ + public $rest_base; + + /** + * The controller for this taxonomy's REST API endpoints. + * + * Custom controllers must extend WP_REST_Controller. + * + * @since 4.7.4 + * @var string|bool $rest_controller_class + */ + public $rest_controller_class; + + /** + * Whether it is a built-in taxonomy. + * + * @since 4.7.0 + * @var bool + */ + public $_builtin; + + /** + * Constructor. + * + * @since 4.7.0 + * + * @global WP $wp Current WordPress environment instance. + * + * @param string $taxonomy Taxonomy key, must not exceed 32 characters. + * @param array|string $object_type Name of the object type for the taxonomy object. + * @param array|string $args Optional. Array or query string of arguments for registering a taxonomy. + * Default empty array. + */ + public function __construct( $taxonomy, $object_type, $args = array() ) { + $this->name = $taxonomy; + + $this->set_props( $object_type, $args ); + } + + /** + * Sets taxonomy properties. + * + * @since 4.7.0 + * + * @param array|string $object_type Name of the object type for the taxonomy object. + * @param array|string $args Array or query string of arguments for registering a taxonomy. + */ + public function set_props( $object_type, $args ) { + $args = wp_parse_args( $args ); + + /** + * Filters the arguments for registering a taxonomy. + * + * @since 4.4.0 + * + * @param array $args Array of arguments for registering a taxonomy. + * @param string $taxonomy Taxonomy key. + * @param string[] $object_type Array of names of object types for the taxonomy. + */ + $args = apply_filters( 'register_taxonomy_args', $args, $this->name, (array) $object_type ); + + $defaults = array( + 'labels' => array(), + 'description' => '', + 'public' => true, + 'publicly_queryable' => null, + 'hierarchical' => false, + 'show_ui' => null, + 'show_in_menu' => null, + 'show_in_nav_menus' => null, + 'show_tagcloud' => null, + 'show_in_quick_edit' => null, + 'show_admin_column' => false, + 'meta_box_cb' => null, + 'meta_box_sanitize_cb' => null, + 'capabilities' => array(), + 'rewrite' => true, + 'query_var' => $this->name, + 'update_count_callback' => '', + 'show_in_rest' => false, + 'rest_base' => false, + 'rest_controller_class' => false, + '_builtin' => false, + ); + + $args = array_merge( $defaults, $args ); + + // If not set, default to the setting for public. + if ( null === $args['publicly_queryable'] ) { + $args['publicly_queryable'] = $args['public']; + } + + if ( false !== $args['query_var'] && ( is_admin() || false !== $args['publicly_queryable'] ) ) { + if ( true === $args['query_var'] ) { + $args['query_var'] = $this->name; + } else { + $args['query_var'] = sanitize_title_with_dashes( $args['query_var'] ); + } + } else { + // Force query_var to false for non-public taxonomies. + $args['query_var'] = false; + } + + if ( false !== $args['rewrite'] && ( is_admin() || '' != get_option( 'permalink_structure' ) ) ) { + $args['rewrite'] = wp_parse_args( + $args['rewrite'], + array( + 'with_front' => true, + 'hierarchical' => false, + 'ep_mask' => EP_NONE, + ) + ); + + if ( empty( $args['rewrite']['slug'] ) ) { + $args['rewrite']['slug'] = sanitize_title_with_dashes( $this->name ); + } + } + + // If not set, default to the setting for public. + if ( null === $args['show_ui'] ) { + $args['show_ui'] = $args['public']; + } + + // If not set, default to the setting for show_ui. + if ( null === $args['show_in_menu'] || ! $args['show_ui'] ) { + $args['show_in_menu'] = $args['show_ui']; + } + + // If not set, default to the setting for public. + if ( null === $args['show_in_nav_menus'] ) { + $args['show_in_nav_menus'] = $args['public']; + } + + // If not set, default to the setting for show_ui. + if ( null === $args['show_tagcloud'] ) { + $args['show_tagcloud'] = $args['show_ui']; + } + + // If not set, default to the setting for show_ui. + if ( null === $args['show_in_quick_edit'] ) { + $args['show_in_quick_edit'] = $args['show_ui']; + } + + $default_caps = array( + 'manage_terms' => 'manage_categories', + 'edit_terms' => 'manage_categories', + 'delete_terms' => 'manage_categories', + 'assign_terms' => 'edit_posts', + ); + + $args['cap'] = (object) array_merge( $default_caps, $args['capabilities'] ); + unset( $args['capabilities'] ); + + $args['object_type'] = array_unique( (array) $object_type ); + + // If not set, use the default meta box + if ( null === $args['meta_box_cb'] ) { + if ( $args['hierarchical'] ) { + $args['meta_box_cb'] = 'post_categories_meta_box'; + } else { + $args['meta_box_cb'] = 'post_tags_meta_box'; + } + } + + $args['name'] = $this->name; + + // Default meta box sanitization callback depends on the value of 'meta_box_cb'. + if ( null === $args['meta_box_sanitize_cb'] ) { + switch ( $args['meta_box_cb'] ) { + case 'post_categories_meta_box': + $args['meta_box_sanitize_cb'] = 'taxonomy_meta_box_sanitize_cb_checkboxes'; + break; + + case 'post_tags_meta_box': + default: + $args['meta_box_sanitize_cb'] = 'taxonomy_meta_box_sanitize_cb_input'; + break; + } + } + + foreach ( $args as $property_name => $property_value ) { + $this->$property_name = $property_value; + } + + $this->labels = get_taxonomy_labels( $this ); + $this->label = $this->labels->name; + } + + /** + * Adds the necessary rewrite rules for the taxonomy. + * + * @since 4.7.0 + * + * @global WP $wp Current WordPress environment instance. + */ + public function add_rewrite_rules() { + /* @var WP $wp */ + global $wp; + + // Non-publicly queryable taxonomies should not register query vars, except in the admin. + if ( false !== $this->query_var && $wp ) { + $wp->add_query_var( $this->query_var ); + } + + if ( false !== $this->rewrite && ( is_admin() || '' != get_option( 'permalink_structure' ) ) ) { + if ( $this->hierarchical && $this->rewrite['hierarchical'] ) { + $tag = '(.+?)'; + } else { + $tag = '([^/]+)'; + } + + add_rewrite_tag( "%$this->name%", $tag, $this->query_var ? "{$this->query_var}=" : "taxonomy=$this->name&term=" ); + add_permastruct( $this->name, "{$this->rewrite['slug']}/%$this->name%", $this->rewrite ); + } + } + + /** + * Removes any rewrite rules, permastructs, and rules for the taxonomy. + * + * @since 4.7.0 + * + * @global WP $wp Current WordPress environment instance. + */ + public function remove_rewrite_rules() { + /* @var WP $wp */ + global $wp; + + // Remove query var. + if ( false !== $this->query_var ) { + $wp->remove_query_var( $this->query_var ); + } + + // Remove rewrite tags and permastructs. + if ( false !== $this->rewrite ) { + remove_rewrite_tag( "%$this->name%" ); + remove_permastruct( $this->name ); + } + } + + /** + * Registers the ajax callback for the meta box. + * + * @since 4.7.0 + */ + public function add_hooks() { + add_filter( 'wp_ajax_add-' . $this->name, '_wp_ajax_add_hierarchical_term' ); + } + + /** + * Removes the ajax callback for the meta box. + * + * @since 4.7.0 + */ + public function remove_hooks() { + remove_filter( 'wp_ajax_add-' . $this->name, '_wp_ajax_add_hierarchical_term' ); + } +} |
