Перезапись ссылок в WordPress. Часть 2

Начало статьи здесь Перезапись ссылок в 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;  
    }  

Помните, что ни один из этих способов не сработает, пока вы не вытрите оригинальные правила для перезаписи. И вам придется это делать каждый раз при изменении этих функций.

VN:F [1.9.22_1171]
Rating: 0.0/5 (0 votes cast)

Об авторе ADv

Занимаюсь разработкой сайтов и магазинов на WordPress. Оказываю платные помощь и консультации. Skype: advokat_b
Scroll To Top