ACF_Taxonomy::get_taxonomy_argspublicACF 6.1

Parses ACF taxonomy settings and returns an array of taxonomy args that can be easily handled by register_taxonomy().

Omits settings that line up with the WordPress defaults to reduce the size of the array passed to register_taxonomy(), which might be exported.

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

Хуки из метода

Возвращает

Массив.

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

$ACF_Taxonomy = new ACF_Taxonomy();
$ACF_Taxonomy->get_taxonomy_args( $post, $escape_labels );
$post(массив) (обязательный)
The main ACF taxonomy settings array.
$escape_labels(true|false)
Determines if the label values should be escaped.
По умолчанию: true

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

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

Код ACF_Taxonomy::get_taxonomy_args() ACF 6.4.2

public function get_taxonomy_args( $post, $escape_labels = true ) {
	$args = array();

	// Make sure any provided labels are escaped strings and not empty.
	$labels = array_filter( $post['labels'] );
	$labels = array_map( 'strval', $labels );
	if ( $escape_labels ) {
		$labels = array_map( 'esc_html', $labels );
	}
	if ( ! empty( $labels ) ) {
		$args['labels'] = $labels;
	}

	// Description is an optional string.
	if ( ! empty( $post['description'] ) ) {
		$args['description'] = (string) $post['description'];
	}

	// ACF requires the public setting to decide other settings.
	$args['public'] = ! empty( $post['public'] );

	// WordPress and ACF both default to false, so this can be omitted if still false.
	if ( ! empty( $post['hierarchical'] ) ) {
		$args['hierarchical'] = true;
	}

	// WordPress defaults to the same as $args['public'].
	$publicly_queryable = (bool) $post['publicly_queryable'];
	if ( $publicly_queryable !== $args['public'] ) {
		$args['publicly_queryable'] = $publicly_queryable;
	}

	// WordPress defaults to the same as $args['public'].
	$show_ui = (bool) $post['show_ui'];
	if ( $show_ui !== $args['public'] ) {
		$args['show_ui'] = $show_ui;
	}

	// WordPress defaults to the same as $args['show_ui'].
	$show_in_menu = $post['show_in_menu'];
	if ( $show_in_menu !== $show_ui ) {
		$args['show_in_menu'] = (bool) $show_in_menu;
	}

	// WordPress defaults to the same as $args['public'].
	$show_in_nav_menus = (bool) $post['show_in_nav_menus'];
	if ( $show_in_nav_menus !== $args['public'] ) {
		$args['show_in_nav_menus'] = $show_in_nav_menus;
	}

	// ACF defaults to true, but can be overridden.
	$show_in_rest         = (bool) $post['show_in_rest'];
	$args['show_in_rest'] = $show_in_rest;

	// WordPress defaults to `$taxonomy`.
	$rest_base = (string) $post['rest_base'];
	if ( ! empty( $rest_base ) && $rest_base !== $post['taxonomy'] ) {
		$args['rest_base'] = $rest_base;
	}

	// WordPress defaults to "wp/v2".
	$rest_namespace = (string) $post['rest_namespace'];
	if ( ! empty( $rest_namespace ) && 'wp/v2' !== $rest_namespace ) {
		$args['rest_namespace'] = $post['rest_namespace'];
	}

	// WordPress defaults to `WP_REST_Terms_Controller`.
	$rest_controller_class = (string) $post['rest_controller_class'];
	if ( ! empty( $rest_controller_class ) && 'WP_REST_Terms_Controller' !== $rest_controller_class ) {
		$args['rest_controller_class'] = $rest_controller_class;
	}

	// WordPress defaults to the same as `$args['show_ui']`.
	$show_tagcloud = (bool) $post['show_tagcloud'];
	if ( $show_tagcloud !== $show_ui ) {
		$args['show_tagcloud'] = $show_tagcloud;
	}

	// WordPress defaults to the same as `$args['show_ui']`.
	$show_in_quick_edit = (bool) $post['show_in_quick_edit'];
	if ( $show_in_quick_edit !== $show_ui ) {
		$args['show_in_quick_edit'] = $show_tagcloud;
	}

	// WordPress defaults to false.
	$show_admin_column = (bool) $post['show_admin_column'];
	if ( $show_admin_column ) {
		$args['show_admin_column'] = true;
	}

	$capabilities = array();

	if ( ! empty( $post['capabilities']['manage_terms'] ) && 'manage_categories' !== $post['capabilities']['manage_terms'] ) {
		$capabilities['manage_terms'] = (string) $post['capabilities']['manage_terms'];
	}

	if ( ! empty( $post['capabilities']['edit_terms'] ) && 'manage_categories' !== $post['capabilities']['edit_terms'] ) {
		$capabilities['edit_terms'] = (string) $post['capabilities']['edit_terms'];
	}

	if ( ! empty( $post['capabilities']['delete_terms'] ) && 'manage_categories' !== $post['capabilities']['delete_terms'] ) {
		$capabilities['delete_terms'] = (string) $post['capabilities']['delete_terms'];
	}

	if ( ! empty( $post['capabilities']['assign_terms'] ) && 'edit_posts' !== $post['capabilities']['assign_terms'] ) {
		$capabilities['assign_terms'] = (string) $post['capabilities']['assign_terms'];
	}

	if ( ! empty( $capabilities ) ) {
		$args['capabilities'] = $capabilities;
	}

	// WordPress defaults to the tags/categories metabox, but a custom callback or `false` is also supported.
	$meta_box = isset( $post['meta_box'] ) ? (string) $post['meta_box'] : 'default';

	if ( 'custom' === $meta_box && ! empty( $post['meta_box_cb'] ) ) {
		$args['meta_box_cb'] = array( $this, 'build_safe_context_for_metabox_cb' );

		if ( ! empty( $post['meta_box_sanitize_cb'] ) ) {
			$args['meta_box_sanitize_cb'] = (string) $post['meta_box_sanitize_cb'];
		}
	} elseif ( 'disabled' === $meta_box ) {
		$args['meta_box_cb'] = false;
	}

	// The rewrite arg can be a boolean or array of further settings. WordPress and ACF default to true.
	$rewrite         = (array) $post['rewrite'];
	$rewrite_enabled = true;
	$rewrite_args    = array();

	// Value of ACF select (not passed to `register_taxonomy()`).
	$rewrite['permalink_rewrite'] = isset( $rewrite['permalink_rewrite'] ) ? (string) $rewrite['permalink_rewrite'] : 'taxonomy_key';

	if ( 'no_permalink' === $rewrite['permalink_rewrite'] ) {
		$rewrite_enabled = false;
	}

	// Rewrite slug defaults to $taxonomy key.
	if ( ! empty( $rewrite['slug'] ) && $rewrite['slug'] !== $post['taxonomy'] && 'custom_permalink' === $rewrite['permalink_rewrite'] ) {
		$rewrite_args['slug'] = (string) $rewrite['slug'];
	}

	// WordPress defaults to true.
	if ( isset( $rewrite['with_front'] ) && ! $rewrite['with_front'] && $rewrite_enabled ) {
		$rewrite_args['with_front'] = false;
	}

	// WordPress defaults to false.
	if ( isset( $rewrite['rewrite_hierarchical'] ) && $rewrite['rewrite_hierarchical'] && $rewrite_enabled ) {
		$rewrite_args['hierarchical'] = true;
	}

	if ( $rewrite_enabled && ! empty( $rewrite_args ) ) {
		$args['rewrite'] = $rewrite_args;
	} elseif ( ! $rewrite_enabled ) {
		$args['rewrite'] = false;
	}

	// WordPress and ACF default to $taxonomy key, a boolean can also be used.
	$query_var = (string) $post['query_var'];
	if ( 'custom_query_var' === $query_var ) {
		$query_var_name = (string) $post['query_var_name'];

		if ( ! empty( $query_var_name ) && $query_var_name !== $post['taxonomy'] ) {
			$args['query_var'] = $query_var_name;
		}
	} elseif ( 'none' === $query_var ) {
		$args['query_var'] = false;
	}

	// WordPress accepts a string or an array of term info, but always converts into an array.
	$default_term = (array) $post['default_term'];
	if ( isset( $default_term['default_term_enabled'] ) && $default_term['default_term_enabled'] ) {
		$args['default_term'] = array();

		if ( isset( $default_term['default_term_name'] ) && ! empty( $default_term['default_term_name'] ) ) {
			$args['default_term']['name'] = (string) $default_term['default_term_name'];
		}

		if ( isset( $default_term['default_term_slug'] ) && ! empty( $default_term['default_term_slug'] ) ) {
			$args['default_term']['slug'] = (string) $default_term['default_term_slug'];
		}

		if ( isset( $default_term['default_term_description'] ) && ! empty( $default_term['default_term_description'] ) ) {
			$args['default_term']['description'] = (string) $default_term['default_term_description'];
		}
	}

	// WordPress defaults to null, equivalent to false.
	$sort = (bool) $post['sort'];
	if ( $sort ) {
		$args['sort'] = true;
	}

	return apply_filters( 'acf/taxonomy/registration_args', $args, $post );
}