
В данной статье я хочу рассказать читателям моего блога о том, как можно изменить порядок рубрик (категорий) в 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 поле”)
Далее указываем имя нового столбца, я назвал его sort и длину значения 2, думаю, вполне достаточно. Сохраняем.
Переходим на закладку “Обзор”. Здесь отредактируйте рубрики через “Изменить”. Для каждой рубрики задайте значение нового поля sort. Можно ввести 1, 2, 3 и т.д. А можно 10, 20, 30, как я сделал, чтоб в случае добавления новой рубрики, можно было расположить её между другими, присвоив промежуточный порядковый номер, типа 15 или 25.
Если с первым шагом справились, то переходим ко второму.
Данный вариант пункта 2 рабочий, но неправильный. Почему читайте здесь. Далее в статье представлена правильная версия.
2. Вносим изменения в файл wp_includes\taxonomy.php
Открываем файл wp_includes\taxonomy.php в текстовом редакторе. Находим с помощью Ctrl+F в нем функцию get_terms, и в эту функцию нам нужно добавить обработку сортировки для нового поля sort (ниже в коде отмечен добавленный код: строки 11, 12).
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
$_orderby = strtolower($orderby); if ( 'count' == $_orderby ) $orderby = 'tt.count'; else if ( 'name' == $_orderby ) $orderby = 't.name'; else if ( 'slug' == $_orderby ) $orderby = 't.slug'; else if ( 'term_group' == $_orderby ) $orderby = 't.term_group'; else if ( 'sort' == $_orderby ) $orderby = 't.sort'; else if ( 'none' == $_orderby ) $orderby = ''; elseif ( empty($_orderby) || 'id' == $_orderby ) $orderby = 't.term_id'; else $orderby = 't.name'; |
Сохраняем изменения в файле.
Правильный вариант пункта 2.
2. Вносим изменения в файл functions.php
В файл functions.php вашей темы WordPress добавьте код:
1 2 3 4 5 6 7 8 9 10 11 |
function my_category_order($orderby, $args) { if($args['orderby'] == 'sort') return 't.sort'; else return $orderby; } add_filter('get_terms_orderby', 'my_category_order', 10, 2); |
Сохраните изменения в файле.
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.
Было:
1 2 3 |
<?php wp_list_categories('depth=3&exclude=1&hide_empty=0&orderby=name&show_count=0&use_desc_for_title=1&title_li='); ?> |
Стало:
1 2 3 |
<?php wp_list_categories('depth=3&exclude=1&hide_empty=0&orderby=sort&show_count=0&use_desc_for_title=1&title_li='); ?> |
Сохраняйте изменения и проверяйте. Теперь рубрики должны отображаться в заданном вами порядке. Никакие обновления и плагины не должны повлиять на сделанные нами изменения. Разве что, какой-то плагин захочет сделать удаление из таблицы wp_terms, причем именно удалить поле sort. Думаю, это маловероятно.
Хотя, нет – если при обновлении WordPress файл wp_includes\taxonomy.php будет полностью перезаписываться, тогда наша сортировка перестанет работать. Тогда нужно будет повторно выполнить пункт 2 данной статьи. Полагаю – это не проблема. Некоторые плагины тоже могут перестать работать после обновления WordPress.
Теперь мы, наконец-то, узнали как в WordPress изменить порядок рубрик без плагина. Если возникли вопросы – не стесняйтесь
До новых встреч!
P.S. 09-02-2014 внес изменения в статью. Добавлен правильный вариант пункта 2, в котором не затрагиваются файлы ядра. Теперь данная реализация сортировки рубрик без плагина не боится обновлений WordPress!
Способ интересен, однако, первое же обновление сменит изменённые файлы…, а не обновляться сейчас чревато проблемами.
По поводу обновлений нюансов еще не знаю. Но, полагаю, поле из таблицы обновление не удалит; также файлы шаблона обновление WordPress не должно затронуть. Только, если вы обновляете шаблон, но этим, наверняка, мало кто занимается, поскольку куча своих изменений в шаблоне дороже того, что предлагает обновление. Единственное сомнение вызывает файл wp_includes\taxonomy.php. Не факт, что при каждом обновлении он будет изменяться. В идеале, обновление должно не перезаписывать полностью файл, а дополнять его, по типу как работают системы контроля версий SVN и подобные. Конечно, в WordPress навряд ли такое реализовано. Вообщем, посмотрю что произойдет после первого моего апдейта и дополню статью. Плагины ведь тоже могут вылетать.
Ваш блог я вчера немного почитал. Мне понравилось – оригинально и талантливо. Язык изложения красивый. Видно, что не студент пишет. Теперь еще запомнится тем, что вы оставили первый комментарий в моём блоге. Пусть и ответный, но визитеров с поисковиков долго ждать. Пока все проиндексируется…
Вообщем, спасибо и успехов!
Спасибо за добрые слова.
Блог моя отдушина. Единственный сайт нигде не участвующий и не имеющий никаких обязательств ни перед кем…
По поводу обновления ваша логика верна
Просто уже приходилось разок наступать на такие грабли и вспоминать, что правилось уже не хочется, но на строительном блоге попробую применить (очень уж напрягает расположение категорий предложенное WP)
Удачи в становлении!
Каждый год всё повторяется и новые люди пишут о том же, что и мы с правкой на время…
Спасибо! И вам удачи в достижении ваших целей!
Я понимаю, что Америки не открою, но написание статей полезно, в первую очередь для себя. Вот вы ж говорите, что блог ваша отдушина. Вы пишите – вам хорошо, и это прекрасно! И обязательно найдутся те, кому эти статьи тоже будут полезны и тогда вы еще больше порадуетесь тому, что вы автор этого блога.
А касательно изменения порядка рубрик, то решения без плагина я не нашел в интернете. Все поголовно пишут о плагине.
Касательно других статей, то конечно я буду во многом повторять, то что тысячу раз уже описано. Никуда от этого не денешься. Уникальные темы постоянно раскрывать – сложно. Да и есть фундаментальные вопросы, которые обязательно должны присутствовать на блоге о WordPress.
Долго грузится сайт, сделайте что-то.
Первые два пункта удалось пройти без проволочек, а вот с третьим не совсем сложилось.
У меня строчка в сайдбаре выглядит несколько иначе:
Категории
Меняю name на sort, но с рубриками ничего не происходит. Проблема в последней строчке?
Елена, можете привести пример кода в сайдбаре? Код в сообщении лучше заключить в теги pre для того, чтобы все символы пропустило.
Алексей спасибо за статью !
Нашел в ней недостающее звено.
Создал столбец, изменил параметр не работает.
У вас нашел про taxonomy.php
И всё заработало.
Спасибо
Пожалуйста, Дмитрий, заходите в гости почаще! =)
Только не совсем понял насчет недостающего звена. Вы где-то читали нечто подобное и там была представлена не вся информация? Т.е. недостающее звено в другой подобной статье?
Дело в том, что моя статья авторская и это решение я нигде не подсматривал, а придумал самостоятельно.
Нет не читал просто я занимаюсь созданием сайтов и мне знакома работа с базами данных.
Сейчас делаю очередной сайт на WordPress для жены , она попросила порядок вывода рубрик поменять
я решил не выводить рубрики средствами WordPress, а сделать просто меню в нужном порядке и если потом понадобится ручками добавить,
но решил всё таки попробовать создать свой пункт в таблице и отсортировать по нему, так что ход наших с вами мыслей совпал .
Но не работало пока я не прочитал у вас про изменения в файле taxonomy.php
Вот так всё и было
Ясно. Рад, что статья оказалось полезной. Спасибо за отзыв.
Успехов в делах!
Спасибо!
Изменил пункт 2. Теперь данный метод не затрагивает файлов ядра, а значит – не боится обновлений WordPress. Всем, кто использовал описанный метод, рекомендую внести, добавленные в статье, изменения.
Добрый день, Алексей!
Очень полезная статья и уникальная! В интернете не нашла ничего подобного, все предлагают только один вариант – через плагин.
У меня возник вопрос. Первые два пункта я выполнила, а вот с 3-м проблемка. У меня ни в сайдбаре ни в хедере нет wp_list_categories.
Подскажите, пжлс., может знаете где искать решение?
Здравствуйте, Татьяна!
Спасибо за отзыв!
Возможно, в вашем шаблоне для вывода категорий используется пользовательская функция. Называться она может как угодно. С помощью инспектирования кода элемента определите блок, в который выводятся рубрики. Например, у меня категории выводятся в блок
Потом найдите в файлах шаблона этот блок и там уже смотрите какая функция используется для вывода категорий. А код этой функции (если понадобится), скорей всего, будет находиться в файле functions.php
Спасибо! Буду пробовать.
Классно! всё работает! Спасибо
Здравствуйте.
До 3-го пункта все сделал, а на нем споткнулся. Дело в том, что у меня функции wp_list_categories не так прописана, и orderby=name там вообще нет. У меня так:
Как в таком случае быть?
Здравствуйте, Роман.
Код в комментариях нужно в теги pre заключать.
Делаю себе заметку: добавить эту информацию где-то перед окном для комментария.
Насколько я понял из отрывка кода, то вам нужно добавить в массив $args параметр orderby со значением ‘sort’.
Т.е.
При этом, оставьте в массиве все остальные параметры, которые там уже были: title_li, echo и т.д.
Ура, заработало! Спасибо, Алексей!
Большого трафика вашему сайту! Размещу ссылку на эту статью, в одном закрытом сообществе, где я создал тему, спрашивая, как изменить порядок рубрик без плагина.
Спасибо, Роман! Взаимно – успехов!
Искал как поменять порядок вывода рубрик в админке, при добавлении нового материала. В процессе поисков наткнулся на ваш блог, полезная информация, спасибо.
Может подскажете, как подобным образом можно поменять формат вывода рубрик в самой админке, те рубрики которые присваиваются посту при его создании на странице wp-admin/post-new.php
Конкретнее, нужно сделать выпадающее меню для подрубрик. Если на сайте много рубрик, а кроме этого еще и в некоторых рубриках много подрубрик, то выбор категории-подкатегории для материала становится утомительным.
К сожалению, по Вашему вопросу ничего подсказать не могу, не доводилось такое делать.
Спасибо за статью) Но дошла до п “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.
У меня после всех моих незаконченных манипуляций одна рубрика на сайте перестала визуально просматриваться. т.е. – в админке она ЕСТЬ, на сайте – нет. Подскажите пож, КАК вернуть всё, как было? Предварительно делала бэкап. перезалила сайт после потери рубрики – не лечится..
Раз Вы все перезалили, т.е. вернули к первоначальному варианту, то дело не в этих незаконченных манипуляциях. Нужно разбираться индивидуально.
Спасибо за ответ) Я разобралась. Всё работает нормально. И — ещё раз благодарю за хороший сайт, я для себя здесь массу полезного нашла) Растите и развивайтесь!
Здравствуйте Алексей. Третий пункт у меня немного по другому записан (Шаблон:glaciercar, файл:sidebar.php) если с таким встречались подскажите пожалуйста как мне решить в таком случай, вот он:
Категории
Здравствуйте, а как можно разместить статьи в категории не по дате публикации, а по алфавитному порядку?
Здравствуйте!
Хороший вопрос! Я подумаю как это сделать и напишу статью по этому поводу.
Игорь, вот ответ на Ваш вопрос: http://wordpress-life.ru/vyivod-statey-kategoriy-v-alfavitnom-poryadke.html
Здравствуйте! До 3-го пункта сделала. Но дело в том, что у меня функция wp_list_categories не так прописала, и orderby=name там вообще нет. А у меня так:
Интересное решение, но для кого-то может показаться сложным!!
Можно сделать просче: вывести в текстовом виджете ссылки на категории и менять как захочется. Да и как справедливо Вы молвили, часто всю перестановку делать не придётся.
1 – рубрики: имена, ссылки – задаются в консоли как и прежде, но !! вот только придётся подправлять при случае ссылки виджета и всё!
А все cat закрыты во всевозможных мета…
Правда, SEOшники по кочкам понесут… с предположениями
Это, пожалуй, минус варианта.
Добрый день.
А как сделать чтобы эти поля сортировки можно было менять через админку?
Добрый день,
Алексей у меня вообще такого файла нету wp_terms.
Это понятно, что есть где эти функции лежат.
Но мне это не по зубам. Есть вариант этот вопрос решить?
Я из категории новичок из новичков -)))
Добрый день! Найдите и установите плагин с нужным функционалом. Их сейчас вагон и маленькая тележка. =)
Так на моём сайте и так плагин стоит…а я хотел именно твоим способом…здесь учишься, ну разные трюки с кодом…да и плагинов меньше.
Всё было замечательно до п.3(((, установлю лучше плагин…
Странно – у всех замечательно до пункта 3, а у меня всё замечательно в пунктах 1 и 3, а функция в functions.php не работает. Может быть, я не туда её поставила? Имеет значение, куда именно в functions.php нужно ставить Ваш кусок кода?
всё сделал как показано, теперь сайт выдает Error establishing a database connection
Спасибо за отличное решение! Менюшки я вписываю в сам код темы, а вот для карты сайта применил сие. Теперь полный порядок, сортировка согласно логике, а не по алфавиту.