Поддержка Проблемы и решения wp_list_categories сходит с ума на одной категории

  • Здравствуйте,

    Столкнулся с такой проблемой. У меня на сайте разветвленная система категорий, и на каждой странице архива категории выводится drop-down с ее подкатегориями — чтобы можно было перейти в одну из них. Проблема в том, что во всех категориях это работает отлично, но в одной из четырех категорий второго уровня показываются не ее подкатегории, а подкатегории категории третьего уровня.

    То есть, схема такая: есть категория А, в ней категории Б1, Б2, Б3, Б4; в категории Б3 есть В1 и В2. Вместо того, чтобы в А получить список из Б1, Б2, Б3 и Б4, я получаю список из В1 и В2.

    Код получения подкатегорий такой такой:

    $category = get_category( get_query_var( 'cat' ) );
    $cat_id = $category->cat_ID; // текущая категория
    
    $list_cat = wp_list_categories ('title_li=&show_count=1&pad_counts=1&depth=1&echo=0&show_option_none=no&child_of=' . $cat_id);

    Проверял — ID текущей категории получаю правильный. Дерево категорий в админке корректное, все родительские категории указаны правильно.

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

    В общем, не понимаю, в чем источник проблемы. Ведь для десятков других категорий все нормально! Подскажите пожалуйста, что делать?

    Пример на живом сайте:
    http://waralbum.ru/catalog/ — список категорий. Если раскроете «Война» и затем «Тихий океан», то увидите, что в последней 22 подкатегории (кстати, это как раз пример что wp_list_categories без child_of показывает нормально).
    Но если перейти прямо в архив «Тихого океана» — http://waralbum.ru/category/war/pacific/ — то вверху в дроп-дауне «Подкатегории» будут только 2 категории — «Хиросима» и «Нагасаки», которые относятся к подкатегории «Атомные бомбардировки Японии», являющейся одной из 22 подкатегорий «Тихого океана».

    Для сравнения, категория того же уровня, что и «Тихий океан» — «Восточный фронт»:
    http://waralbum.ru/category/war/east/ — в дроп-дауне десятки подкатегорий, как и должно быть.

    Страница, с которой нужна помощь: [войдите, чтобы увидеть ссылку]

Просмотр 4 ответов — с 1 по 4 (всего 4)
  • Модератор Sergey Biryukov

    (@sergeybiryukov)

    Live and Learn

    Попробуйте добавить &hide_empty=0 в аргументы.

    Спасибо за ответ! К сожалению, добавление этого аргумента ничего не изменило.

    Добрый день!

    Любопытно. Логических объяснений навскидку нет. Есть шальное наблюдение из области нумерологии. ID категории «Тихий океан» = 91 и количество постов в его «сумасшедшей» подрубрике тоже 91. Очень хочется спросить, нет ли там мистических совпадений на этой почве 🙂

    А вообще, я бы начал тестить с depth=-1 и depth=0 в комбинации с hierarchical 1 и 0. Чтобы посмотреть, что там происходит. Крайне желательно проверять непосредственно результат функции (дампом), а не готовый вывод на сайте.

    Ещё хорошо бы взглянуть на вывод, где <select>…</select> формируется. Или вы wp_dropdown_categories() используете?

    Если не прояснилось, но проблема именно в результате функции, можно попробовать вызывать get_terms() c теми же параметрами (плюс &taxonomy=category) и сравнить полученный список.

    Потом искать какие-нибудь плагины или куски кода, которые могут переопределить add_filter(‘get_terms’, …). Ну и всякие редкие случайности: приведение типов, случайное переопределение переменной $list_cat чем-то другим, проблемная условная логика при выводе и т.п.

    Norske, большое спасибо, что подробно разобрались!
    Я все перепробовал — и разные depth, и get_terms, результат все равно косячный.
    Число постов в категории поменял, чтобы оно не совпадало с ID 🙂 — не помогло.
    Когда перешел к последнему абзацу советов, то нашел причину — старый плагин Category Order, которым делается ручная сортировка категорий. Отключил его — категории стали выводиться корректно. Заменил его на актуальный плагин «Category Order and Taxonomy Terms Order», ошибка не появилась, только сортировку надо настроить заново, конечно. Кто бы мог подумать, что баг в плагине проявится так избирательно.

    • Ответ изменён 3 недели, 4 дня назад пользователем kusachiy.
Просмотр 4 ответов — с 1 по 4 (всего 4)