Давно хотел удалить это назойливое слово “category” из ссылки в своем блоге, который держится на WordPress. Так как я ярый противник использования и загромождения блога плагинами, решил заняться поисками. И нашел интересный скрипт который удаляет это слово из вашей ссылки. Правда может возникнуть проблема, вы не сможете запретить в robots.txt поисковику индексировать страницы категорий, эти страницы могут про-дублироваться в поиске.  (как вы наверное знаете, дублирование страниц это не есть гуд в SEO).

В общем, кому не страшна мифическая кара поисковиков и кто хочет избавиться от “category” в урле используйте ниже приведенный скрипт. Добавляете его в functions.php вашей темы.


add_filter('user_trailingslashit', 'remcat_function');
function remcat_function($link) {
return str_replace("/category/", "/", $link);
}
add_action('init', 'remcat_flush_rules');
function remcat_flush_rules() {
global $wp_rewrite;
$wp_rewrite->flush_rules();
}
add_filter('generate_rewrite_rules', 'remcat_rewrite');
function remcat_rewrite($wp_rewrite) {
$new_rules = array('(.+)/page/(.+)/?' => 'index.php?category_name='.$wp_rewrite->preg_index(1).'&paged='.$wp_rewrite->preg_index(2));
$wp_rewrite->rules = $new_rules + $wp_rewrite->rules;
}

Ну вот и все, вставляете выше написанный код между <?php  … ?>  и избавитесь от “category” навсегда и не будете зависимы от какого либо плагина. Кстати заметил, многие плагины которые удаляют эту “фичу”  с категориями давно не обновлялись и не известно будут ли они работать в новых версиях WordPress. Пользуйтесь на здоровье.

На закуску вам видео ролик:

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

UPD:

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

Как удалить слово “category” из ссылки в WordPress без плагинов
2 оценок, Средняя оценка: 5 из 5

  1. Полезная информация. Но зачем так все усложнять? Механизм настройки ЧПУ в WP и так дает такую возможность. А сами категории можно всегда закрыть в robots.txt

    1. Извините про какой способ вы говорите? Как я знаю, без использования плагинов нельзя убрать это гадкое слово “/category/” из урла.

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

      Мне просто не нравиться когда я перехожу по ссылке в категорий и там урл вида: mindwork.su/category/wordpress/
      Согласитесь ссылка вида: mindwork.su/wordpress/ гораздо лучше смотрится.

      А насчет robots.txt вы правы, раньше хоть индексацию категории можно было запретить через robots.txt, но после выше описанных действий теперь этого сделать не получиться, но можно обойтись мета тегами. Так что это не сильна большая проблема.

  2. В настройках постоянных ссылок выбираете например такую конструкцию – /%post_id%.html или %postname%.html
    И адреса будут короткие..

    1. Вы наверное не правильно поняли пост. У меня структура ссылок:

      Произвольно: /%category%/%postname%

      Мне и нужно оставить эту конструкцию, так как урлам постов будут добавляться рубрики (категорий), НО при использовании такой конструкций в ссылке категории блога добавляете слово “category” и выше написанный скрипт позволяет от него избавиться. Скрипт никак не портит постоянные ссылки сайта, так как там этого слова нет, он только укорачивает ссылки ведущие в категории.

      P.S:Ваш способ никак не относиться к теме данного поста, он никак не убирает слово “category” из ссылки. Вы наверное меня не так поняли.

  3. Semm видимо не правильно понял. Слово category появляется в списке категорий. Хороший скрипт. У меня сейчас категории закрыты к индексации в robots.txt, но на будущее учту)

  4. Здравствуйте! Всегда для этой цели пользовался плагином WP No Category Base. Сегодня деактивировал плагин – в ссылках появилось “category”. Затем вставил Ваш код в functions.php – “category” исчезло, ссылки обрели прежний вид как с плагином, но переход по ссылкам не осуществляется, поисходит ошибка – Error 404. Вставляю в ссылку “category” – то же самое. Только когда удаляю код и активирую плагин все становится нормально. Подскажите, пожалуйста, почему так происходит и как это исправить? Очень уж хотелось бы избавиться от одного плагина.

    1. Добрый день Олег, возможно ваша проблема связанна с версией WordPress. Попробуйте обновить версию движка до актуальной. Если у вас стоит обновленная версия вордпресса, Попробуйте деактировать все плагины и посмотрите будут ли работать ссылки без “/category/”. К сожалению больше ничего не приходит в голову. На двух сайтах, все стало правильно и “/catergory/” были убраны и ссылки работают.

  5. Я понял почему не работает. У меня изначально постоянные ссылки настроены “Произвольно –
    %postname%.html . Это связано с тем, что год назад я переносил свой сайт на html страничках на Вордпресс и для сохранения старых URL, я сделал %postname%.html а не /%category%/%postname%.html. Сейчас отключил плагин WP No Category Base, поставил постоянные ссылки в таком виде –
    /%category%/%postname%.html, вставил Ваш код в functions.php и все заработало. Но все URL моих записей стали включать в себя название рубрики – mysite.ru/rubrika/stranica.html, а у меня все записи в таком виде – mysite.ru/stranica.html.
    mindwork, а можно ли подправить код, чтобы он работал и при настройке постоянных ссылок в таком виде – /%postname%.html ? Пожалуйста, если это не трудно и возможно.

    1. Код который я привел в статье не мой, я его нашел в одном зарубежном сайте. Я тут по гуглил вроде как нашел решение для вас, но оно не универсальное, в смысле нужно изменять файлы движка, а не темы, как вы понимаете после обновления версии движка могут слететь изменения. В общем вот решение:

      Открываете /wp-include/taxonomy.php находите там строчку:

      $termlink = $wp_rewrite->get_extra_permastruct($taxonomy);

      и заменяете её на:

      $termlink = preg_replace("/category\//","",$wp_rewrite->get_extra_permastruct($taxonomy));

      по идее должно помочь, заранее сделайте резервную копию файла.

  6. Не получается, все также – сслыки рубрик не работают. Извините, за беспокойство)), жаль Ваш труд, да и я размечтался плагин убрать. Спасибо.))

    1. Да не за что, жаль что, не получилось, но вы не унывайте, если найду подходящее для вас решение, обязательно оповещу вас. :)

  7. Спасибо, работает без проблем. WP 3.2.1

    В постоянные ссылки добавил: /%category%/%postname%

  8. А вообще для работы достаточно этого кода:

    add_filter(‘user_trailingslashit’, ‘remcat_function’);
    function remcat_function($link) {
    return str_replace(“/category/”, “/”, $link);
    }

    Не знаю зачем остальное.

  9. Спасибо Шухрат. Первый вариант отлично работает. А то начало 404 вылазить – при ссылке на название рубрики из поста, выдаёт нормально, а дальше при переходе по страницам были неправильные адреса. А пока не заметил удивило наличие битых ссылок :-)

  10. Вроде все работает, уже поздно, завтра проверю основательно, только в скрипте прописывайте название категорий, у меня например “portfolio”, а постоянная ссылка выглядит вот так: /%portfolio%/%postname%. Автору – спасибо, сайт – в закладки. Да, кстати не один плагин у меня эти категории не убирал, перепробовала – 4, так что спасибо вдвойне

  11. Спасибо автору, способ рабочий, перед тем как попасть из поиска на эту страницу, перелопатил кучу сайтов, нечего из предложенного не работало, а это способ сработал, ещё раз спасибо!

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *