get_terms

函数
get_terms ( $args = array(), $deprecated = '' )
参数
  • (array|string) $args Optional. Array or string of arguments. See WP_Term_Query::__construct() for information on accepted arguments. Default empty array.
    Required:
    Default: array()
  • (array|string) $deprecated Optional. Argument array, when using the legacy function parameter format. If present, this parameter will be interpreted as `$args`, and the first function parameter will be parsed as a taxonomy or array of taxonomies. Default empty.
    Required:
    Default: (empty)
返回值
  • (WP_Term[]|int[]|string[]|string|WP_Error) Array of terms, a count thereof as a numeric string, or WP_Error if any of the taxonomies do not exist. See the function description for more information.
定义位置
相关方法
get_termget_themesget_the_termsget_term_byget_users
引入
2.3.0
弃用
-

get_terms: 这个函数为特定的分类法检索一个术语(类别、标签等)对象的数组。它需要两个参数:要检索术语的分类法,以及用于过滤结果的可选参数阵列。它返回一个术语对象的数组。

检索一个给定的分类法或分类法列表中的术语。

你可以在发送查询之前完全注入任何定制的内容,也可以用过滤器控制输出。

返回类型根据传递给`$args[‘fields’]`的值而变化。详情见WP_Term_Query::get_terms()。在所有情况下,如果请求一个无效的分类法,将返回一个`WP_Error’对象。

{@see ‘get_terms’}过滤器将在缓存有术语时被调用,并将找到的术语与$taxonomies数组和$args数组一起传递。这个过滤器也会在传递术语数组之前被调用,并将传递术语数组,以及$taxonomies和$args。

{@see ‘list_terms_exclusions’}过滤器会将编译好的排除项与$args一起传递。

{@see ‘get_terms_orderby’}过滤器将查询的`ORDER BY’子句与$args数组一起传递。

在4.5.0之前,`get_terms()`的第一个参数是一个分类标准或分类标准列表。

$terms = get_terms( ‘post_tag’, array( ‘hide_empty’ => false, ) ) 。

从4.5.0开始,分类法应该通过`$args`数组中的’taxonomy’参数传递。

$terms = get_terms( array( ‘taxonomy’ => ‘post_tag’, ‘hide_empty’ => false, ) ) 。

function get_terms( $args = array(), $deprecated = '' ) {
	$term_query = new WP_Term_Query();

	$defaults = array(
		'suppress_filter' => false,
	);

	/*
	 * Legacy argument format ($taxonomy, $args) takes precedence.
	 *
	 * We detect legacy argument format by checking if
	 * (a) a second non-empty parameter is passed, or
	 * (b) the first parameter shares no keys with the default array (ie, it's a list of taxonomies)
	 */
	$_args          = wp_parse_args( $args );
	$key_intersect  = array_intersect_key( $term_query->query_var_defaults, (array) $_args );
	$do_legacy_args = $deprecated || empty( $key_intersect );

	if ( $do_legacy_args ) {
		$taxonomies       = (array) $args;
		$args             = wp_parse_args( $deprecated, $defaults );
		$args['taxonomy'] = $taxonomies;
	} else {
		$args = wp_parse_args( $args, $defaults );
		if ( isset( $args['taxonomy'] ) && null !== $args['taxonomy'] ) {
			$args['taxonomy'] = (array) $args['taxonomy'];
		}
	}

	if ( ! empty( $args['taxonomy'] ) ) {
		foreach ( $args['taxonomy'] as $taxonomy ) {
			if ( ! taxonomy_exists( $taxonomy ) ) {
				return new WP_Error( 'invalid_taxonomy', __( 'Invalid taxonomy.' ) );
			}
		}
	}

	// Don't pass suppress_filter to WP_Term_Query.
	$suppress_filter = $args['suppress_filter'];
	unset( $args['suppress_filter'] );

	$terms = $term_query->query( $args );

	// Count queries are not filtered, for legacy reasons.
	if ( ! is_array( $terms ) ) {
		return $terms;
	}

	if ( $suppress_filter ) {
		return $terms;
	}

	/**
	 * Filters the found terms.
	 *
	 * @since 2.3.0
	 * @since 4.6.0 Added the `$term_query` parameter.
	 *
	 * @param array         $terms      Array of found terms.
	 * @param array|null    $taxonomies An array of taxonomies if known.
	 * @param array         $args       An array of get_terms() arguments.
	 * @param WP_Term_Query $term_query The WP_Term_Query object.
	 */
	return apply_filters( 'get_terms', $terms, $term_query->query_vars['taxonomy'], $term_query->query_vars, $term_query );
}

常见问题

FAQs
查看更多 >