Как создать пользовательскую сортировку для категорий WordPress

7 авг. 2013 г., 22:18:45
Просмотры: 47.1K
Голосов: 7

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

Вот что предлагает Codex:

orderby (строка) Сортировка категорий по алфавиту или по уникальному ID категории. По умолчанию сортировка по ID категории. Допустимые значения:
- id
- name - по умолчанию
- slug
- count
- term_group

order (строка) Порядок сортировки категорий (по возрастанию или убыванию). По умолчанию по возрастанию. Допустимые значения:
- asc - по умолчанию
- desc

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

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

<?php
$args = array(
'orderby' => 'ID',
'order' => 'ASC',
'include' => '5,6,7,8,29,9,10,11,12,13,14,15,16'
);
$categories = get_categories($args);
foreach($categories as $category) {
echo '<li><a href="' . get_category_link( $category->term_id ) . '" title="' . sprintf( __( "Просмотреть все записи в %s" ), $category->name ) . '" ' . '>' . $category->name . '</a>' . ' ' . '(' . $category->count . ')' . '</li> ';
}
?>
3
Комментарии

Эта статья может помочь http://www.wphub.com/sorting-categories-custom-sort-order/

Srikanth AD Srikanth AD
7 авг. 2013 г. 22:30:59

Спасибо за ссылку. Я посмотрел, но это кажется слишком сложным, и я не хочу использовать плагин. Но я очень благодарен за быстрый ответ. Я искренне ценю время, которое вы потратили, чтобы помочь.

Wayne Hatter Jr. Wayne Hatter Jr.
7 авг. 2013 г. 22:56:58

Это может помочь. Хотя статья про записи, но второе решение может быть полезным для вас, так как использует php и массивы.

Sisir Sisir
7 авг. 2013 г. 23:01:40
Все ответы на вопрос 3
0

Если вы уже используете Advanced Custom Fields (а вы должны использовать!), вы можете создать поле порядка для ваших категорий, с помощью которого можно задать их порядок вручную в числовом виде.

Затем все, что вам нужно сделать:

$categories = get_categories( $args );  

usort($categories, function($a, $b) {
   return get_field("category_order", "category_".$a->term_id) - get_field("category_order", "category_".$b->term_id);
});

foreach ($categories as $category){
...

Где category_order — это имя поля, которое вы создали с помощью ACF.

Примечание: Используется способ usort из PHP 5.3.

3 янв. 2014 г. 09:03:58
1

Отлично, я нашел плагин, который делает именно то, что мне нужно. Я не хотел использовать плагины, но этот оказался достаточно легковесным и идеально справился с задачей. http://wordpress.org/plugins/taxonomy-terms-order/

7 авг. 2013 г. 23:42:54
Комментарии

На момент 2021-07-19 не отражает желаемый порядок сортировки на фронтэнде. Используется WordPress 5.7.2 с темой Twenty Twenty One "из коробки"

klewis klewis
19 июл. 2021 г. 23:20:50
1

Исходный код будет работать, если изменить аргументы на: 'orderby' => 'include'

$args = array(
    'orderby' => 'include', // Сортировка по порядку в параметре include
    'order' => 'ASC',       // Порядок сортировки - по возрастанию
    'include' => '5,6,7,8,29,9,10,11,12,13,14,15,16' // ID включаемых категорий
);
$categories = get_categories($args);
foreach($categories as $category) {
    echo '<li><a href="' . get_category_link( $category->term_id ) . '" title="' . sprintf(     __( "Просмотреть все записи в %s" ), $category->name ) . '" ' . '>' . $category->name . '</a>' . ' ' . '(' . $category->count . ')' . '</li> ';
}
18 окт. 2019 г. 18:44:29
Комментарии

да, у меня сработало :)

Nuno Sarmento Nuno Sarmento
5 авг. 2020 г. 18:58:29