ilovewordpress
  • 0
Новичок

Пользовательские постоянные ссылки

  • 0

У нас есть нестандартный тип music .

/music/
/music/post-name/

Кроме того, у нас есть тегоподобная таксономия genres . Его URL-адреса:

/music-genres/genre-name/

Я пытаюсь сделать такие URL-адреса:

/music/
/music/post-name/
/music/genres/
/music/genres/genre-name/

/music-genres/ следует заменить на /music/genres/ .

Наконец, мы должны получить структуру URL, например:

/post-type/taxonomy/term/
/post-type/postname/

Как мне это сделать?

Share
  1. Да, это возможно, потому что ваша genres структура /music/genres/[genre-name] . Если бы это было /music/[genre-name] так, это было бы сложно, потому что это конфликтовало бы с /music/[post-name] .

    Просто нужно помнить о порядке. Правила перезаписи должны быть упорядочены от наиболее конкретных к наименее конкретным. Если вы сначала зарегистрируете тип записи, а затем таксономию, правила типа записи будут первыми. Проблема в том, что правила для типов сообщений содержат очень общее правило для сопоставления вложений, а это противоречит нашим терминам таксономии. Но это сработает, если вы сначала зарегистрируете таксономию, а затем тип записи.

    Сбивает с толку то, что обычно вы передаете типы сообщений, которые будут использовать регистрируемую вами таксономию, но вы можете просто передать пустой массив и установить соединение позже.

    add_action( 'init', 'wpse13608_init' );
    function wpse13608_init()
    {
        register_taxonomy(
            'music-genre',
            array(),
            array(
                'rewrite' => array(
                    'slug' => 'music/genre'
                ),
            )
        );
        register_post_type( 'music' );
        register_taxonomy_for_object_type( 'music-genre', 'music' );
    }
    

    Вы можете убедиться в этом и поиграть со своими правилами с помощью моего плагина Rewrite Analyzer.

    • 0
  2. WordPress не поддерживает перегрузку структур постоянных ссылок в нужной вам степени. Вы можете написать свой собственный фильтр предварительной записи, чтобы преобразовать нужные URL-адреса в URL-адреса, которые может распознать WP_Rewrite, а затем написать фильтры для преобразования ссылок, сгенерированных WordPress, в ваш собственный стиль.

    Чтобы понять это, изучите WP_Rewrite::generate_rewrite_rules и WP::parse_request, которые принято считать «вуду».

    • 0

Оставить ответ

You must login to add an answer.