wp_list_categories установить порядок вручную?

Вопрос или проблема

Можно ли это сделать? В кодексе опция ‘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 для дальнейшей настройки и масштабирования.

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

Капча загружается...