Вопрос или проблема
Я изменил 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. Приведенный ниже код добавит необходимые правила перезаписи, позволяя корректно обрабатывать как основную категорию "Новости", так и её подкатегории.
- Добавьте следующий код в файл
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'
);
}
-
После добавления этого кода вам нужно очистить правила перезаписи. Для этого просто зайдите в админ-панель WordPress, перейдите в раздел "Настройки" → "Постоянные ссылки" и нажмите "Сохранить изменения". Это обновит правила перезаписи и применит ваши нововведения.
-
Убедитесь, что для ваших постоянных ссылок задана следующая структура:
/news/%category%/%postname%/
. Это позволит корректно отображать ссылки для категорий и подкатегорий внутри "Новости". -
Если вы хотите исключить страницы с фидом, вы можете использовать изменённое регулярное выражение (как в вашем примере). Тем не менее, постарайтесь убедиться, что это не повлияет на другие части вашего сайта.
Теперь у вас должно получиться правильно работающая структура URL для категории "Новости" и всех её подкатегорий. Проверьте, что ссылки формируются как ожидалось, и обратитесь к документации WordPress при необходимости для дальнейших настроек.