Добрый вечер, друзья-товарищи!
Готовил к публикации статью на другую тему, но столкнулся с тем, что описываемые изменения опять затрагивали файл в папке wp-includes. Напомню, что в статье Изменяем порядок рубрик без плагина мы уже редактировали файл из этой папки – /wp_includes/taxonomy.php. Тогда меня смутил этот момент и, вот, опять я пришел к этому. Поэтому, прежде, чем двигаться дальше – решил окончательно разобраться можно ли вносить изменения в файлы папки wp-includes?
Поиск дал однозначный ответ: Редактировать файлы в папке wp-includes НЕЛЬЗЯ!
В wp-includes расположены файлы ядра WordPress и при обновлении могут быть обновлены или удалены, в зависимости от изменений, в очередной версии WP.
Конечно, вы можете внести изменения в системные файлы (код же открытый), но тогда у вас есть два варианта:
1. Вы навсегда отказываетесь от каких-либо обновлений WordPress. Не очень хороший вариант, поскольку система постоянно развивается, усовершенствуется защита, устраняются ошибки из прошлых версий, расширяется функционал и т.п.
2. Вы фиксируете все изменения, внесенные вами в файлы ядра, и после обновления вновь повторяете эти правки. Тоже не хорошо. Если сразу не избавиться от этой вредной привычки – редактировать системные файлы, то изменений может накопиться очень много, и каждый раз повторять их – это дополнительное и не очень интересное занятие, которое может привести вас к первому варианту – отказу от обновлений. И потом, даже если вам будет не лень каждый раз вносить ваши изменения в ядро, то после очередного обновления может случиться так, что ваш код просто не впишется в новое ядро, в виду каких-то глобальных изменений.
Вывод – нужно бросать эту вредную привычку раз и навсегда!
Каким образом? Повышать свой уровень знаний WordPress. Система создана таким образом, что всегда можно найти вариант изменений без вмешательства в ядро.
Наиболее легкий вариант решить существующую задачу – найти плагин с нужным функционалом. А раз есть плагин, то тоже самое можно реализовать и без плагина.
Например, как в статье Исполняемый php код в записях WordPress, мне код плагина Inline Php помог реализовать функционал плагина без его установки и активации.
Теперь, раз уж решили отказаться от редактирования файлов ядра, то давайте вернемся к изменению порядка рубрик без плагина и исправим пункт 2, в котором вносились изменения в файл /wp-includes/taxonomy.php. А то и сам сделал неправильно и других научил плохому. =) (Некоторые читатели уже позаимствовали это решение. Ну, ничего – кто подписался на новые статьи блога или, хотя бы, на комментарии к той статье – узнают о правильном варианте).
Решение я опять подсмотрел в плагине (My Category Order).
Во втором пункте вместо внесения изменений в /wp-includes/taxonomy.php нужно добавить код в файл functions.php:
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); |
Функция get_terms_orderby передает поле для условия ORDER BY sql-запроса. А мы добавили дополнительный код к этой функции, в котором фигурирует наше поле для сортировки – sort.
В пунктах 1 и 3 остаётся все без изменений, и таким образом, мы реализовали пользовательскую сортировку категорий без использования плагина. Но, теперь наш код не боится обновлений WordPress. Сортировка будет работать для текущего шаблона, если захотите перенести в другой шаблон – нужно повторять пункты 2 и 3 для новой темы.
Таким образом, в большинстве случаев, можно уходить от внесения изменений в файлы папки wp-includes.
Надеюсь, вы последуете моему примеру и откажетесь от редактирования файлов ядра WordPress. Действительно – это очень нехорошая практика, особенно, когда делаешь не для себя, а выполняешь чей-то заказ. Ничего не подозревающий человек, выполнит обновление WordPress и потеряет что-то полезное, за что было заплачено, и может, даже, не догадаться о такой “бяке”. Вернется к старой версии, откажется от обновлений и другим будет передавать свой негативный опыт.
Успехов в изучении WordPress! Берегите себя и клиентов от стрессов! =)
а я бывала ковырялся там)