Чтобы изменить структуру ссылок только для записей определенной категории в WordPress и настроить соответствующее перенаправление, вам потребуется использовать хуки (actions & filters) в вашей теме или создать небольшой плагин. Ниже приведены шаги для решения задачи.
### Часть 1: Изменение структуры ссылок
1. Откройте файл `functions.php` вашей активной темы или создайте плагин.
2. Добавьте следующий код, который изменит структуру ссылок для записей категории с ID=3 (или slug=`new-rubrik`, если вы предпочтете работать со слагом):
```php
function customize_permalink_for_category($post_link, $post, $leavename, $sample) {
// Проверяем, является ли это объектом WP_Post и опубликованной записью
if ($post instanceof WP_Post && $post->post_status == 'publish') {
// Получаем категории поста
$categories = get_the_category($post->ID);
// Проверяем, есть ли нужная категория
foreach ($categories as $category) {
if ($category->term_id == 3) { // Или if ($category->slug == 'new-rubrik') для проверки по слагу
// Вставляем '/blog' перед названием поста
return home_url( user_trailingslashit( "blog/$post->post_name" ) );
}
}
}
return $post_link;
}
add_filter('post_link', 'customize_permalink_for_category', 10, 4);
```
### Часть 2: Настройка перенаправления
После изменения структуры ссылок, вам нужно будет настроить перенаправления, чтобы URL старого формата автоматически переходили на новый. Это можно сделать с помощью плагина для редиректов, например, "Redirection" или через файл `.htaccess`.
Пример использования плагина Redirection:
1. Установите и активируйте плагин Redirection.
2. Перейдите в настройки плагина.
3. Добавьте новое перенаправление:
- Source URL: `^/(.+)$`
- Target URL: `/blog/$1`
- Regex: ✓ (отметьте как регулярное выражение)
- Group: выберите соответствующую группу (например, Redirections)
Это перенаправит запросы с `/что-угодно` на `/blog/что-угодно`.
Если вы предпочитаете работать с `.htaccess`, добавьте следующие правила:
```apache
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_URI} !^/blog/.*
RewriteCond %{REQUEST_URI} ^/(.+)$
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /blog/%1 [R=301,L]
```
Это правило проверяет запрос и, если он не начинается на `/blog/` и соответствует запросу к странице или записи, будет выполнено перенаправление на новый формат URL с добавлением префикса `/blog/`.
Обязательно проверьте работу перенаправлений в инкогнито-режиме или после очистки кеша, чтобы убедиться, что перенаправления работают корректно.