Задача: задать ручную сортировку записей в WordPress при отображении заданной категории, но при этом оставить стандартную сортировку для общего списка записей на главной странице или в других категориях.
Задача
Пример: хочу на своём сайте отсортировать категорию “СОРМ” вручную – чтобы при открытии списка постов этой категории был определенный порядок.
Возможные решения: существует целый набор разных плагинов для WordPress, которые позволяют изменять общую сортировку записей (не подходит – надо именно внутри одной категории), или сортировку заданной категории, но ни одного реально работающего “из коробки” я не нашёл.
Решение:
- Плагин Order Posts с сортировкой по заданному полю
- Плагин Advanced Custom Fields для создания отдельного поля для сортировки
- Правка файла functions.php для отображения колонки с номерами сортировки
Подробнее, по шагам
1. Создаём поле для сортировки
Устанавливаем и активируем плагин ACF – Advanced Custom Fields
В боковом меню появляется раздел ACF
Добавляем новую группу полей
и задаём минимальные параметры
и говорим где это отображать
После этого в редакторе конкретной записи под текстом появится дополнительное поле
Куда будем добавлять число, определяющее порядок записи при отображении категории
2. Задаём сортировку категории
Устанавливаем и активируем плагин Post Order, который в списке плагинов отображается как “Order Posts per Taxonomy”.
По идее одного этого плагина должно было быть достаточно, чтобы получить инструмент ручной сортировки с помощью перестаскивания блоков, но у меня такое так и не заработало. Либо не смог найти – на странице плагина всего один скриншот, который ни черта не объясняет.
Идём в раздел Записи – Рубрики, выбираем конкретную рубрику (у меня – СОРМ), заходим в неё.
На странице редактирования рубрики должно появиться новое поле
По большому счёту – готово. Включается сортировка по числовому полю порядка записей.
3. Добавляем колонку порядка в общий список записей
Вручную ходить в каждую страницу и держать в голове общий порядок записей – то ещё занятие. Хочу сразу в общем списке смотреть что именно хранится в этом поле в каждой записи.
Для этого будем редактировать файл functinos.php.
Варианты редактирования:
- Админка – Внешний вид – Редактор тем, файл functions.php (Theme Functions)
- Скачать файл на локальный комп (например ftp), отредактировать и залить обратно
- Отредактировать прямо на сервере (дада, прямо на проде, чего мелочиться?))) )
Редактирование подсмотрел у 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;
}
}
}
Поправил три строки (выделено жирным).
Всё, получаем колонку в общем списке записей
Если выбрать конкретную рубрику
то получаем порядок сортировки именно в этой категории
Профит.