Изменяем структуру постоянных ссылок через 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://truewp.ru/2012/01/20/change-permalinks-in-functions-php.html

Смотрите также

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

  • Чащина13 апреля 2012 в 16:04 #

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

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

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

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

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

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

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

    • Миша28 ноября 2013 в 14:11 #

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

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

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

    • Миша28 ноября 2013 в 14:11 #

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

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

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

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

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

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

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

  • Андрей18 декабря 2015 в 10:12 #

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

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

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

    • Миша19 декабря 2015 в 10:12 #

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

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

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

phpjsHTMLCSSSQLПросто код
  Комментарии закрыты.