Como modificar estruturas de URL em tipos de postagem personalizados e taxonomias ou termos

4

Estou ciente de que há várias postagens sobre o tema da personalização da estrutura de URL do link permanente de tipos de postagem personalizados , taxonomias personalizadas , e termos de taxonomia . No entanto, nenhum deles é bem claro, não funciona corretamente ou causa problemas em outros lugares.

Aqui estão alguns links, que já "meio que" abrangem reescrita de URLs .

  1. Como para criar uma estrutura de permalink com taxonomias personalizadas e tipos de post personalizado como nome-base / imposto-pai / imposto-filho / custom-post-type-name
  2. Tipos de postagem personalizados, taxonomias e permalinks
  3. A mistura de estruturas de reescrita de tipo de postagem e taxonomia personalizadas?

Estou procurando criar uma estrutura de URL permalink nos seguintes termos:

  • Nome do tipo de postagem: carros
  • Nome da taxonomia: revendedores
  • Nome do termo: honda
  • Título: 123 Rod Hot Rod

Exemplo de configuração da estrutura de URL ideal do permalink:

Estrutura genérica do permalink:

domain.com/post-type-name/taxonomy-name/term-name/post-title/

Estrutura de permalink mais específica:

domain.com/cars/dealers/honda/123-hot-rod-lane/

  • /cars/ precisa ser acessível como uma lista de arquivos de cada postagem feita no tipo de postagem.
  • /cars/dealers/ precisa ser acessível como uma listagem de arquivo morto de cada post feito na taxonomia.
  • /cars/dealers/honda/ precisa ser acessível como uma listagem de arquivo de cada postagem feita nesse termo de taxonomia.
  • /cars/dealers/honda/123-hot-rod-lane/ precisa ser acessível como um visão singular da postagem feita no tipo de postagem personalizada de carros.

Só para deixar claro, ninguém faz nenhum trabalho desnecessário enquanto responde a essa pergunta. Eu não preciso de nada além de apenas adicionar as regras de reescrita corretas para o meu tipo de postagem, taxonomia e termos. Estas questões estão diretamente relacionadas à regravação de URLs permalink e NÃO em relação à listagem de postagens ou arquivos. Eu só preciso ter certeza de que o WordPress os reconheça corretamente, enquanto estiver usando chamadas condicionais como is_post_type_archive() ou is_tax() ou is_singular() , etc.

Eu tentei inúmeras vezes, a partir de inúmeras perguntas / respostas neste site. Nada parece funcionar.

Aqui está o meu tipo de postagem personalizada registrada e a taxonomia personalizada registrada:

    public function register_custom_data(){
        /* Register a post type for Cars. */
        $labels = array(
            'name' => _x('Cars', 'post type general name'),
            'singular_name' => _x('Car', 'post type singular name'),
            'add_new' => _x('Add New Car', 'Car'),
            'add_new_item' => __('Add New Car'),
            'edit_item' => __('Edit Car'),
            'new_item' => __('New Car'),
            'all_items' => __('All Cars'),
            'view_item' => __('View Car'),
            'search_items' => __('Search Cars'),
            'not_found' =>  __('No Cars found'),
            'not_found_in_trash' => __('No Cars found in Trash'), 
            'parent_item_colon' => '',
            'menu_name' => __('Cars')
        );
        $args = array(
            'labels' => $labels,
            'public' => true,
            'publicly_queryable' => true,
            'show_ui' => true, 
            'show_in_menu' => false, 
            'show_in_nav_menus' => false,
            'can_export' => true,
            'query_var' => true,
            'rewrite' => true,
            'menu_icon' => NULL,
            'capability_type' => 'post',
            'has_archive' => true, 
            'hierarchical' => false,
            'menu_position' => NULL,
            'supports' => array(
                'title', 
                'editor', 
                'thumbnail' 
            ),
            'rewrite' => array(
                'slug' => 'cars', 
                'with_front' => true
            )
        ); 
        register_post_type('mbe_cars', $args);

        /* Car Dealers */
        $labels = array(
            'name' => _x('Dealers', 'taxonomy general name'),
            'singular_name' => _x('Dealer', 'taxonomy singular name'),
            'search_items' =>  __('Search Dealers'),
            'all_items' => __('All Dealers'),
            'parent_item' => __('Parent Dealer'),
            'parent_item_colon' => __('Parent Dealer:'),
            'edit_item' => __('Edit Dealer'), 
            'update_item' => __('Update Dealer'),
            'add_new_item' => __('Add New Dealer'),
            'new_item_name' => __('New Dealer Name'),
            'menu_name' => __('Dealers')
        ); 

        $args = array(
            'hierarchical' => true,
            'labels' => $labels,
            'show_ui' => true,
            'query_var' => true,
            'rewrite' => array(
                'slug' => 'dealers',
                'hierarchical' => true
            )
        );

        register_taxonomy('mbe_car_dealers', 'mbe_cars', $args);

        /* Update urls. */
        flush_rewrite_rules();
    }
    
por Michael Ecklund 09.10.2012 / 21:06

2 respostas

3

Não tenho certeza se é possível ou talvez não seja a melhor abordagem. Aqui está o meu raciocínio:

domain.com/post-type-name/taxonomy-name/term-name/post-title/

As postagens podem ser anexadas a vários termos, portanto, basicamente, pode haver vários links para a mesma postagem:

domain.com/post-type-name/taxonomy-name/term-name/post-title/
domain.com/post-type-name/taxonomy-name/term2-name/post-title/
domain.com/post-type-name/taxonomy2-name/term3-name/post-title/
domain.com/post-type-name/post-title/

Dependendo de como você chegou lá.

Você definitivamente poderá ter domain.com/post-type-name/taxonomy-name/term-name/ , mas eu acho que pode não fazer sentido no WordPress ter um URI tão longo.

Acho que isso por 2 motivos:

  1. A possibilidade de vários termos de taxonomia (sem falar em várias taxonomias anexadas a um tipo de postagem personalizada ou qualquer postagem) criaria muitos links sobrepostos, além de mais possibilidades de quebrar marcadores - digamos que eu usei% bookmark/cars/dealers/honda/123-hot-rod, mas então você percebe que não foi realmente a Honda, foi a Toyota - você está mudando o termo fiscal relacionado ao post que quebraria esse link. Não é uma ocorrência provável, mas é possível.

  2. Francamente, é menos amigável. Não que o usuário médio preste atenção aos caminhos da Web em que estão, mas é mais fácil lembrar domain.com/cars/93-saturn-ion do que lembrar (ou entender) domain.com/cars/dealers/wonderland-auto/93-saturn-ion .

Quando você está na página do único post, o padrão 'above_nav' na maioria dos temas inclui os termos de taxonomia com a data abaixo do título da página, de modo que as informações ainda estejam lá, de uma maneira mais legível e utilizável.

Exemplo:

123 Hot Rod

Postado em 2 de novembro de 2012 em Carros Usados do País das Maravilhas

    
por Eric Holmes 09.10.2012 / 22:01
2

Eu não gostaria de enviar isso como uma resposta, no entanto, é um pequeno trecho incrível que liga suas taxonomias e termos.

add_filter('request', 'add_tags_and_categories');  
  function add_tags_and_categories($q) {
    if (isset($q['your_term_or_tax']) || isset($q['category_name'])) {
    $q['post_type'] = 'your_custom_post';   
      return $q;
  }  
return $q;
}

Espero que isso ajude sua jornada para uma resposta. Eu costumo usá-lo para vincular meus tipos de postagem personalizada ao / tags / & / categoria / built-in é assim:

add_filter('request', 'add_tags_and_categories');  
 function add_tags_and_categories($q) {
   if (isset($q['tag']) || isset($q['category_name'])) {
     $q['post_type'] = get_post_types();

            return $q;
   }

 return $q;
}

Felicidades!

    
por David 12.10.2012 / 06:52