Вопрос или проблема
Можно ли это сделать? В кодексе опция ‘orderby’ не позволяет ручной сортировки (только по возрастанию ID, имени, количеству, слагу и т.д.).
Вот код:
<?php
wp_list_categories('include=16,17,15&title_li=<h3>' . __('По содержимому') . '</h3>' );
?>
Сейчас это алфавитный порядок, так как я не включал выражение ‘orderby’. Я хочу, чтобы они были в порядке 17, 15, 16, но только эти 3 категории, которые не в алфавитном порядке.
Это возможно?
Я бы использовал get_categories(), чтобы сначала получить ассоциативный массив всех категорий, а затем отсортировать его так, как вам нужно.
$categories = get_categories('include=16,17,15');
Ответ или решение
Для решения задачи ручной сортировки категорий в WordPress, важно учитывать, что функция wp_list_categories()
не предоставляет встроенной возможности для произвольного порядка элементов. Однако, благодаря гибкости WordPress, можно использовать комбинацию функций для достижения желаемого результата.
Шаг 1: Получение категорий
Сначала мы используем функцию get_categories()
для получения массива категорий по их ID. Код ниже демонстрирует этот процесс:
$categories = get_categories('include=16,17,15');
Этот код извлечет только 3 категории с ID 16, 17 и 15, которые вы указали.
Шаг 2: Сортировка категорий
Следующий этап — это сортировка массива категорий вручную. Нам нужно изменить порядок их появления в соответствии с требованиями: 17, 15, 16. Мы можем сделать это, создав новый массив, который будет содержать наши категории в нужном порядке:
$ordered_ids = array(17, 15, 16);
$ordered_categories = array();
foreach ($ordered_ids as $id) {
foreach ($categories as $category) {
if ($category->term_id == $id) {
$ordered_categories[] = $category;
break;
}
}
}
Теперь у нас есть массив $ordered_categories
, содержащий категории в нужном порядке.
Шаг 3: Вывод категорий
Теперь, когда мы отсортировали категории, мы можем вывести их с помощью цикла foreach
, чтобы использовать HTML-разметку, которая будет соответствовать нашим нуждам:
echo '<h3>' . __('By Content') . '</h3>';
echo '<ul>';
foreach ($ordered_categories as $category) {
echo '<li>' . esc_html($category->name) . '</li>'; // безопасный вывод имени категории
}
echo '</ul>';
Полный пример кода
Весь код будет выглядеть следующим образом:
<?php
$categories = get_categories('include=16,17,15');
$ordered_ids = array(17, 15, 16);
$ordered_categories = array();
foreach ($ordered_ids as $id) {
foreach ($categories as $category) {
if ($category->term_id == $id) {
$ordered_categories[] = $category;
break;
}
}
}
echo '<h3>' . __('By Content') . '</h3>';
echo '<ul>';
foreach ($ordered_categories as $category) {
echo '<li>' . esc_html($category->name) . '</li>';
}
echo '</ul>';
?>
Заключение
С помощью этого кода вы можете добиться желаемого результата: отображение категорий в нужном порядке, не полагаясь на стандартные функции сортировки WordPress. Это позволяет вам иметь полный контроль над выводом категорий. Такой подход не только эффективно решает проблему, но и сохраняет возможности WordPress для дальнейшей настройки и масштабирования.