Cómo modificar las estructuras de URL en tipos de correos personalizados y taxonomías o términos

4

Soy consciente de que hay varias publicaciones que cubren el tema de la personalización de estructura de URL de enlace permanente de tipos de publicaciones personalizadas , taxonomías personalizadas , y términos de taxonomía . Sin embargo, ninguno de ellos es muy claro, no funciona correctamente o causa problemas en otros lugares.

Aquí hay algunos enlaces que ya "tipo de" cubren reescritura de URL .

  1. Cómo para crear una estructura de enlace permanente con taxonomías personalizadas y tipos de correos personalizados como nombre base / padre-impuesto / hijo-impuesto / nombre-tipo-mensaje personalizado
  2. Tipos de correos personalizados, taxonomías y enlaces permanentes
  3. ¿Mezcla el tipo de mensaje personalizado y las estructuras de reescritura de taxonomía?

Estoy buscando crear una estructura de URL de enlace permanente en la línea de:

  • Nombre del tipo de publicación: coches
  • Nombre de la taxonomía: concesionarios
  • Nombre del término: honda
  • Título de la publicación: 123 Hot Rod Lane

Ejemplo de configuración de la estructura ideal de URL de enlace permanente:

Estructura genérica de enlace permanente:

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

Estructura de enlace permanente más específica:

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

  • /cars/ debe ser accesible como una lista de archivos de cada publicación hecho en el tipo de publicación.
  • /cars/dealers/ debe ser accesible como una lista de archivos de Cada publicación realizada en la taxonomía.
  • /cars/dealers/honda/ debe ser accesible como una lista de archivos de cada publicación hecha en ese término de taxonomía.
  • /cars/dealers/honda/123-hot-rod-lane/ necesita ser accesible como Vista singular de la publicación realizada en los autos tipo de publicación personalizada.

Para ser claros, para que nadie haga un trabajo innecesario mientras responde a esta pregunta. NO necesito nada más que simplemente agregar las reglas de reescritura correctas para mi tipo de publicación, taxonomía y términos. Esta pregunta se refiere directamente a la reescritura de URL del enlace permanente , y NO en relación con la lista de publicaciones o archivos. Solo necesito asegurarme de que WordPress los reconoce correctamente, mientras uso llamadas condicionales como is_post_type_archive() o is_tax() o is_singular() , etc.

He intentado varias veces, desde numerosas preguntas / respuestas en este sitio. Nada parece funcionar.

Aquí está mi tipo de publicación personalizada registrada y taxonomía 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();
    }
    
pregunta Michael Ecklund 09.10.2012 - 21:06

2 respuestas

3

No estoy seguro de que sea posible, o quizás no sea el mejor enfoque. Aquí está mi razonamiento:

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

Las publicaciones pueden adjuntarse a varios términos, por lo que en esencia podría haber múltiples enlaces a la misma publicación:

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/

Dependiendo de cómo hayas llegado.

Definitivamente podrás tener domain.com/post-type-name/taxonomy-name/term-name/ , pero creo que puede que no tenga mucho sentido dentro de WordPress tener una URI tan larga.

Creo que esto por 2 razones:

  1. La posibilidad de múltiples términos de taxonomía (sin mencionar las múltiples taxonomías asociadas a un tipo de publicación personalizada, o cualquier publicación) crearía muchos enlaces superpuestos, así como más posibilidades de romper marcadores: digamos que marcé /cars/dealers/honda/123-hot-rod , pero luego te das cuenta de que en realidad no era Honda, era Toyota: cambiar el término de impuestos relacionado con la publicación rompería ese vínculo. No es una ocurrencia probable, pero es posible.

  2. Francamente, es menos fácil de usar. No es que el usuario promedio preste atención a las rutas web en las que están, pero es más fácil recordar domain.com/cars/93-saturn-ion que recordar (o entender) domain.com/cars/dealers/wonderland-auto/93-saturn-ion .

Cuando se encuentra en la página de esa única publicación, el valor predeterminado 'above_nav' en la mayoría de los temas incluye los términos de taxonomía con la fecha debajo del título de la Página de todos modos, por lo que la información sigue ahí, de una manera más legible y útil.

Ejemplo:

123 Hot Rod

publicado el 2 de noviembre de 2012 en Wonderland Used Cars

    
respondido por el Eric Holmes 09.10.2012 - 22:01
2

No me gustaría enviar esto como respuesta, sin embargo, es un pequeño fragmento sorprendente que enlaza tus taxonomías y términos.

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 esto pueda ayudarte en tu viaje hacia una respuesta. Normalmente lo uso para vincular mis tipos de publicaciones personalizadas a / tags / & / category / built-in es así:

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;
}

¡Salud!

    
respondido por el David 12.10.2012 - 06:52