Как можно добавить префикс «page/» к обычным статическим страницам в WordPress?

Как можно добавить префикс "page/" к стандартным статическим страницам WordPress? Привожу пример: 

Текущие ссылки:
<pre><code>http://example.com/basket
http://example.com/contacts</code></pre>

Необходимо преобразовать их таким образом:
<pre><code>http://example.com/page/basket
http://example.com/page/contacts</code></pre>

Я уже написал следующий код:
<pre><code class="php">add_action( 'init', 'custom_page_rules' );
function custom_page_rules() {

  global $wp_rewrite;

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

  $wp_rewrite-&gt;page_structure = $wp_rewrite-&gt;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'
  );
}</code></pre>

Код работает хорошо при создании самой страницы, но в других частях администраторской панели отображаются некорректные ссылки. Как это исправить?
  • 30 октября 2024 г. 8:03
Ответы на вопрос 2
Чтобы добавить префикс «page/» к статическим страницам в WordPress без возникновения проблем с отображением ссылок в администраторской панели, нужно использовать механизм перезаписи URL, который WordPress предоставляет. Следующая инструкция поможет вам корректно настроить новый префикс.

1. **Добавьте правила перезаписи:** Добавьте свои собственные правила перезаписи, чтобы трансформировать URL-адреса. Можно использовать функцию `add_rewrite_rule`, чтобы сопоставить новый URL с существующими страницами.

2. **Обновите структуру перезаписи:** Не забудьте сбросить правила перезаписи после их добавления.

Вот более полный пример кода, который можно использовать в файле вашей темы `functions.php` или в отдельном плагине:

```php
add_action( 'init', 'custom_page_rewrites' );

function custom_page_rewrites() {
    add_rewrite_rule(
        '^page/([^/]+)/?$',
        'index.php?pagename=$matches[1]',
        'top'
    );
}

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

add_action( 'init', 'flush_rewrite_rules_on_plugin_activation' );

function flush_rewrite_rules_on_plugin_activation() {
    // Это нужно делать только при активации плагина
    flush_rewrite_rules();
}
```

### Описание кода:

- **add_rewrite_rule:** Эта функция создает новое правило перезаписи, которое будет обрабатывать URL, начинающиеся с "page/", и направляет их на стандартную обработку страниц WordPress.
  
- **post_type_link:** Этот фильтр позволяет изменить структуру ссылок на ваши страницы, добавляя перед ними префикс "page/".

- **flush_rewrite_rules_on_plugin_activation:** Вам нужно сбросить правила перезаписи, чтобы внесенные изменения вступили в силу. Это можно сделать при активации плагина. Если вы используете этот код в файле `functions.php`, вы можете добавить вызов `flush_rewrite_rules` вручную, но в этом случае имейте в виду, что частый вызов этой функции не рекомендуется, так как может замедлить ваше приложение.

### Важно:

1. После добавления этого кода необходимо перейти в настройки «Постоянные ссылки» в админке WordPress и просто нажать «Сохранить изменения», чтобы сбросить правила перезаписи без необходимости активации/деактивации плагина.

2. Убедитесь, что все ваши ссылки корректно работают, и проверьте, нет ли конфликтов с другими плагинами или пользовательскими правилами перезаписи.

Теперь, когда вы перейдете на страницы, они будут отображаться с префиксом "page/" в URL, и у вас не должно быть проблем с отображением ссылок в администраторской панели.
add_action('init', 'custom_prefit_for_pages');

function custom_prefit_for_pages() {
  global $wp_rewrite;
  $wp_rewrite->page_structure = $wp_rewrite->root . 'page/%pagename%'; 
}


И не забудьте сохранить постоянные ссылки в настройках.
Похожие вопросы