• Встала задача приведения категорий (рубрик) в «читаемый» вид (нужный мне в виде дерева). Сейчас категории и их подкатегории имеют совершенно разные ID (идентификаторы в таблицах БД WP) не имеющие последовательных значений, т.е. категории (они же рубрики) дополнялись хаотично, часть удалялась и т.д.

    Например, имеем категорию «Новости» с ID=1, В нее входят «Новости в России» (id=14) и «Новости в мире» (id=22).

    Новости
    — Новости в России
    — Новости в мире

    Нужно сделать (предполагается что в БД других категорий нет) сортировку:

    Новости
    — Новости в мире
    — Новости в России

    Либо (сортируем и заменяем ID последовательно, согласно сортировке)

      «Новости» с ID=1, «Новости в мире» (id=2), «Новости в России» (id=3)

    Либо (просто заменяем ID у двух последних, «меняя их местами»)

      «Новости» с ID=1, «Новости в России» (id=22) и «Новости в мире» (id=14)

    Из многих плагинов отобрал 2, понравились:

    1 https://wordpress.org/plugins/wp-term-order/
    позволяет прямо в рубриках перетаскивать категории

    2 https://wordpress.org/plugins/custom-taxonomy-order-ne/
    более «продвинутый», в отдельном меню позволяет изменить все это

    Оба сделаны хорошо (на мой взгляд). Их сортировка потом видна при выборе в постах и страницах, поиске. Но нужно не это.

    Еще раз: Требуется плагин аналогичный этим, который бы не только менял сортировку, но и ID в БД для категории (для отображения ID использую https://wordpress.org/plugins/reveal-ids-for-wp-admin-25/). Т.е. если меняем 2 категории местами — их ID в БД тоже меняются.

    Есть что-то подобное? Очень муторно через phpMyAdmin менять.

    Зачем: Сразу структуру сайта в виде рубрик-дерева сложновато сделать. Метки вообще решил не юзать. Использовать категории в нестандартных запросах к БД довольно сложно (для меня пока), хотелось бы привести их к полной древовидной структуре и потом юзать к примеру: if (Cat->ID =>10) and (Cat->ID <=20) …
    Т.е. для меня последовательные выборки проще, типа «если пост входит в основную рубрику или одну из ее подрубрик, то..» чем формирование запросов (что ессесено правильнее). Потому после внесения изменений в рубрики хочется их отсортировать по ID таким образом, чтобы «как бы структура заполнялась с нуля». Ясно, что некоторые ID рубрик могут быть удалены, но простое изменение ID между перетаскиваемыми рубриками мне бы очень помогло. Вот такая «хотелка».

    Спасибо.

Просмотр 11 ответов — с 1 по 11 (всего 11)
  • ID уникальны.
    и ни хрена вы их поменять не сможете.
    скажем, если у записи ID=2, то вы не можете присвоить ID=2 рубрике.

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

    спасибо за ответ.
    на то и ID, что уникальны. Но в phpMyAdmin ID легко меняются, если не совпадают с другими, потому смена ID между скажем двумя рубриками, «визуально» меняемых местами — возможна.

    Например запоминаем ID рубрик 1 и 2 (например 15 и 22), меняем его для рубрики 1 на «GetLastId+1» (например 1001), рубрике 2 присваиваем запомненный ID рубрики 1 (15), а рубрике 1 — запомненный для рубрики 2 (22). Итого получаем смену ID рубрик 1 и 2.

    я не изобретаю, я делаю как мне удобно (что путь не совсем верный, ясно).
    есть ли способ реализации или для WP рубрика->ID доступна только для чтения?

    он не просто «не совсем верный», он категорически неверный.

    не важно. спрашиваю про способ реализации. или Вам не интересно «все что неправильно»? 🙂

    именно.
    это сродни хакам в файлах движка — сделать то можно, но это будет в корне неправильно.

    Gu, что-то Вы прям совсем в дебри полезли…
    Установите ЛЮБОЙ плагин произвольных полей. Добавьте в рубрику (категорию) произвольное поле «порядок».
    Для главной рубрики используйте порядок тысяч(например). Для подрубрик сотни. Остаётся поле для 99 поддочерних рубрик.
    Пример
    Новости — 1000
    — Новости Европы — 1100
    — Новости Германии — 1101
    — Новости Франции — 1102
    — Новости Азии — 1200
    — Новости США — 1300
    — Новости постсоветов — 1400
    — Новости России — 1401
    — Новости Армении — 1402
    — Новости Украины — 1403

    Спорт — 2000
    — Баскетбол — 2100
    — Футбол — 2200
    — Спартак — 2201

    Ну и так далее. Соответственно все рубрики от 1000 до 1999 — Новости.
    От 2000 до 2999 — Спорт
    От 2200 до 2299 — Спорт, Футбол
    Всё статьи с рубрикой 2201 — Спорт, Футбол, ФК Спартак.
    Сортируйте до посинения 🙂
    На кой чёрт Вы лезете в святая святых любой БД — изменение ID?

    2visajack

    ему и плагины сортировки не нравятся, а вы хотите ему еще больший костыль дать.

    Модератор Sergey Biryukov

    (@sergeybiryukov)

    Live and Learn

    скажем, если у записи ID=2, то вы не можете присвоить ID=2 рубрике.

    ID записей, комментариев, рубрик и пользователей находятся в разных таблицах, поэтому вполне могут совпадать. Например, при установке движка создаются запись «Привет, мир», комментарий к ней, первая рубрика и учётная запись администратора. У всех этих сущностей будет ID 1.

    Итого получаем смену ID рубрик 1 и 2.

    И неверные значения term_id в таблице wp_term_taxonomy 🙂 Менять ID вручную действительно не стоит, это может нарушить целостность базы.

    а вы хотите ему еще больший костыль дать.

    Ну нравится человеку работать не с сортировкой, а с числовыми значениями 🙂
    А так всё по ТЗ 🙂
    Даже в админке можно отображать порядок и там же сортировать по этому полю. Даже древовидность можно создать. 🙂
    Кратно 1000 — «название рубрики»
    Иначе Кратно 100 — черточка «название рубрики»
    Иначе две черточки «название рубрики»
    Красота же. 🙂
    Да и условия отбора можно реализовать
    $poryadok = get_field (‘порядок’);
    if ($poryadok =>1000) and ($poryadok <= 1999) …
    Шик, блеск, красота.-

    Ну нравится человеку работать не с сортировкой, а с числовыми значениями 🙂
    А так всё по ТЗ 🙂

    да это называется не ценить свое время.
    если бы я все фичи своих и клиентских сайтов делал через хаки, то время разработки увеличилось бы в 2 раза.

    2 Sergey Biryukov

    >> неверные значения term_id в таблице wp_term_taxonomy
    ясно, что надо везде менять

    2 visajack

    Спасибо, Ваш вариант тоже подходит как решение.
    Вопрос закрыт

Просмотр 11 ответов — с 1 по 11 (всего 11)
  • Тема «Сортировка ID категорий (рубрик)» закрыта для новых ответов.