Как добавить префикс “page/” к стандартным статическим страницам WP?

Вопрос или проблема

Я пытаюсь добавить префикс page/ к стандартным статическим страницам WP.

Пример:
Преобразовать это:

http://example.com/basket
http://example.com/contacts

В это:

http://example.com/page/basket
http://example.com/page/contacts

Что я уже сделал:

add_action( 'init', 'custom_page_rules' );
function custom_page_rules() {

  global $wp_rewrite;

  $page_id = $_GET['post'] ?? '';

  $wp_rewrite->page_structure = $wp_rewrite->root . 'page/' . $page_id;
}

add_action( 'init', 'wpse33551_rewrites_init' );
function wpse33551_rewrites_init() {

  add_rewrite_rule(
    '^page/([0-9]+)$',
    'index.php?page_id=$matches[1]',
    'top'
  );
}

Это срабатывает при создании страницы:

Создание страницы

Но это не работает нигде больше:

Пустая, неправильная ссылка при наведение

Как я могу изменить код, чтобы это заработало?

Спасибо!

Ответ или решение

Для добавления префикса "page/" к стандартным статическим страницам в WordPress необходимо внести изменения в файл вашей темы, используя хуки и правила перезаписи (rewrite rules). Ваша задача заключается в том, чтобы изменить структуру URL страниц, сохранив при этом доступность контента. Рассмотрим подробную инструкцию по реализации этой задачи.

Шаг 1: Создание кастомных правил перезаписи

Вам необходимо создать собственные правила перезаписи URL с использованием хуков WordPress. Начнем с добавления кода в файл functions.php вашей активной темы.

add_action('init', 'custom_page_rewrite_rules');
function custom_page_rewrite_rules() {
    // Регистрируем правило перезаписи
    add_rewrite_rule(
        '^page/([^/]*)/?', // Новое правило для URL
        'index.php?pagename=$matches[1]', // Соответствующий параметр
        'top'
    );

    // Обновляем структуру страниц для генерации ссылок
    global $wp_rewrite;
    $wp_rewrite->add_rewrite_tag('%page%', '([^&]+)');
}

// Активация правил перезаписи при активации темы
add_action('after_switch_theme', 'flush_rewrite_rules');

Шаг 2: Изменение структуры ссылок

Теперь необходимо обновить структуру постоянных ссылок, чтобы WordPress генерировал ссылки с префиксом "page/". Для этого добавьте следующий код в файл functions.php:

add_filter('post_type_link', 'custom_page_link', 10, 2);
function custom_page_link($post_link, $id = 0) {
    $post = get_post($id);
    if ($post->post_type == 'page') {
        return str_replace(home_url('/'), home_url('/page/'), $post_link);
    }
    return $post_link;
}

Шаг 3: Переход к новым URL

После внесения изменений убедитесь, что вы зайдете в админку WordPress и обновите настройки постоянных ссылок (раздел "Настройки" → "Постоянные ссылки"). Это необходимо для того, чтобы новые правила перезаписи вступили в силу.

Шаг 4: Тестирование

После внесения всех изменений проверьте работоспособность новых URL. Откройте страницы, чтобы убедиться, что они правильно отображаются по новому адресу http://example.com/page/basket и http://example.com/page/contacts.

Заключение

Добавление префикса "page/" к стандартным статическим страницам требует корректного внесения кода и активизации новых правил на сайте WordPress. Такой подход не только улучшит структуру URL, но и повысит SEO-оптимизацию сайта за счет более логичной и понятной иерархии ссылок. Не забывайте регулярно проверять на наличие ошибок и обновлять постоянные ссылки при смене структуры URL.

При возникновении вопросов или необходимости дополнительной настройки, обращайтесь к документации WordPress или на специализированные форумы, где можете получить советы от сообщества.

Оцените материал
Добавить комментарий

Капча загружается...