Что такое slug пользователя и зачем его менять
В WordPress slug пользователя — это часть URL, которая обычно используется для профиля пользователя, например site.ru/author/username. По умолчанию slug формируется из логина пользователя, что может быть неудобно или небезопасно, особенно если логин совпадает с реальным именем или содержит личные данные.
Изменение slug пользователя помогает скрыть или кастомизировать URL профиля, улучшить SEO и повысить безопасность сайта, сделав URL менее предсказуемым для злоумышленников.
К сожалению, в стандартном функционале WordPress нет простой возможности изменить slug пользователя через админку, и многие идут путем установки плагинов. Но их можно избежать, реализовав собственный код, который корректно меняет slug и сохраняет совместимость с системой.
Как работает URL slug пользователя в WordPress
По умолчанию WordPress использует для URL профиля автора базовый префикс author и логин пользователя. Например, если логин пользователя ivan, URL будет site.ru/author/ivan. Этот URL генерируется системой rewrite rules и функцией get_author_posts_url().
Чтобы изменить slug пользователя, нужно изменить то, как формируется URL автора, и добавить новые правила перезаписи (rewrite rules), чтобы WordPress понимал новые URL.
Изменение slug пользователя: создание своей функции wphide_change_user_slug
Давайте напишем функцию, которая позволит менять slug пользователя на основе пользовательского мета-поля custom_slug. Если поле заполнено, то именно оно будет использоваться в URL.
function wphide_change_user_slug( $author_link, $author_id, $author_nicename ) {
$custom_slug = get_user_meta( $author_id, 'custom_slug', true );
if ( ! empty( $custom_slug ) ) {
$author_link = str_replace( $author_nicename, $custom_slug, $author_link );
}
return $author_link;
}
add_filter( 'author_link', 'wphide_change_user_slug', 10, 3 );Этот код заменяет никнейм пользователя в ссылке на значение из мета-поля custom_slug. Если поле не указано, ссылка не меняется.
Добавление правил перезаписи для новых slug пользователей
Чтобы WordPress корректно распознавал новые URL авторов с кастомными slug, нужно добавить правила перезаписи, которые будут искать пользователя по новому slug.
function wphide_add_rewrite_rules() {
add_rewrite_tag( '%custom_author%', '([^/]+)', 'custom_author=' );
add_rewrite_rule(
'^author/([^/]+)/?$',
'index.php?custom_author=$matches[1]',
'top'
);
}
add_action( 'init', 'wphide_add_rewrite_rules' );Правило перезаписи говорит системе, что при заходе на URL author/любой_слуг должна устанавливаться переменная запроса custom_author.
Преобразование custom_author в ID пользователя
Теперь нужно преобразовать значение custom_author (slug из URL) в ID пользователя, чтобы WordPress мог подгрузить нужного автора. Для этого используем фильтр запроса:
function wphide_parse_custom_author_query( $query ) {
if ( ! $query->is_main_query() ) {
return;
}
$custom_author = $query->get( 'custom_author' );
if ( $custom_author ) {
// Поиск пользователя с заданным custom_slug
$user_query = new WP_User_Query( array(
'meta_key' => 'custom_slug',
'meta_value' => $custom_author,
'number' => 1
) );
$users = $user_query->get_results();
if ( ! empty( $users ) ) {
$user = $users[0];
$query->set( 'author', $user->ID );
$query->set( 'custom_author', '' );
$query->is_author = true;
} else {
// Если пользователь с таким slug не найден, 404
$query->set_404();
}
}
}
add_action( 'pre_get_posts', 'wphide_parse_custom_author_query' );Этот код перехватывает запрос, проверяет наличие параметра custom_author и заменяет его на ID пользователя с соответствующим мета-значением. Если пользователь не найден — отдаёт 404.
Как добавить и изменить custom_slug для пользователя
Чтобы работать с новым slug, его нужно сохранить в мета-поле пользователя. Для этого можно использовать стандартную страницу редактирования профиля в админке, добавив туда поле:
function wphide_show_custom_slug_field( $user ) {
?>
<h3>Настройка кастомного slug</h3>
<table class="form-table">
<tr>
<th><label for="custom_slug">Custom Slug</label></th>
<td><input type="text" name="custom_slug" id="custom_slug" value="<?php echo esc_attr( get_user_meta( $user->ID, 'custom_slug', true ) ); ?>" class="regular-text" /></td>
</tr>
</table>
<?php
}
add_action( 'show_user_profile', 'wphide_show_custom_slug_field' );
add_action( 'edit_user_profile', 'wphide_show_custom_slug_field' );
function wphide_save_custom_slug_field( $user_id ) {
if ( ! current_user_can( 'edit_user', $user_id ) ) {
return false;
}
if ( isset( $_POST['custom_slug'] ) ) {
update_user_meta( $user_id, 'custom_slug', sanitize_text_field( $_POST['custom_slug'] ) );
}
}
add_action( 'personal_options_update', 'wphide_save_custom_slug_field' );
add_action( 'edit_user_profile_update', 'wphide_save_custom_slug_field' );Теперь при редактировании пользователя можно указать любой slug, который будет использоваться в URL профиля.
Перегенерация правил и очистка кэша перезаписи
После добавления новых правил перезаписи нужно обновить их, зайдя в админку WordPress в раздел Настройки > Постоянные ссылки и нажав кнопку «Сохранить изменения» без изменений. Это обновит правила в базе и позволит новым URL работать корректно.
Проверка и рекомендации по безопасности
При изменении slug пользователей важно убедиться, что новые значения не конфликтуют с системными URL и не содержат опасных символов. Рекомендуется валидировать slug и ограничивать набор допустимых символов, например, разрешать только буквы, цифры и дефисы.
Также стоит убедиться, что пользователь с определённым slug действительно существует, чтобы не создавать 404 ошибки для посетителей.
Краткий итог и преимущества метода
Мы реализовали механизм изменения slug пользователя в WordPress без установки плагинов, используя только функции и хуки ядра. Такой подход снижает нагрузку на сайт, уменьшает риски безопасности и даёт полный контроль над URL.
Можно легко интегрировать этот код в собственную тему или плагин и адаптировать под разные задачи, например, динамическое формирование slug или массовое обновление.
Дополнительные инструменты для оптимизации и безопасности
Для удобства работы с пользователями и оптимизации сайта можно использовать плагины от WPShop, например, Clearfy Pro, который помогает оптимизировать работу WordPress и повысить безопасность, или WPRemark для управления комментариями и пользователями.
Эти инструменты дополнят нашу кастомную реализацию и сделают сайт более защищённым и удобным для администрирования.