Как изменить ссылки только у записей определенной категории в WordPress?

Как настроить перенаправление URL для записей определенной рубрики (ID=3, slug= /new-rubrik) с сайта /%postname%/ на /blog/%postname%/ в WordPress? В настоящее время они перенаправляются сразу на /%postname%.
  • 29 января 2024 г. 11:38
Ответы на вопрос 2
Чтобы изменить структуру ссылок только для записей определенной категории в 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/`.

Обязательно проверьте работу перенаправлений в инкогнито-режиме или после очистки кеша, чтобы убедиться, что перенаправления работают корректно.
Можно использовать хук post_link : 
Похожие вопросы