wpnotes.ru wordpress WP Notes

Как изменить URL для авторских избранных записей в WordPress

В 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 на новый, если запись является избранной.

×

AI-плагин от WPShop.ru

анализирует конкурентов

пишет статьи

готовит SEO

генерирует изображения

и еще кое-что...
WPGPT
Плагин, который наполняет ваш сайт WordPress
Узнать больше