WordPress как на ладони
Недорогой хостинг для сайтов на WordPress: wordpress.jino.ru
функция не описана

WP_Term_Query::parse_orderby_meta() protected WP 4.6.0

Generate the ORDER BY clause for an 'orderby' param that is potentially related to a meta query.

Это метод класса: WP_Term_Query{}

Хуков нет.

Возвращает

Строку. ORDER BY clause.

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

// protected - в коде основоного (родительского) или дочернего класса
$result = $this->parse_orderby_meta( $orderby_raw );
$orderby_raw(строка) (обязательный)
Raw 'orderby' value passed to WP_Term_Query.

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

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

Код WP Term Query::parse orderby meta: wp-includes/class-wp-term-query.php WP 5.5.1

<?php
protected function parse_orderby_meta( $orderby_raw ) {
	$orderby = '';

	// Tell the meta query to generate its SQL, so we have access to table aliases.
	$this->meta_query->get_sql( 'term', 't', 'term_id' );
	$meta_clauses = $this->meta_query->get_clauses();
	if ( ! $meta_clauses || ! $orderby_raw ) {
		return $orderby;
	}

	$allowed_keys       = array();
	$primary_meta_key   = null;
	$primary_meta_query = reset( $meta_clauses );
	if ( ! empty( $primary_meta_query['key'] ) ) {
		$primary_meta_key = $primary_meta_query['key'];
		$allowed_keys[]   = $primary_meta_key;
	}
	$allowed_keys[] = 'meta_value';
	$allowed_keys[] = 'meta_value_num';
	$allowed_keys   = array_merge( $allowed_keys, array_keys( $meta_clauses ) );

	if ( ! in_array( $orderby_raw, $allowed_keys, true ) ) {
		return $orderby;
	}

	switch ( $orderby_raw ) {
		case $primary_meta_key:
		case 'meta_value':
			if ( ! empty( $primary_meta_query['type'] ) ) {
				$orderby = "CAST({$primary_meta_query['alias']}.meta_value AS {$primary_meta_query['cast']})";
			} else {
				$orderby = "{$primary_meta_query['alias']}.meta_value";
			}
			break;

		case 'meta_value_num':
			$orderby = "{$primary_meta_query['alias']}.meta_value+0";
			break;

		default:
			if ( array_key_exists( $orderby_raw, $meta_clauses ) ) {
				// $orderby corresponds to a meta_query clause.
				$meta_clause = $meta_clauses[ $orderby_raw ];
				$orderby     = "CAST({$meta_clause['alias']}.meta_value AS {$meta_clause['cast']})";
			}
			break;
	}

	return $orderby;
}