Изменяем структуру постоянных ссылок через functions.php

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

Настройка постоянных ссылок в меню WordPress

Если всё это настраивается в админке, тогда зачем лезть в functions.php?

  • если нету доступа к админке
  • при создании плагина или темы
  • по какой-то вашей собственной причине

И сразу к делу — вот вам код, если не знаете, куда вставлять — прочитайте пожалуйста заголовок статьи 🙂

function my_permalink_function(){
	global $wp_rewrite;
	$wp_rewrite->set_permalink_structure('/%category%/%postname%.html');
	$wp_rewrite->flush_rules();
}
add_action('init', 'my_permalink_function');

Как это работает?

Итак, структура постоянных ссылок задается на 3-й строчке (в скобках и кавычках) при помощи структурных тегов.

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

Существуют и другие теги:

  • %year%
    год публикации (пример: 2012)
  • %monthnum%
    месяц (пример: 11)
  • %day%
    день (пример: 27)
  • %hour%
    час (пример: 14)
  • %minute%
    минута (пример: 59)
  • %second%
    секунда (пример: 11)
  • %post_id%
    id записи (пример: 505)
  • %postname%
    ярлык записи (пример: change-permalinks-in-functions-php)
  • %category%
    ярлык категории (пример: wordpress)
  • %author%
    ник автора (пример: admin)

Думаю имеет смысл рассмотреть один пример.

Запись в виде тегов:
/%year%/%monthnum%/%day%/%postname%.html

Как будет выглядеть ссылка:
https://misha.blog/2012/01/20/change-permalinks-in-functions-php.html

Миша

В последние годы я долго не знал, что мне делать с сайтом misha.blog, ведь он практически не приносит никакого профита, но недавно я осознал, что моя миссия – способствовать распространению WordPress. Ведь WordPress – это лучший движок для разработки сайтов – как для тех, кто готов использовать заложенную структуру этой CMS, так и для тех, кто предпочитает headless решения.

Сам же я впервые познакомился с WordPress в 2009 году. Организатор WordCamp. Преподаватель в школах Epic Skills и LoftSchool.

Если вам нужна помощь с вашим сайтом или может даже разработка с нуля на WordPress / WooCommerce — пишите. Я и моя команда сделаем вам всё на лучшем уровне.

Комментарии 16

  • Чащина 13 апреля 2012 #

    А какой functions.php? Их штуки 4 во всём проекте...

    • Миша 14 апреля 2012 #

      который находится в папке с темой)

  • Электронщик 18 сентября 2012 #

    А можно поменять путь к картинкам, используя подпапки для больших, маленьких картинок. А не все в перемешку, как в последнем вордпрессе?

  • Евгений 28 ноября 2013 #

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

    • Миша 28 ноября 2013 #

      как насчет плагина «html on pages»?

  • Евгений 28 ноября 2013 #

    он добавляет html только страница, причем всем, и родительским тоже. А я хочу чтобы у родительских был на конце слеш /, а у конечных .html, и то же самое, надо к тегам префикс.
    Пока нигде не встречал решения, на джумле есть решение

    • Миша 28 ноября 2013 #

      круто, если решения нет, то его можно написать самому и поделиться с миром 🙂

  • Евгений 28 ноября 2013 #

    очень круто, но я точно с таким не справлюсь!)) я просто верстальщик, частично разбирающийся в коде, но вот что-то придумать и сделать самому - пока не дорос до такого))

    • Миша 28 ноября 2013 #

      ну мы все с чего-то начинали)
      ок, возьму на заметку, как дойдут руки, напишу этот плагин.
      т.е. суть в том чтобы в конце всех урлов добавлялось .html, верно?

  • Евгений 28 ноября 2013 #

    в конце всех конечных страниц. То есть создаем страницу site.ru/stranica/ и у неё дочерняя site.ru/stranica/doch.html
    Ну или просто чтобы был выбор, ставить html или нет на определенной странице.
    А то сейчас с помощью "html on pages" было бы так:
    site.ru/stranica.html и site.ru/stranica/doch.html

  • Стас 14 января 2015 #

    Скажите а реально сделать в вордпресс так чтоб ссылки на категории имели такой вид www.сайт/тип поста/название таксономии/название категории

    • Миша 15 января 2015 #

      В принципе всё реально. Думаю да.

      • Стас 16 января 2015 #

        Реально:) нашел плагин он все это делает , Custom Post Type Permalinks

  • Стас 16 января 2015 #

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

  • Андрей 18 декабря 2015 #

    Миша, подскажите выход из ситуации.

    Если в Постоянных ссылках выбрать "Произвольно", и выставить шаблон без закрывающего слеша (к примеру %postname%.html), то закрывающие слеши убираются из всех URL (т.е. категории выглядят как /%category% , а произвольные типы постов как %post_type%/%postname%). Если задать шаблон со слешем, то и в других ссылках он присутствует.

    Как убрать слеши только для постов и страниц, оставив их в категориях и далее везде? Я понимаю, что рерайт работает и без слеша, мне это нужно исключительно с эстетической целью - привык, знаете ли, за многие годы, чтобы ЧПУ заканчивались либо слешем либо расширением.

    • Миша 19 декабря 2015 #

      Добрый день, Андрей,

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

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

Если вы хотите добавить код, не забудьте обернуть его в <pre lang="php"></pre>, в случае несоблюдения этого условия в 99% случаях ваш коммент будет удалён, а автор заблокирован. Печалька.