Как отсортировать записи внутри категории WordPress

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

Задача

Пример: хочу на своём сайте отсортировать категорию “СОРМ” вручную – чтобы при открытии списка постов этой категории был определенный порядок.

Возможные решения: существует целый набор разных плагинов для WordPress, которые позволяют изменять общую сортировку записей (не подходит – надо именно внутри одной категории), или сортировку заданной категории, но ни одного реально работающего “из коробки” я не нашёл.

Решение:

  1. Плагин Order Posts с сортировкой по заданному полю
  2. Плагин Advanced Custom Fields для создания отдельного поля для сортировки
  3. Правка файла functions.php для отображения колонки с номерами сортировки

Подробнее, по шагам

1. Создаём поле для сортировки

Устанавливаем и активируем плагин ACF – Advanced Custom Fields

В боковом меню появляется раздел ACF

Добавляем новую группу полей

и задаём минимальные параметры

и говорим где это отображать

После этого в редакторе конкретной записи под текстом появится дополнительное поле

Куда будем добавлять число, определяющее порядок записи при отображении категории

2. Задаём сортировку категории

Устанавливаем и активируем плагин Post Order, который в списке плагинов отображается как “Order Posts per Taxonomy”.

По идее одного этого плагина должно было быть достаточно, чтобы получить инструмент ручной сортировки с помощью перестаскивания блоков, но у меня такое так и не заработало. Либо не смог найти – на странице плагина всего один скриншот, который ни черта не объясняет.

Идём в раздел Записи – Рубрики, выбираем конкретную рубрику (у меня – СОРМ), заходим в неё.

На странице редактирования рубрики должно появиться новое поле

По большому счёту – готово. Включается сортировка по числовому полю порядка записей.

3. Добавляем колонку порядка в общий список записей

Вручную ходить в каждую страницу и держать в голове общий порядок записей – то ещё занятие. Хочу сразу в общем списке смотреть что именно хранится в этом поле в каждой записи.

Для этого будем редактировать файл functinos.php.

Варианты редактирования:

  1. Админка – Внешний вид – Редактор тем, файл functions.php (Theme Functions)
  2. Скачать файл на локальный комп (например ftp), отредактировать и залить обратно
  3. Отредактировать прямо на сервере (дада, прямо на проде, чего мелочиться?))) )

Редактирование подсмотрел у misha.agency. Ну, как подсмотрел – тупо скопировал код и минимально отредактировал.

Код вставляется в конец файла functions.php.

Код:

// add_filter( 'manage_edit-{ТИП ПОСТА}_columns', 'true_add_post_columns', 25 );
add_filter( 'manage_edit-post_columns', 'true_add_post_columns', 25 ); // для обычных записей

function true_add_post_columns( $my_columns ){

	$my_columns[ 'views' ] = 'ACF Order';
	return $my_columns;

}

// а вот этот хук один общий для всех типов постов!
add_action( 'manage_posts_custom_column', 'true_fill_post_columns', 25 );

function true_fill_post_columns( $column ) {

	switch ( $column ) {
		case 'views': {
			//$views = get_post_meta( get_the_ID(), 'views', true );
			$views = get_post_meta( get_the_ID(), 'acf_order', true );
			//echo $views ? $views : 0; // выводим 0, если просмотров нет
			echo $views ? $views : '-'; // выводим 0, если просмотров нет
			//echo $views;

			break;
		}
	}

}

Поправил три строки (выделено жирным).

Всё, получаем колонку в общем списке записей

Если выбрать конкретную рубрику

то получаем порядок сортировки именно в этой категории

Профит.

Share
0
Оставьте комментарий! Напишите, что думаете по поводу статьи.x