Изменяем порядок рубрик без плагина

WordPress Изменяем порядок рубрик без плагина

В данной статье я хочу рассказать читателям моего блога о том, как можно изменить порядок рубрик (категорий) в WordPress без использования вспомогательных плагинов.

Названия рубрик в WordPress, по-умолчанию, отображаются в алфавитном порядке. И если, вдруг, вам захочется изменить порядок следования рубрик, то, к своему удивлению, вы обнаружите, что WordPress не предоставляет такой возможности.

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

Зачем для такого элементарного вопроса использовать плагин? Ваш блог итак будет заряжен плагинами по полной. А работать с названиями рубрик и их порядком вам часто не придется. Заведете вначале создания блога несколько рубрик, разместите их в желаемом порядке. Позже, возможно, добавите еще несколько категорий. Еще, может быть, переименуете одну или несколько рубрик. Захотите изменить порядок. Вот и все, что придется делать с ними.

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


Приступим.

1. В таблицу wp_terms добавляем поле sort int(2)

В базе данных вашего сайта есть таблица wp_terms. В этой таблице как раз и хранится информация о рубриках (категориях) WordPress. В эту таблицу нам нужно добавить поле sort, в котором будет храниться порядковый номер рубрики при отображении.

Для работы с базой данных нам понадобится программа phpMyAdmin. Помните, что phpMyAdmin был установлен вместе с набором разработчика Denwer и расположен по адресу http://localhost/tools/phpmyadmin/. Если же ваш сайт уже вылит на хостинг, то там тоже должен быть установлен phpMyAdmin и зайти в эту программу вы можете через панель управления хостинга.

Итак, заходим в phpMyAdmin, кликаем слева по таблице wp_terms; вверху переходим на закладку “Структура”; внизу кликаем по кнопке “ОК” (там где “Добавить 1 поле”)

Добавление поля в таблицу wp_terms для изменения порядка рубрик в WordPress

 

Далее указываем имя нового столбца, я назвал его sort и длину значения 2, думаю, вполне достаточно. Сохраняем.

Добавление столбца sort в таблицу wp_terms для хранения порядкового номера рубрики

 

Переходим на закладку “Обзор”. Здесь отредактируйте рубрики через “Изменить”. Для каждой рубрики задайте значение нового поля sort. Можно ввести 1, 2, 3 и т.д. А можно 10, 20, 30, как я сделал, чтоб в случае добавления новой рубрики, можно было расположить её между другими, присвоив промежуточный порядковый номер, типа 15 или 25.

редактирования значений для нового поля sort

 

Если с первым шагом справились, то переходим ко второму.

 

Данный вариант пункта 2 рабочий, но неправильный. Почему читайте здесь. Далее в статье представлена правильная версия.

2. Вносим изменения в файл wp_includes\taxonomy.php

Открываем файл wp_includes\taxonomy.php в текстовом редакторе. Находим с помощью Ctrl+F в нем функцию get_terms, и в эту функцию нам нужно добавить обработку сортировки для нового поля sort (ниже в коде отмечен добавленный код: строки 11, 12).

Сохраняем изменения в файле.

 

Правильный вариант пункта 2.

2. Вносим изменения в файл functions.php

В файл functions.php вашей темы WordPress добавьте код:

Сохраните изменения в файле.

 

3. Вносим изменения при вызове wp_list_categories

Теперь осталось найти код, где происходит вызов функции wp_list_categories, с помощью которой и отображаются рубрики. И внести туда последние изменения. В зависимости, от вашего шаблона, категории могут отображаться в хедере или сайдбаре. Т.е. искать нужно в header.php или sidebar.php. Можно в Total Commander через Alt+F7 поискать во всех файлах вашей темы \wp-content\themes\ваш_шаблон.

Так вот в параметрах вызова функции wp_list_categories нужно orderby=name заменить на orderby=sort.
Было:

Стало:

Сохраняйте изменения и проверяйте. Теперь рубрики должны отображаться в заданном вами порядке. Никакие обновления и плагины не должны повлиять на сделанные нами изменения. Разве что, какой-то плагин захочет сделать удаление из таблицы wp_terms, причем именно удалить поле sort. Думаю, это маловероятно.
Хотя, нет – если при обновлении WordPress файл wp_includes\taxonomy.php будет полностью перезаписываться, тогда наша сортировка перестанет работать. Тогда нужно будет повторно выполнить пункт 2 данной статьи. Полагаю – это не проблема. Некоторые плагины тоже могут перестать работать после обновления WordPress.

Теперь мы, наконец-то, узнали как в WordPress изменить порядок рубрик без плагина. Если возникли вопросы – не стесняйтесь ;)

До новых встреч!

P.S.  09-02-2014 внес изменения в статью. Добавлен правильный вариант пункта 2, в котором не затрагиваются файлы ядра. Теперь данная реализация сортировки рубрик без плагина не боится обновлений WordPress!

Понравилась статья? Не забудьте поделиться с друзьями и коллегами:

Вы можете пропустить чтение записи и оставить комментарий. Размещение ссылок запрещено.

39 комментариев к записи “Изменяем порядок рубрик без плагина”

  1. Xstroy

    Способ интересен, однако, первое же обновление сменит изменённые файлы…, а не обновляться сейчас чревато проблемами.

    • Алексей Ершов

      По поводу обновлений нюансов еще не знаю. Но, полагаю, поле из таблицы обновление не удалит; также файлы шаблона обновление WordPress не должно затронуть. Только, если вы обновляете шаблон, но этим, наверняка, мало кто занимается, поскольку куча своих изменений в шаблоне дороже того, что предлагает обновление. Единственное сомнение вызывает файл wp_includes\taxonomy.php. Не факт, что при каждом обновлении он будет изменяться. В идеале, обновление должно не перезаписывать полностью файл, а дополнять его, по типу как работают системы контроля версий SVN и подобные. Конечно, в WordPress навряд ли такое реализовано. Вообщем, посмотрю что произойдет после первого моего апдейта и дополню статью. Плагины ведь тоже могут вылетать.
      Ваш блог я вчера немного почитал. Мне понравилось – оригинально и талантливо. Язык изложения красивый. Видно, что не студент пишет. Теперь еще запомнится тем, что вы оставили первый комментарий в моём блоге. Пусть и ответный, но визитеров с поисковиков долго ждать. Пока все проиндексируется…
      Вообщем, спасибо и успехов!

  2. Xstroy

    Спасибо за добрые слова.
    Блог моя отдушина. Единственный сайт нигде не участвующий и не имеющий никаких обязательств ни перед кем…
    По поводу обновления ваша логика верна :)
    Просто уже приходилось разок наступать на такие грабли и вспоминать, что правилось уже не хочется, но на строительном блоге попробую применить (очень уж напрягает расположение категорий предложенное WP)
    Удачи в становлении!
    Каждый год всё повторяется и новые люди пишут о том же, что и мы с правкой на время…

    • Алексей Ершов

      Спасибо! И вам удачи в достижении ваших целей!
      Я понимаю, что Америки не открою, но написание статей полезно, в первую очередь для себя. Вот вы ж говорите, что блог ваша отдушина. Вы пишите – вам хорошо, и это прекрасно! И обязательно найдутся те, кому эти статьи тоже будут полезны и тогда вы еще больше порадуетесь тому, что вы автор этого блога.
      А касательно изменения порядка рубрик, то решения без плагина я не нашел в интернете. Все поголовно пишут о плагине.
      Касательно других статей, то конечно я буду во многом повторять, то что тысячу раз уже описано. Никуда от этого не денешься. Уникальные темы постоянно раскрывать – сложно. Да и есть фундаментальные вопросы, которые обязательно должны присутствовать на блоге о WordPress.

  3. Елена

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

    Категории

    Меняю name на sort, но с рубриками ничего не происходит. Проблема в последней строчке?

    • Алексей Ершов

      Елена, можете привести пример кода в сайдбаре? Код в сообщении лучше заключить в теги pre для того, чтобы все символы пропустило.

  4. Дмитрий

    Алексей спасибо за статью !

    Нашел в ней недостающее звено.
    Создал столбец, изменил параметр не работает.
    У вас нашел про taxonomy.php

    И всё заработало.
    Спасибо

    • Алексей Ершов

      Пожалуйста, Дмитрий, заходите в гости почаще! =)
      Только не совсем понял насчет недостающего звена. Вы где-то читали нечто подобное и там была представлена не вся информация? Т.е. недостающее звено в другой подобной статье?
      Дело в том, что моя статья авторская и это решение я нигде не подсматривал, а придумал самостоятельно.

  5. Дмитрий

    Нет не читал просто я занимаюсь созданием сайтов и мне знакома работа с базами данных.

    Сейчас делаю очередной сайт на WordPress для жены , она попросила порядок вывода рубрик поменять
    я решил не выводить рубрики средствами WordPress, а сделать просто меню в нужном порядке и если потом понадобится ручками добавить,
    но решил всё таки попробовать создать свой пункт в таблице и отсортировать по нему, так что ход наших с вами мыслей совпал .
    Но не работало пока я не прочитал у вас про изменения в файле taxonomy.php

    Вот так всё и было

    • Алексей Ершов

      Ясно. Рад, что статья оказалось полезной. Спасибо за отзыв.
      Успехов в делах!

      • Дмитрий

        Спасибо!

  6. Алексей Ершов

    Изменил пункт 2. Теперь данный метод не затрагивает файлов ядра, а значит – не боится обновлений WordPress. Всем, кто использовал описанный метод, рекомендую внести, добавленные в статье, изменения.

  7. Татьяна

    Добрый день, Алексей!
    Очень полезная статья и уникальная! В интернете не нашла ничего подобного, все предлагают только один вариант – через плагин.

    У меня возник вопрос. Первые два пункта я выполнила, а вот с 3-м проблемка. У меня ни в сайдбаре ни в хедере нет wp_list_categories.
    Подскажите, пжлс., может знаете где искать решение?

    • Алексей Ершов

      Здравствуйте, Татьяна!
      Спасибо за отзыв!
      Возможно, в вашем шаблоне для вывода категорий используется пользовательская функция. Называться она может как угодно. С помощью инспектирования кода элемента определите блок, в который выводятся рубрики. Например, у меня категории выводятся в блок

      Потом найдите в файлах шаблона этот блок и там уже смотрите какая функция используется для вывода категорий. А код этой функции (если понадобится), скорей всего, будет находиться в файле functions.php

      • Татьяна

        Спасибо! Буду пробовать.

  8. Дмитрий

    Классно! всё работает! Спасибо

  9. Роман

    Здравствуйте.
    До 3-го пункта все сделал, а на нем споткнулся. Дело в том, что у меня функции wp_list_categories не так прописана, и orderby=name там вообще нет. У меня так:

    Как в таком случае быть?

    • Алексей Ершов

      Здравствуйте, Роман.
      Код в комментариях нужно в теги pre заключать.
      Делаю себе заметку: добавить эту информацию где-то перед окном для комментария.

      Насколько я понял из отрывка кода, то вам нужно добавить в массив $args параметр orderby со значением ‘sort’.
      Т.е.

      При этом, оставьте в массиве все остальные параметры, которые там уже были: title_li, echo и т.д.

      • Роман

        Ура, заработало! Спасибо, Алексей!
        Большого трафика вашему сайту! Размещу ссылку на эту статью, в одном закрытом сообществе, где я создал тему, спрашивая, как изменить порядок рубрик без плагина.

        • Алексей Ершов

          Спасибо, Роман! Взаимно – успехов!

  10. Игорь

    Искал как поменять порядок вывода рубрик в админке, при добавлении нового материала. В процессе поисков наткнулся на ваш блог, полезная информация, спасибо.
    Может подскажете, как подобным образом можно поменять формат вывода рубрик в самой админке, те рубрики которые присваиваются посту при его создании на странице wp-admin/post-new.php
    Конкретнее, нужно сделать выпадающее меню для подрубрик. Если на сайте много рубрик, а кроме этого еще и в некоторых рубриках много подрубрик, то выбор категории-подкатегории для материала становится утомительным.

    • Алексей Ершов

      К сожалению, по Вашему вопросу ничего подсказать не могу, не доводилось такое делать.

  11. Елена

    Спасибо за статью) Но дошла до п “2. Вносим изменения в файл wp_includes\taxonomy.php” и — вбивая в редакторе ctrl +F получаю 12 (!) штук get_terms. А КУДА мне ставить добавочную функцию: else if ( ‘sort’ == $_orderby )
    $orderby = ‘t.sort';

    В КАКУЮ из 12 строчек? http://prntscr.com/7gtyuz

    P.S. В вордпресс совсем новичок. Буду благодарна за помощь) Отложу пока это дело….

    • Алексей Ершов

      Елена, Вы хотите реализовать вариант который затрется первым же обновлением? Я ж ниже описал правильный вариант пункта 2.

  12. Елена

    У меня после всех моих незаконченных манипуляций одна рубрика на сайте перестала визуально просматриваться. т.е. – в админке она ЕСТЬ, на сайте – нет. Подскажите пож, КАК вернуть всё, как было? Предварительно делала бэкап. перезалила сайт после потери рубрики – не лечится..

    • Алексей Ершов

      Раз Вы все перезалили, т.е. вернули к первоначальному варианту, то дело не в этих незаконченных манипуляциях. Нужно разбираться индивидуально.

  13. Елена

    Спасибо за ответ) Я разобралась. Всё работает нормально. И — ещё раз благодарю за хороший сайт, я для себя здесь массу полезного нашла) Растите и развивайтесь!

  14. Камол

    Здравствуйте Алексей. Третий пункт у меня немного по другому записан (Шаблон:glaciercar, файл:sidebar.php) если с таким встречались подскажите пожалуйста как мне решить в таком случай, вот он:

    Категории

  15. Игорь

    Здравствуйте, а как можно разместить статьи в категории не по дате публикации, а по алфавитному порядку?

  16. Альфира

    Здравствуйте! До 3-го пункта сделала. Но дело в том, что у меня функция wp_list_categories не так прописала, и orderby=name там вообще нет. А у меня так:

    
        '')); ?>
    
    
    Куда мне вставить sort?
    
    А после этого что в рубриках появится новая возможность по сортировке рубрик? Надо будет их номера перечислить что ли из таблицы phpMyAdmin?
    или как это происходит не совсем понятно мне как "чайнику".
  17. Александр

    Интересное решение, но для кого-то может показаться сложным!!
    Можно сделать просче: вывести в текстовом виджете ссылки на категории и менять как захочется. Да и как справедливо Вы молвили, часто всю перестановку делать не придётся.
    1 – рубрики: имена, ссылки – задаются в консоли как и прежде, но !! вот только придётся подправлять при случае ссылки виджета и всё!

    А все cat закрыты во всевозможных мета…

    Правда, SEOшники по кочкам понесут… с предположениями
    Это, пожалуй, минус варианта.

  18. Сергей

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

  19. maga

    Добрый день,
    Алексей у меня вообще такого файла нету wp_terms.
    Это понятно, что есть где эти функции лежат.
    Но мне это не по зубам. Есть вариант этот вопрос решить?
    Я из категории новичок из новичков -)))

    • Алексей Ершов

      Добрый день! Найдите и установите плагин с нужным функционалом. Их сейчас вагон и маленькая тележка. =)

      • Мага

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

  20. Paul

    Всё было замечательно до п.3(((, установлю лучше плагин…

  21. юлия

    Странно – у всех замечательно до пункта 3, а у меня всё замечательно в пунктах 1 и 3, а функция в functions.php не работает. Может быть, я не туда её поставила? Имеет значение, куда именно в functions.php нужно ставить Ваш кусок кода?

Оставить комментарий

Для размещения кода в комментарии используйте теги <pre> </pre>, например:


Подписаться, не комментируя