Вопрос или проблема
Я пытаюсь добавить префикс 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 или на специализированные форумы, где можете получить советы от сообщества.