WordPress как на ладони
wordpress jino

get_terms_orderby хук-фильтр . WP 2.8

Фильтруем часть SQL запроса отвечающую за колонку сортировки в функции get_terms(), get_categories(), wp_list_categories().

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

function filter_function_name_11( $orderby, $args, $taxonomies ) {
	// Фильтр...

	return $orderby;
}
add_filter( 'get_terms_orderby', 'filter_function_name_11' );
$orderby(строка)
Часть запроса, выглядит так при сортировке по колонке name: t.name или е.slug.
$args(массив)
Массив аргументов переданный в функцию get_terms().
$taxonomies(строка/массив)
Название таксономий переданных в get_terms()

Примеры

#1 Сортировка категорий

Предположим, что мы для сортировки категорий указывает в начало слага (альтернативного названия) каждой категории цифру. Теперь, если мы укажем параметр orderby=slug в функции get_terms(), то получим такую сортировку 1, 10, 2, 3..., а надо 1, 2, 3...9, 10. Чтобы это исправить можно изменить часть SQL запроса:

// устанавливаем фильтр
add_filter('get_terms_orderby', 'sort_terms_clause', 10, 3);
function sort_terms_clause( $orderby, $args, $taxonomies ){
	return 't.slug+0';
}

// получаем рубрики
$terms = get_terms('category', array('hide_empty=0') );
foreach( $terms as $term ){
	// выводим рубрики, здесь будет нужная нам сортировка
}

// удаляем фильтр
remove_filter('get_terms_orderby', 'sort_terms_clause', 10);

Связи хука

Используется в: WP_Term_Query::parse_orderby()

Фрагменты кода хука get_terms_orderby

Фрагмент из: wp-includes/class-wp-term-query.php WP 4.8.2
...
			$orderby = 't.name';

			// This may be a value of orderby related to meta.
			$maybe_orderby_meta = true;
		}

		/**
		 * Filters the ORDERBY clause of the terms query.
		 *
		 * @since 2.8.0
		 *
		 * @param string $orderby    `ORDERBY` clause of the terms query.
		 * @param array  $args       An array of terms query arguments.
		 * @param array  $taxonomies An array of taxonomies.
		 */
		$orderby = apply_filters( 'get_terms_orderby', $orderby, $this->query_vars, $this->query_vars['taxonomy'] );

		// Run after the 'get_terms_orderby' filter for backward compatibility.
		if ( $maybe_orderby_meta ) {
			$maybe_orderby_meta = $this->parse_orderby_meta( $_orderby );
			if ( $maybe_orderby_meta ) {
				$orderby = $maybe_orderby_meta;
			}
		}

		return $orderby;
	}

	/**
	 * Generate the ORDER BY clause for an 'orderby' param that is potentially related to a meta query.
	 *
...
get_terms_orderby Комментариев нет

Здравствуйте, !

Ваш комментарий