В стандартной установке WordPress URL адреса постов формируются на основе настроек постоянных ссылок (Permalinks). Однако бывают ситуации, когда нужно изменить URL адреса постов без использования стандартной системы пермалинков. Например, для интеграции с внешними системами, сохранения совместимости со старыми адресами или создания более удобных ссылок для пользователей.
Почему стандартные пермалинки могут не подходить
Стандартные пермалинки в WordPress хорошо подходят для большинства сайтов, но иногда возникают задачи, которые они не решают:
- Необходимость гибко управлять URL адресами постов без влияния на структуру сайта.
- Нужда в динамическом изменении ссылок в зависимости от условий (например, пользовательской роли или даты).
- Интеграция с внешними сервисами, которые требуют специфичных URL.
В таких случаях можно использовать собственные решения для управления URL адресами постов.
Использование фильтра post_link для изменения URL постов
В WordPress есть фильтр post_link, который позволяет изменять URL поста перед выводом. Именно он поможет нам изменить адреса без изменения настроек пермалинков.
Пример функции, которая изменяет URL поста, добавляя к нему префикс /custom/:
function wpdo_custom_post_link( $permalink, $post ) {
if ( $post->post_type == 'post' ) {
$permalink = home_url( '/custom/' . $post->ID );
}
return $permalink;
}
add_filter( 'post_link', 'wpdo_custom_post_link', 10, 2 );
В этом примере для всех стандартных постов URL будет выглядеть так: https://example.com/custom/123, где 123 — ID поста.
Обработка новых URL запросов
Чтобы такие URL работали, нужно научить WordPress правильно обрабатывать их запросы. Для этого добавим правило перезаписи (rewrite rule):
function wpdo_custom_rewrite_rules() {
add_rewrite_rule('^custom/([0-9]+)/?$', 'index.php?p=$matches[1]', 'top');
}
add_action( 'init', 'wpdo_custom_rewrite_rules' );
После добавления этого кода необходимо обновить правила перезаписи, перейдя в админке WordPress в меню Настройки > Постоянные ссылки и просто сохранить изменения без правок.
Пример расширения: добавление параметра для различных типов постов
Если на сайте несколько типов постов, и нужно менять URL по-разному, можно расширить функцию:
function wpdo_custom_post_link_full( $permalink, $post ) {
if ( $post->post_type == 'post' ) {
$permalink = home_url( '/custom-post/' . $post->post_name );
} elseif ( $post->post_type == 'product' ) {
$permalink = home_url( '/shop-item/' . $post->post_name );
}
return $permalink;
}
add_filter( 'post_link', 'wpdo_custom_post_link_full', 10, 2 );
function wpdo_custom_rewrite_rules_full() {
add_rewrite_rule('^custom-post/([^/]+)/?$', 'index.php?name=$matches[1]&post_type=post', 'top');
add_rewrite_rule('^shop-item/([^/]+)/?$', 'index.php?name=$matches[1]&post_type=product', 'top');
}
add_action( 'init', 'wpdo_custom_rewrite_rules_full' );
Обратите внимание, что для правильной работы этих правил важно, чтобы слаг (post_name) был уникальным.
Использование плагинов для управления URL без пермалинков
Если не хотите писать код вручную, можно воспользоваться специализированными плагинами. Например:
- Clearfy Pro — предлагает гибкие настройки URL и оптимизацию пермалинков.
- WPRemark — расширяет возможности работы с комментариями и URL.
Эти плагины могут помочь, если задачи по изменению URL сложнее и требуют дополнительных опций.
Как избежать ошибок и потери SEO при изменении URL
Важно помнить, что изменение URL может привести к потерям трафика, если старые адреса уже индексированы поисковиками или используются в ссылках. Чтобы избежать проблем:
- Настройте 301 редиректы со старых URL на новые — это можно сделать через файл
.htaccessили с помощью плагинов, например Clearfy Pro. - Проверьте корректность новых URL, чтобы не было дублирования или битых ссылок.
- Оповестите поисковые системы через Google Search Console о смене структуры URL.
Выводы и рекомендации
Изменение URL постов в WordPress без стандартных пермалинков возможно и часто необходимо для решения специфических задач. С помощью фильтра post_link и правил перезаписи можно гибко управлять ссылками, не меняя глобальных настроек сайта. Важно следить за корректностью обработки запросов и не забывать о SEO-аспектах.