Изменение URL структуры (Permalink) в WordPress — одна из важных задач, которая помогает улучшить SEO, сделать ссылки более понятными и удобными для пользователей. По умолчанию WordPress предлагает несколько вариантов настройки постоянных ссылок, но часто возникает необходимость реализовать нестандартную, произвольную структуру URL для кастомных типов записей, таксономий или даже стандартных постов.
Почему стандартных настроек permalink недостаточно
В админке WordPress можно выбрать базовые варианты постоянных ссылок: по дате, по названию, с числовым ID и прочие. Однако эти шаблоны ограничены и не всегда подходят для сложных проектов, где нужно учитывать:
- Кастомные типы записей (Custom Post Types) с уникальной структурой URL.
- Вложенные таксономии и категории в URL.
- Динамическое добавление параметров в URL.
- Оптимизацию структуры для SEO с учетом ключевых слов.
Для решения этих задач придется использовать программирование с помощью хуков WordPress, фильтров и, при необходимости, специальных плагинов.
Создание произвольной структуры URL для кастомных типов записей
Рассмотрим пример, как задать уникальный URL для собственного типа записи wpdesk_product с префиксом /catalog/, чтобы ссылка выглядела так: site.ru/catalog/product-name/.
Для начала нужно зарегистрировать кастомный тип записи с нужным параметром rewrite:
function wpdesk_register_custom_post_type() {
$args = array(
'labels' => array(
'name' => 'Продукты',
'singular_name' => 'Продукт',
),
'public' => true,
'has_archive' => true,
'rewrite' => array('slug' => 'catalog'),
'supports' => array('title', 'editor', 'thumbnail'),
);
register_post_type('wpdesk_product', $args);
}
add_action('init', 'wpdesk_register_custom_post_type');После регистрации нужно сбросить правила перезаписи, чтобы новые URL заработали. Это можно сделать программно или вручную — например, перейдя в Настройки → Постоянные ссылки и сохранив их заново.
Добавление вложенной структуры с таксономиями в URL
Иногда нужно, чтобы URL включал не только кастомный тип записи, но и вложенную таксономию, например категории продукта. Например: site.ru/catalog/category-name/product-name/.
Для этого регистрируем таксономию с параметром hierarchical и настраиваем rewrite:
function wpdesk_register_custom_taxonomy() {
$args = array(
'labels' => array(
'name' => 'Категории продуктов',
'singular_name' => 'Категория продукта',
),
'hierarchical' => true,
'rewrite' => array('slug' => 'catalog', 'with_front' => false),
'public' => true,
);
register_taxonomy('wpdesk_product_cat', 'wpdesk_product', $args);
}
add_action('init', 'wpdesk_register_custom_taxonomy');Далее необходимо настроить фильтр post_type_link, чтобы WordPress правильно формировал ссылки с учетом категории:
function wpdesk_custom_post_type_link($post_link, $post) {
if ( 'wpdesk_product' === $post->post_type ) {
$terms = wp_get_post_terms($post->ID, 'wpdesk_product_cat');
if ($terms && !is_wp_error($terms)) {
$post_link = str_replace('%wpdesk_product_cat%', $terms[0]->slug, $post_link);
} else {
$post_link = str_replace('%wpdesk_product_cat%', 'uncategorized', $post_link);
}
}
return $post_link;
}
add_filter('post_type_link', 'wpdesk_custom_post_type_link', 10, 2);При регистрации типа записи нужно задать параметр rewrite с placeholder для категории:
'rewrite' => array('slug' => 'catalog/%wpdesk_product_cat%', 'with_front' => false),Таким образом, структура URL будет динамически менять категорию в ссылке.
Использование плагинов для управления URL
Если вы не хотите писать код, можно использовать плагины для гибкой настройки постоянных ссылок:
- Custom Post Type Permalinks — позволяет настраивать URL для кастомных типов записей и таксономий через интерфейс.
- Permalink Manager Lite — мощный инструмент для редактирования любых URL на сайте.
- WPRewrite (если доступен в репозитории) — облегчает работу с правилами перезаписи.
Например, с Custom Post Type Permalinks можно создать шаблоны URL без программирования.
Обработка нестандартных URL через хуки rewrite_rules
Для сложных случаев можно добавить свои правила перезаписи с помощью фильтра rewrite_rules_array. Например, чтобы добавить правило для URL /special/product-id/:
function wpdesk_add_rewrite_rules($rules) {
$new_rules = array(
'special/([0-9]+)/?$' => 'index.php?post_type=wpdesk_product&p=$matches[1]',
);
return $new_rules + $rules;
}
add_filter('rewrite_rules_array', 'wpdesk_add_rewrite_rules');После добавления правил не забудьте сбросить пермалинки.
Советы по SEO и производительности при изменении URL
Произвольные URL могут улучшить SEO, если они:
- Короткие и понятные.
- Включают ключевые слова.
- Обеспечивают иерархию и логику.
Однако слишком сложные правила могут замедлить работу сайта. Рекомендуется:
- Минимизировать количество кастомных правил.
- Использовать кэширование пермалинков.
- Проверять корректность 301 редиректов при смене структуры.
Пример функции для смены URL с сохранением старых ссылок
Чтобы избежать потери трафика, можно настроить редиректы со старых URL на новые. Пример кода с использованием template_redirect:
function wpdesk_redirect_old_urls() {
if (is_404()) {
$requested_url = $_SERVER['REQUEST_URI'];
// Логика определения старого URL и генерация нового
if (preg_match('#^/old-path/(.+)/?$#', $requested_url, $matches)) {
wp_redirect(site_url('/catalog/' . $matches[1]), 301);
exit;
}
}
}
add_action('template_redirect', 'wpdesk_redirect_old_urls');Так вы сохраните позиции в поисковой выдаче и не потеряете посетителей.
Заключение
Изменение URL структуры в WordPress — задача, требующая внимательности и понимания работы системы пермалинков. Простые случаи решаются настройками и регистрацией кастомных типов записей с правильными параметрами. Для сложных сценариев используйте хуки и фильтры, а при необходимости — проверенные плагины.
Для подробной информации и готовых решений можно изучить плагины WPShop, которые помогут автоматизировать и упростить работу с URL и не только.