В WordPress часто возникает задача изменить структуру URL для определённых типов записей или страниц, чтобы сделать ссылки более удобными, запоминающимися и SEO-дружественными. Одной из таких задач может быть изменение URL избранных (featured) записей конкретного автора — например, чтобы URL имел вид /author/username/favorites/post-name вместо стандартного /post-name. В этой статье мы подробно рассмотрим, как реализовать подобное изменение URL на практике с помощью фильтров и перезаписей правил (rewrite rules) WordPress.
Почему важно менять URL избранных записей автора
Стандартный URL записи в WordPress зависит от настроек постоянных ссылок и типа записи. Однако иногда необходимо выделить в отдельную структуру записи, которые автор отметил как избранные, например, для повышения удобства навигации или SEO.
Изменяя URL, вы можете:
- Сделать навигацию по сайту более интуитивной для пользователей;
- Выделить авторский контент в отдельный сегмент для продвижения;
- Упростить фильтрацию и обработку данных на стороне сервера;
- Улучшить структуру сайта для поисковых систем, задействовав ключевые слова в URL.
Реализация подобной задачи требует хорошего понимания механизма маршрутизации WordPress и работы с фильтрами.
Добавление пользовательского правила перезаписи URL
Первым шагом будет создание собственного правила перезаписи URL (rewrite rule), которое будет распознавать новый формат URL и направлять запрос на нужный обработчик.
Добавьте следующий код в файл functions.php вашей темы или в подключаемый плагин:
function wpnotes_rewrite_author_favorites_url() {
add_rewrite_rule(
'^author/([^/]+)/favorites/([^/]+)/?$', // Новый формат URL
'index.php?author_name=$matches[1]&pagename=favorites&name=$matches[2]', // Интерпретация запроса
'top'
);
}
add_action('init', 'wpnotes_rewrite_author_favorites_url');
function wpnotes_flush_rewrite_rules_on_activation() {
wpnotes_rewrite_author_favorites_url();
flush_rewrite_rules();
}
register_activation_hook(__FILE__, 'wpnotes_flush_rewrite_rules_on_activation');
Что здесь происходит:
add_rewrite_ruleдобавляет правило, которое ловит URL видаauthor/username/favorites/post-name;- Второй параметр указывает, как преобразовать URL в параметры запроса WordPress;
- Хук
initзапускает добавление правила при инициализации; - Функция
flush_rewrite_rules()вызывается один раз при активации плагина (или после добавления кода), чтобы обновить правила маршрутизации.
Обработка запроса и вывод избранных записей
Для правильной работы нужно создать шаблон или обработчик для страницы избранных записей автора. Если у вас уже есть страница с ярлыком (slug) favorites, то WordPress будет использовать её для отображения.
В шаблоне page-favorites.php можно запросить и вывести избранные записи текущего автора, например, так:
function wpnotes_get_author_favorites_query($author_name) {
// Получаем ID автора по логину
$author = get_user_by('login', $author_name);
if (!$author) {
return null;
}
// Предположим, что избранные записи отмечены мета-полем 'wpnotes_favorite' = 'yes'
$args = [
'author' => $author->ID,
'meta_key' => 'wpnotes_favorite',
'meta_value' => 'yes',
'post_type' => 'post',
'posts_per_page' => 10,
];
return new WP_Query($args);
}
// В теле шаблона
$author_name = get_query_var('author_name');
$query = wpnotes_get_author_favorites_query($author_name);
if ($query && $query->have_posts()) {
while ($query->have_posts()) {
$query->the_post();
echo '<h2>' . get_the_title() . '</h2>';
the_excerpt();
}
wp_reset_postdata();
} else {
echo '<p>Избранных записей автора не найдено.</p>';
}
Такой подход гибко позволяет показывать нужный контент.
Изменение ссылки на избранные записи в шаблонах
Чтобы ссылки на избранные записи генерировались сразу в новом формате, используйте фильтр post_link:
function wpnotes_custom_favorite_post_link($permalink, $post) {
// Проверяем, есть ли у записи мета 'wpnotes_favorite' = 'yes'
if (get_post_meta($post->ID, 'wpnotes_favorite', true) === 'yes') {
$author = get_userdata($post->post_author);
if ($author) {
$permalink = home_url('/author/' . $author->user_login . '/favorites/' . $post->post_name . '/');
}
}
return $permalink;
}
add_filter('post_link', 'wpnotes_custom_favorite_post_link', 10, 2);
Теперь ссылки на избранные записи автоматически будут вести на новую структуру URL.
Работа с плагинами для упрощения задачи
Если хочется упростить управление избранными записями, рекомендую обратить внимание на плагины с поддержкой пользовательских мета-полей и кастомных типов записей. Например, Clearfy Pro предлагает инструменты для оптимизации URL и управления мета-полями. Также можно использовать WPRemark для создания удобных интерфейсов редактирования избранных записей прямо из админки.
Особенности и подводные камни при изменении URL
При работе с rewrite rules важно помнить:
- После добавления новых правил всегда необходимо обновлять постоянные ссылки (flush_rewrite_rules), иначе изменения не вступят в силу.
- Убедитесь, что новые URL не конфликтуют с существующими страницами и типами записей.
- При изменении URL важно настроить редиректы со старых адресов для сохранения SEO-позиций (например, через .htaccess или плагин Redirection).
- Тестируйте работу на разных уровнях вложенности и с разными авторами, чтобы избежать ошибок 404.
Пример редиректа со старого URL на новый
function wpnotes_redirect_old_favorites_url() {
if (is_single()) {
$post_id = get_the_ID();
if (get_post_meta($post_id, 'wpnotes_favorite', true) === 'yes') {
$author = get_userdata(get_post_field('post_author', $post_id));
if ($author) {
$new_url = home_url('/author/' . $author->user_login . '/favorites/' . get_post_field('post_name', $post_id) . '/');
if (trailingslashit(get_permalink($post_id)) !== trailingslashit($new_url)) {
wp_redirect($new_url, 301);
exit;
}
}
}
}
}
add_action('template_redirect', 'wpnotes_redirect_old_favorites_url');
Этот код перенаправляет пользователей со старого URL на новый, если запись является избранной.