Добавить префикс URL к постоянным ссылкам категории Новости и подкатегорий постов только.

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

Я изменил http://domain.com/%postname%/ на http://domain.com/news/%postname%/, используя ответ, предоставленный здесь: Добавить префикс URL к постоянным ссылкам только одной категории постов. Но у меня возникли проблемы с категориями внутри NEWS. Как я могу сделать так, чтобы это работало для подкатегорий?

add_action( 'init', 'wpa_category_base' );
function wpa_category_base() {
    // Не забудьте один раз вручную обновить правила после добавления этого кода!
    add_rewrite_rule(
        // Регулярное выражение для сопоставления входящего URL
        'news/([^/]+)/([^/]+)/([^/]+)(/[0-9]+)?/?$',
        // Результирующий внутренний URL
        'index.php?category_name=$matches[1]/$matches[2]&name=$matches[3]&paged=$matches[4]',

        // Добавить правило в верхнюю часть списка переписывания
        'top' );
}

Пользовательская структура постоянной ссылки: /media/%category%/%postname%/ Основа категории: .

Сработало для меня, WordPress 3.4.1, без каких-либо связанных плагинов.

Попробуйте

add_action( 'init', 'wpa_category_base' );
function wp_category_base() {
// Не забудьте один раз вручную обновить правила после добавления этого кода!
    add_rewrite_rule(
    // Регулярное выражение для сопоставления входящего URL
    'news/([^/]+)/([^/]+)/([^/][^f][^e][^e][^d]+)(/[0-9]+)?/?$', // здесь мои изменения, чтобы исключить 'feed'
    // Результирующий внутренний URL
    'index.php?category_name=$matches[1]/$matches[2]&name=$matches[3]&paged=$matches[4]',
    // Добавить правило в верхнюю часть списка переписывания
    'top' );
}

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

Для добавления префикса к постоянным ссылкам постов только категории "Новости" и её подкатегорий, вам потребуется изменить настройки перезаписи URL в WordPress. Приведенный ниже код добавит необходимые правила перезаписи, позволяя корректно обрабатывать как основную категорию "Новости", так и её подкатегории.

  1. Добавьте следующий код в файл functions.php вашей темы:
add_action( 'init', 'wpa_category_base' );

function wpa_category_base() {
    // Не забудьте очистить правила перезаписи после добавления этого кода!
    add_rewrite_rule(
        // Регулярное выражение для сопоставления входящего URL
        'news/([^/]+)/([^/]+)/([^/]+)/?$', 
        // Результирующий внутренний URL
        'index.php?category_name=$matches[1]/$matches[2]&name=$matches[3]',
        // Добавляем правило в верхнюю часть списка перезаписи
        'top' 
    );

    // Также необходимо добавить правило для постов, находящихся на одном уровне с подкатегориями
    add_rewrite_rule(
        'news/([^/]+)/([^/]+)/?$', 
        'index.php?category_name=$matches[1]&name=$matches[2]',
        'top'
    );

    // Правило для категории "Новости" (без подкатегорий)
    add_rewrite_rule(
        'news/([^/]+)/?$', 
        'index.php?category_name=$matches[1]',
        'top'
    );
}
  1. После добавления этого кода вам нужно очистить правила перезаписи. Для этого просто зайдите в админ-панель WordPress, перейдите в раздел "Настройки" → "Постоянные ссылки" и нажмите "Сохранить изменения". Это обновит правила перезаписи и применит ваши нововведения.

  2. Убедитесь, что для ваших постоянных ссылок задана следующая структура: /news/%category%/%postname%/. Это позволит корректно отображать ссылки для категорий и подкатегорий внутри "Новости".

  3. Если вы хотите исключить страницы с фидом, вы можете использовать изменённое регулярное выражение (как в вашем примере). Тем не менее, постарайтесь убедиться, что это не повлияет на другие части вашего сайта.

Теперь у вас должно получиться правильно работающая структура URL для категории "Новости" и всех её подкатегорий. Проверьте, что ссылки формируются как ожидалось, и обратитесь к документации WordPress при необходимости для дальнейших настроек.

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

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