В стандартной установке WordPress URL страниц авторов выглядят как site.ru/author/username. Иногда возникает необходимость изменить эту часть URL — например, заменить author на что-то более подходящее под тематику сайта, улучшить SEO или сделать адрес более понятным для посетителей. В этой статье мы разберем, как изменить URL авторских страниц без использования плагинов, используя только возможности WordPress и минимальный PHP-код.
Почему стоит менять URL авторов в WordPress
Стандартный префикс author для страниц авторов может не всегда удовлетворять требованиям сайта. Вот основные причины изменить его:
- SEO: Более релевантный или короткий префикс может помочь в продвижении.
- Уникальность: Для сайтов с несколькими авторами или специфической тематикой хочется сделать URL более уникальным.
- Безопасность: Маскировка стандартных путей иногда помогает снизить риск автоматических атак.
- Удобство для пользователей: Простой и понятный URL легче запомнить и поделиться.
Все эти причины делают задачу изменения URL авторских страниц актуальной и полезной для многих.
Как работает маршрутизация страниц авторов в WordPress
Прежде чем мы начнем менять URL, важно понять, как WordPress обрабатывает URL авторов. По умолчанию WordPress использует так называемые rewrite rules (правила переадресации) для преобразования URL в запросы к базе данных.
Префикс author встроен в правила, которые определяют, что за страницей стоит информация об авторе. Чтобы изменить этот префикс, нужно:
- Зарегистрировать новое rewrite правило с нужным префиксом.
- Обработать генерацию ссылок, чтобы WordPress создавал ссылки с новым префиксом.
- Обновить правила перезаписи URL.
Все это можно сделать с помощью хуков и фильтров WordPress.
Изменение префикса author через фильтр author_rewrite_rules
Первым делом нам нужно заменить стандартные правила author на свои с новым префиксом. Допустим, мы хотим использовать profile вместо author.
Добавим функцию в файл functions.php вашей темы или в отдельный плагин:
function wptests_change_author_rewrite_rules() {
global $wp_rewrite;
$new_author_base = 'profile';
$wp_rewrite->author_base = $new_author_base;
$wp_rewrite->flush_rules();
}
add_action('init', 'wptests_change_author_rewrite_rules');Эта функция задает новый базовый префикс для author и сбрасывает правила перезаписи, чтобы изменения вступили в силу.
Важно: сброс правил перезаписи (flush_rules()) не рекомендуется вызывать на каждом запросе, поэтому лучше временно добавить эту функцию, зайти в админку, затем удалить этот вызов или добавить проверку, чтобы сброс был однократным.
Правильный способ сброса правил
Чтобы сбросить правила один раз, можно использовать опцию:
function wptests_change_author_base_once() {
global $wp_rewrite;
$wp_rewrite->author_base = 'profile';
$wp_rewrite->flush_rules();
remove_action('init', 'wptests_change_author_base_once');
}
add_action('init', 'wptests_change_author_base_once');После первого запуска эта функция удалит саму себя.
Изменение генерации ссылок авторов с помощью фильтра author_link
Даже если мы изменили правила, нужно убедиться, что все функции, генерирующие ссылки на авторов, используют новый префикс.
Для этого воспользуемся фильтром author_link:
function wptests_filter_author_link($link, $author_id, $author_nicename) {
$new_base = 'profile';
$link = home_url(user_trailingslashit($new_base . '/' . $author_nicename));
return $link;
}
add_filter('author_link', 'wptests_filter_author_link', 10, 3);<Этот код заменит все ссылки вида /author/username на /profile/username.
Проверка работы и рекомендации
После добавления кода:
- Перейдите в админку WordPress → Настройки → Постоянные ссылки и нажмите «Сохранить изменения», чтобы обновить правила перезаписи.
- Проверьте, что ссылки авторов ведут на новые адреса.
- Обязательно проверьте работоспособность страниц авторов и отсутствие 404 ошибок.
Если у вас включены кэш-плагины, очистите кэш.
Дополнительные советы: использование пользовательских префиксов с разными языками
Если ваш сайт мультиязычный, можно динамически менять префикс авторов в зависимости от текущего языка. Для этого достаточно расширить код, например:
function wptests_dynamic_author_base() {
if (function_exists('pll_current_language')) { // для Polylang
$lang = pll_current_language();
if ($lang === 'ru') {
return 'profil';
} elseif ($lang === 'en') {
return 'profile';
}
}
return 'profile';
}
function wptests_change_author_base_dynamic() {
global $wp_rewrite;
$wp_rewrite->author_base = wptests_dynamic_author_base();
$wp_rewrite->flush_rules();
}
add_action('init', 'wptests_change_author_base_dynamic');
function wptests_filter_author_link_dynamic($link, $author_id, $author_nicename) {
$base = wptests_dynamic_author_base();
$link = home_url(user_trailingslashit($base . '/' . $author_nicename));
return $link;
}
add_filter('author_link', 'wptests_filter_author_link_dynamic', 10, 3);Так вы сможете гибко управлять ссылками авторов под разные языки.
Что делать, если URL авторов нужно полностью кастомизировать
Иногда требуется более радикальная переделка URL авторов — например, добавить дополнительный сегмент, использовать ID автора, или формировать URL по-другому. В этом случае можно создать свои rewrite правила прямо через add_rewrite_rule():
function wptests_custom_author_rewrite() {
add_rewrite_rule('^profile/([a-z0-9_-]+)/?$', 'index.php?author_name=$matches[1]', 'top');
}
add_action('init', 'wptests_custom_author_rewrite');Этот код создаст правило, которое поймает URL /profile/username и обработает как страницу автора.
Важно после добавления таких правил обновлять постоянные ссылки через админку.
Итоговые рекомендации для разработчиков
- Избегайте частого вызова
flush_rewrite_rules()в продакшене — это дорогостоящая операция. - Тестируйте изменения на локальном или staging-сервере.
- Учитывайте возможные конфликты с плагинами, которые тоже могут менять правила перезаписи.
- Если не уверены, лучше сделайте небольшой плагин для этой задачи, чтобы не потерять изменения при смене темы.
Следуя этим рекомендациям, вы сможете без проблем изменить URL страниц авторов на вашем сайте WordPress, сделав их более удобными и подходящими под задачи проекта.