/ Плагины / Сортировка категорий

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

HIT

21.09.2015

14924

1

Сортировка категорий частая задача при формировании каталога. Разберемся в тонкостях данного явления.

Сортировка категорий WP

Сортировка категорий на wordpress реализована не очень детально. Сходу категории сортируются по алфавиту, но бывает нужно отсортировать их в произвольном порядке.
Для этих целей подходит плагин Category Order.
После установки в меню Записи появляется раздел с функционалом сортировки категорий, нужно расставить категории как следует. В коде менять ничего не надо.

Если у настраиваемых категорий есть дочерние, то они могут тоже начать выводиться. Для этого в шаблоне вывода категорий

<?php $current_cat = get_query_var('cat');
global $ancestor;
$childcats = get_categories('child_of='.$current_cat.'&hide_empty=0');
foreach ($childcats as $childcat) : ?>

надо заменить child_of на parent.

Category Order and Taxonomy Terms Order

Еще один замечательный плагин для пользовательской сортировки категорий — Category Order and Taxonomy Terms Order (300 000). Также этим плагином можно назначать порядок терминов таксономии.

Одним недостатком является, то, что в автоматическом режиме начинает сортировать все термины, где это и не требуется. Чтобы этого избежать, нужно отключить в настройках автоматическую сортировку и где необходимо прописывать вручную, примеры:

$childcats = get_categories('child_of=3&hide_empty=1&orderby=term_order');
или
$argv = array( 'orderby' => 'term_order' );
get_terms('category', $argv);

Custom Taxonomy Order (40 000)

Еще один отличный плагин. Особенностью является то что он сортирует все имеющиеся таксономии (категории, метки, пользовательские). Категории сортирует по отдельности, можно назначить порядок у родительских, а потом в любой из дочерних категорий. Это удобно если категорий много.

Сортировку, например в метках, нужно прописывать так: ‘orderby’ => ‘term_order’

Сортировка категорий и товаров WC

В woocommerce произвольная сортировка уже реализована. Для изменения порядка категорий достаточно перетащить категорию в нужную позицию. Если категорий много нужно включить отображение бОльшего количества категорий на страницу (сверху справа — Настройки экрана).

Таким же образом можно сортировать и товары WC. В настройках WC (Товары/Отображение/) исходная сортировка товаров должна быть Сортировка по умолчанию (произвольный порядок + имя). В архиве товаров сверху слева нажимаем кнопку Сортировка, с этого момента товары можно перетягивать. Произвольной сортировки без перетягивания можно добиться заполнением у товара поля Порядок (в самом товаре или при быстром редактировании).

Нужно учитывать, что изначально у товара значение Порядок = 0. т.е. они все равны 0 и сортируются по алфавиту. Например, если мы передвинем товар выше другого, который изначально не трогали — не факт, что товар, который мы двигали будет первее при выводе.

Скрываем дочерние категории

Если на сайте заведено множество категорий и подкатегорий, то их уже не удобно сортировать, перетаскивая через множество дочерних категорий. На сайте wp-kama есть отличное решение, создающее в категориях переключатель — Показывать все уровни/Только родители.

// Переключатель уровня категорий в админке
$taxonomy = 'product_cat';
add_action( "{$taxonomy}_add_form", function($taxonomy){
	ob_start();
} );

add_action( "after-{$taxonomy}-table", function($taxonomy){
	$html = ob_get_clean();

	$__preg_replace_callback = function( $match ){
		$val = @ $_GET['parent_only'];
		ob_start();
		?>
		<div class="alignleft actions">
			<select name="parent_only" onchange="window.add_param_to_URL(this)">
				<option value="">Все уровни...</option>
				<option value="yes" <?php selected('yes', $val) ?> >Только родители</option>
			</select>
		</div>
		<script>
		window.add_param_to_URL = function(el){
			var href = window.location.href, sep = /[?]/.test(href) ? "&" : "?", name = el.name.replace(/[^a-z_-]/i,'');
			window.location = (new RegExp(name+'=?')).test(href) ? href.replace( (new RegExp('([?&]'+name+'=?)[^&]*')), (el.value ? "$1"+ el.value : '') ) : (href + sep + name + "="+ el.value);
		}
		</script>
		<?php
		return $match[1] . ob_get_clean();
	};

	echo preg_replace_callback('~(id="doaction[^<]+</div>)~', $__preg_replace_callback, $html );
} );


add_filter('get_terms_args', 'my_terms_filter_handler');
function my_terms_filter_handler( $query ){
	if( empty($_GET['parent_only']) || ! is_admin() ) return $query;
	if( ! ( $query['fields'] == 'count' || isset($query['page'])  ) )
		 return $query;
	$query['parent'] = 0; // только родители
	return $query;
}
[site-socialshare]
  • Похожие записи
  • Комментарии
  • Вложения
Сортировка постов (по дате, по заголовку, по дате изменений)

Сортировка постов (по дате, по заголовку, по дате изменений)

Создадим для удобства пользователей функционал сортировки постов (по дате, по заголовку, по дате изменений). Сортировка отличается от фильтрации тем, что при сортировке показываются все записи, но в другом порядке, а Читать далее »

Варианты сортировки woocommerce

Варианты сортировки woocommerce

Добавляем свои варианты сортировки в woocommerce, кроме стандартных: по цене, по новизне, по популярности, по рейтингам. Сортировке поддаются только числовые свойства товаров содержащихся у каждого товара. Сортировка по атрибуту относится Читать далее »

/
Сортировка по произвольным полям

Сортировка по произвольным полям

Более продвинутая форма сортировки — сортировка по произвольным полям. Для рассматриваемого функционала сортировки, нет принципиальной разницы: создано поле штатными средствами wordpress или плагином ACF. Метод сортировки по произвольному полю Ранее Читать далее »

Добавить комментарий

1 комментарий

  1. kissmyass

    Форма комментариев выглядит просто нелепо, слишком широко. Спец херовый

Сортировка категорий
PHP код в записях и страницах
Рекомендации для васPHP код в записях и страницахOpttour.ru
Спасибо! Наш менеджер свяжется с Вами в течении 5 минут.