WP_Taxonomy::set_props()publicWP 4.7.0

Sets taxonomy properties.

See the register_taxonomy() function for accepted arguments for $args.

Метод класса: WP_Taxonomy{}

Возвращает

null. Ничего (null).

Использование

$WP_Taxonomy = new WP_Taxonomy();
$WP_Taxonomy->set_props( $object_type, $args );
$object_type(строка|string[]) (обязательный)
Name or array of names of the object types for the taxonomy.
$args(массив|строка) (обязательный)
Array or query string of arguments for registering a taxonomy.

Список изменений

С версии 4.7.0 Введена.

Код WP_Taxonomy::set_props() WP 6.5.2

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.
	 *                              See the register_taxonomy() function for accepted arguments.
	 * @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 );

	$taxonomy = $this->name;

	/**
	 * Filters the arguments for registering a specific taxonomy.
	 *
	 * The dynamic portion of the filter name, `$taxonomy`, refers to the taxonomy key.
	 *
	 * Possible hook names include:
	 *
	 *  - `register_category_taxonomy_args`
	 *  - `register_post_tag_taxonomy_args`
	 *
	 * @since 6.0.0
	 *
	 * @param array    $args        Array of arguments for registering a taxonomy.
	 *                              See the register_taxonomy() function for accepted arguments.
	 * @param string   $taxonomy    Taxonomy key.
	 * @param string[] $object_type Array of names of object types for the taxonomy.
	 */
	$args = apply_filters( "register_{$taxonomy}_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_namespace'        => false,
		'rest_controller_class' => false,
		'default_term'          => null,
		'sort'                  => null,
		'args'                  => null,
		'_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'];
	}

	// If not set, default rest_namespace to wp/v2 if show_in_rest is true.
	if ( false === $args['rest_namespace'] && ! empty( $args['show_in_rest'] ) ) {
		$args['rest_namespace'] = 'wp/v2';
	}

	$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;
		}
	}

	// Default taxonomy term.
	if ( ! empty( $args['default_term'] ) ) {
		if ( ! is_array( $args['default_term'] ) ) {
			$args['default_term'] = array( 'name' => $args['default_term'] );
		}
		$args['default_term'] = wp_parse_args(
			$args['default_term'],
			array(
				'name'        => '',
				'slug'        => '',
				'description' => '',
			)
		);
	}

	foreach ( $args as $property_name => $property_value ) {
		$this->$property_name = $property_value;
	}

	$this->labels = get_taxonomy_labels( $this );
	$this->label  = $this->labels->name;
}