Начало статьи здесь Перезапись ссылок в WordPress. Часть 1
Настраиваем постоянные ссылки
Очень много информации отдается классом $wp_rewrite. Там описываются свойства, такие как $wp_rewrite->category_base или $wp_rewrite->author_base для извлечения стандартной структуры ссылок для этих страниц. Но наряду с извлечением стандартных настроек ВП, мы также можем создавать свои собственные правила.
Перестраиваем постоянные ссылки для авторов
Когда вы настраиваете структуру постоянных ссылок, у вас есть возможность переопределить префиксы для рубрик и тегов. Однако, для страниц авторов такой возможности не предусмотрено.
Но мы можем использовать функцию the add_rewrite_rule() из Кодекса WordPress для интеграции некоторых новых настроек. В нашем случае мы заменили /author/ на /writer/, но вы можете использовать все, что вам угодно. В дополнение к этому, мы скопировали некоторые другие редиректы для страницы авторов и лент RSS. Вы можете добавить этот кусок кода в файл functions.php темы:
add_action( 'init', 'add_author_rules' );
function add_author_rules() {
add_rewrite_rule(
"writer/([^/]+)/?",
"index.php?author_name=$matches[1]",
"top");
add_rewrite_rule(
"writer/([^/]+)/page/?([0-9]{1,})/?",
"index.php?author_name=$matches[1]&paged=$matches[2]",
"top");
add_rewrite_rule(
"writer/([^/]+)/(feed|rdf|rss|rss2|atom)/?",
"index.php?author_name=$matches[1]&feed=$matches[2]",
"top");
add_rewrite_rule(
"writer/([^/]+)/feed/(feed|rdf|rss|rss2|atom)/?",
"index.php?author_name=$matches[1]&feed=$matches[2]",
"top");
}
Доступ к этой функции можно получить даже без использования переменной $wp_rewrite. Некоторые разработчики предпочитают именно этот способ, так как он проще, нежели хард-кодинг со свойствами классов.
Постоянные ссылки для авторов с помощью generate_rewrite_rules
Для этого способа нам снова понадобится глобальный класс $wp_rewrite. Мы создали новую переменную с именем $new_rules, которая содержит ассоциативный массив данных. Пример кода ниже просто перезаписывает правила для авторов.
function generate_author_rewrite_rules() {
global $wp_rewrite;
$new_rules = array(
"writer/([^/]+)/?" => "index.php?author_name=".$wp_rewrite->preg_index(1)
);
$wp_rewrite->rules = $new_rules + $wp_rewrite->rules;
}
А что если мы захотим использовать множество страниц и лент feeds, мы улучшим наш массив. Обновленный код ниже, снова таки вставляем в файл functions.php темы:
function generate_author_rewrite_rules() {
global $wp_rewrite;
$new_rules = array(
"writer/([^/]+)/?" => "index.php?author_name=".$wp_rewrite->preg_index(1),
"writer/([^/]+)/page/?([0-9]{1,})/?" => "index.php?author_name=".$wp_rewrite->preg_index(1)."&paged=".$wp_rewrite->preg_index(2),
"writer/([^/]+)/(feed|rdf|rss|rss2|atom)/?" => "index.php?author_name=".$wp_rewrite->preg_index(1)."&feed=".$wp_rewrite->preg_index(2),
"writer/([^/]+)/feed/(feed|rdf|rss|rss2|atom)/?" => "index.php?author_name=".$wp_rewrite->preg_index(1)."&feed=".$wp_rewrite->preg_index(2)
);
$wp_rewrite->rules = $new_rules + $wp_rewrite->rules;
}
Помните, что ни один из этих способов не сработает, пока вы не вытрите оригинальные правила для перезаписи. И вам придется это делать каждый раз при изменении этих функций.
