Soporte » WordPress Avanzado » Custom Taxonomy/Post Type URL

  • Resuelto inigonz

    (@inigonz)


    Buenos días a tod@s,

    Tengo una duda con las urls de los custom taxonomies / post types que creo.
    He creado una taxonomía llamada ‘categoría de proyectos’, y un post type ‘proyecto’. He añadido una categoría, cat1 y un proyecto, proy1, como hago para que la url del proyecto ponga la categoría? es decir, entro en la cat1 y la url seria: http://www.miweb.com/cat1 y cuando entre en el proy1, debería ser http://www.miweb.com/cat1/proy1.

    En la creación de la taxonomía, he puesto ‘rewrite’=> array(‘slug’=> ‘proyectos’) y en el post type ‘rewrite’ => array(‘slug’ => ‘Proyectos/%categoria_proyectos%’), pero no es lo mismo, ya que está con mayúscula. Hay alguna forma de que salga bien?

    Muchas gracias por la ayuda

    • Este debate fue modificado hace 3 años, 7 meses por inigonz.
Viendo 15 respuestas - de la 1 a la 15 (de un total de 24)
  • Hola,

    no he acabado de entender exactamente cual es tu duda. Entiendo que cuando entras en «proy1» te aparece «http://www.miweb.com/proy1».

    Si es así, quizá te falte editar los permalinks, para que aparezca así «/%category%/%postname%/».

    Si no es lo que pedías o no te funciona, no dudes en añadir información o comentar lo que haga falta.

    Un saludo.

    Buenas,

    Lo primero gracias por la respuesta.
    Si ciertamente me sale como tu dices pero como tengo un rewrite en los argumentos del post type, me sale http://www.miweb.com/Proyecto/categoria/proy1, pero lo que yo quiero es que me salga http://www.miweb.com/proyecto/categoria/proy1, que siga con la misma url de la taxonomy
    Ya he probado a poner en los permalinks lo de “/%category%/%postname%/” pero no me hace nada, no se si es porque es un custom post type.

    Puedo poner como he creado el post type y la taxonomy, igual ahi tengo algo mal

    Post type:

     $labels = array(
                        'name'                  => __( 'Proyectos' ),
                        'singular_name'         => __( 'Proyecto' ),
                        'add_new'               => __( 'Añadir nuevo' ),
                        'add_new_item'          => __( 'Añadir nuevo Proyecto' ),
                        'edit_item'             => __( 'Editar Proyecto' ),
                        'new_item'              => __( 'Nuevo Proyecto' ),
                        'view_item'             => __( 'Ver Proyecto' ),
                        'search_items'          => __( 'Buscar Proyecto' ),
                        'not_found'             => __( 'No se encontraron Proyectos' ),
                        'not_found_in_trash'    => __( 'No se encontraron Proyectos en la papelera' )
                    );
    
                    $args = array(
                        'labels'            => $labels,
                        'public'            => true,
                        'supports'          => array( 'title', 'editor', 'excerpt', 'thumbnail', 'page-attributes', 'post-formats' ),
                        'capability_type'   => 'post',
                        'rewrite'           => array('slug' => 'Proyectos/%categoria_proyectos%'), // Permalinks format
                        'has_archive'       => false,
                        'menu_icon'         => 'dashicons-screenoptions',
                    );
    
                    $args = apply_filters( 'proyecto_args', $args);
                    
                    register_post_type( 'proyecto', $args );

    Taxonomy:

    $taxonomy_proyecto_category_labels = array(
                        'name'                          => __( 'Categorias de Proyectos'),
                        'singular_name'                 => __( 'Categoria de Proyectos'),
                        'search_items'                  => __( 'Buscar la Categoria de Proyectos'),
                        'popular_items'                 => __( 'Categorias de Proyectos Populares'),
                        'all_items'                     => __( 'Todas las Categoria de Proyectos'),
                        'parent_item'                   => __( 'Padre de la Categoria de Proyectos'),
                        'parent_item_colon'             => __( 'Padre de la Categoria de Proyectos:'),
                        'edit_item'                     => __( 'Editar la Categoria de Proyectos' ),
                        'update_item'                   => __( 'Actualizar la Categoria de Proyectos' ),
                        'add_new_item'                  => __( 'Añadir nueva Categoria de Proyectos' ),
                        'new_item_name'                 => __( 'Nueva Categoria de Proyectos' ),
                        'separate_items_with_commas'    => __( 'Separar las Categorias de Proyectos por comas' ),
                        'add_or_remove_items'           => __( 'Añadir o Borrar Categoria de Proyectos' ),
                        'choose_from_most_used'         => __( 'Elegir entre las Categorias de Proyectos mas usadas' ),
                        'menu_name'                     => __( 'Categoria de Proyectos' ),
                    );
    
                    $taxonomy_proyecto_category_args = array(
                        'labels'            => $taxonomy_proyecto_category_labels,
                        'public'            => true,
                        'show_in_nav_menus' => true,
                        'show_ui'           => true,
                        'show_tagcloud'     => true,
                        'hierarchical'      => true,
                        'rewrite'           => array(
                            'slug'          => 'proyectos',
                            'hierarchical'  => true
                        ),
                        'query_var'         => true
                    );
    
                    $taxonomy_proyecto_category_args = apply_filters( 'taxonomy_proyecto_category_args', $taxonomy_proyecto_category_args);
                    
                    register_taxonomy( 'categoria_proyectos', array( 'proyecto' ), $taxonomy_proyecto_category_args );

    Como puedes ver en el rewrite del post type, tengo Proyectos, mientras que en la taxonomia proyecto, y no es lo mismo.

    En el post type, para poner la categoria de proyectos utilizo este filtro:

    function proyecto_post_link( $post_link, $id = 0 ) {
                $post = get_post($id);
    
                if ( is_object( $post ) ) {
                    if ( $post->post_type == 'proyecto' ) {
                        $terms = wp_get_object_terms( $post->ID, 'categoria_proyectos' );
                        if ( $terms ) {
                            $parent     = $terms[0]->parent;
                            $url        = $terms[0]->slug;
                            while ( $parent != 0 ) {
                                $terms  = get_term_by( 'parent', $parent, 'categoria_proyectos' );
                                $url    = $terms->slug . '/' . $url;
                                $parent = $terms->parent;
                            }
    
                            return str_replace( '%categoria_proyectos%' , $url , $post_link );
                        }
                    }
                }
                return $post_link;
            }
            add_filter( 'post_type_link', 'proyecto_post_link', 1, 3 );

    Gracias

    • Esta respuesta fue modificada hace 3 años, 7 meses por inigonz.

    Bien, primero de todo el tema de la mayuscula tienes que cambiarlo en
    'rewrite' => array('slug' => 'Proyectos/%categoria_proyectos%')

    añade esta función al final del código, como dice el propio código solo usarlo una vez al cargar el plugin / functions.php cuando crees el CPT, luego borrarlo, te adjunto primero la página donde está la información:

    https://codex.wordpress.org/Function_Reference/register_post_type#Flushing_Rewrite_on_Activation

    Y esta sería la función:

    function my_rewrite_flush() {
        my_cpt_init();
        // ATTENTION: This is *only* done during plugin activation hook in this example!
        // You should *NEVER EVER* do this on every page load!!
        flush_rewrite_rules();
    }
    register_activation_hook( __FILE__, 'my_rewrite_flush' );

    Con estos dos cambios he logrado que el nombre de la página sea:
    «http://www.mipagina.com/proyectos/nombrecategoria/nombrepagina/»

    Buenas,

    La mayúscula la había puesto para que no se pegase con el rewrite de la taxonomía, si no, no me funcionaba.
    He cambiado la mayúscula, he puesto el código que resetea las urls, cambiando lo de my_cpt_init() por mi función, he comprobado que me lo hace ya que mi menú se desactiva(menú con categorías), he eliminado el código pero me falla, entro en mi pagina, http://www.miweb.com, voy a la categoria http://www.miweb.com/cat1 sin problemas, pero cuando voy a la categoría hija me lleva a la home, intento acceder a http://www.miweb.com/cat1/hija1 pero me lleva a home, alguna idea?

    Mi estructura es, unas categorías, todas ellas tienen hijas, algunas hijas tienen hijas y los proyectos esta en las hijas finales, no se si me explico

    Gracias.

    He limpiado cache y esas cosas, no vaya a ser que tenga algo que ver, y a las categorías, categorias hijas,… he podido acceder, pero cuando pincho en el proyecto me lleva a la home, he visto que la url del proyecto cuando te pones encima sale bien, pero te lleva a la home, he probado a hacer todo de nuevo, pero ahora me falla cuando intento acceder a la categoría hija, alguna idea? igual hay que poner algo en el htaccess?

    Gracias

    • Esta respuesta fue modificada hace 3 años, 7 meses por inigonz.

    Estoy en ello intentando encontrar la solución. El problema parece ser, que la categoría hija aparece en el slug como padre, es decir, prueba a ir a «http://miweb.com/hija1/», y ahí te aparecerá en principio el archivo de la categoría hija.

    Ahora tocaría poner, que por cada padre que tenga la categoría se añada el slug correspondiente. Intentaré buscar más tarde la solución, pero mientras tanto creo que es lo último que te faltará.

    He encontrado esto aunque no me ha dado tiempo de mirarlo, como digo luego seguiré un ratito, pero mientras tanto puedes ir ojeando a ver si te sirve:

    http://wordpress.stackexchange.com/questions/39500/how-to-create-a-permalink-structure-with-custom-taxonomies-and-custom-post-types/39862#39862

    ok, muchas gracias, voy echándole un vistazo, tranqui cuando tengas tiempo.
    Sip ciertamente puedo acceder directamente a la categoría hija, pero eso es muy raro, no me debería de pasar, algo tengo que tener mal en el código o eso funciona así siempre a no ser que se añada alguna función?

    • Esta respuesta fue modificada hace 3 años, 7 meses por inigonz.

    Prueba de seleccionar solo la categoría hija a la hora de crear el post, parece funcionar a la hora del enlace del post, «miweb.com/proyectos/catpadre/cathija/nombrepost». Para el archivo de la categoría hija me falta mirar que falla.

    • Esta respuesta fue modificada hace 3 años, 7 meses por merk_cat.

    He encontrado una solución, el código de este post funciona correctamente. Si quieres copia las partes en el archivo functions.php para comprobarlo, para que no te pase como a mi, una vez tengas todo el código subido, accede a la configuración de permalinks y actualiza allí para que se haga efectivo el cambio.

    http://themoonwatch.com/en/2012/custom-permalinks-hierarchical-taxonomies/#sthash.VWTfeJ2I.l2C9kXH8.dpbs

    Si tuviera más tiempo te ayudaría a completar tu código para adaptarlo al de este post, aunque si no te corre prisa podría hacerlo más tarde. Seguramente la parte importante son las funciones que utiliza para reescribir los enlaces.

    Un saludo.

    Buenas,

    Muchísimas gracias por tu ayuda y tiempo.
    Al crear los proyectos los suelo enlazar directamente a la categoría hija, en mi código detecto si la categoría es la última y dependiendo de ello me muestra una vista u otra.
    Voy a echarle un ojo al ultimo link, prisa no tengo, la web la tengo lanzada y ahora estoy haciendo una nueva versión del theme para intentar solucionar cosas que no hice bien del todo.

    saludos

    Buenas,

    Ya he pegado todo, y he comprobado que me funciona, ahora voy a intentar modificar mi código con este a ver que pasa

    Buenas de nuevo,

    Parece que me funciona, pero me ha surgido un problema. Yo tengo en mi web diferentes post type/taxanomies: proyectos, noticias, oficinas, publicaciones,… para cada post type/taxonomy tengo un archivo de taxonomy y single, es decir, taxonomy-categoria-proyectos y single-proyecto.

    Al adaptar el código de la pagina que me has pasado ya no me reconoce la pagina de single-proyecto, si pongo single si funciona pero necesito que sea especifico para cada post type, he intenado que me diga el post type porque igual lo estoy poniendo mal, pero no me devuelve nada. Gracias

    Saludos

    Bueno ahora mismo nose como lo tienes así que es un poco dificil.

    Una pregunta, has pensado en usar varios custom post type? Es decir que en vez de categorías padre, sean Custom Post Type, así tendrías todo ordenado y no habría tanto lío, y sobretodo si vas a tener pocas categorías padre pero luego bastantes de child, no sé si me explico.

    Dandole vueltas puede que esta sea la mejor solución.

    Respecto al tema, comprueba a ver si te funcionan los archivos (archive-proyecto.php) y que no tengas algun error con la mayúscula si es que la dejaste al final. Recuerda tambien hacer el flush de los permalinks (entrando en permalinks y dandole a actualizar) cada vez que cambies algo.

    Un saludo.

    buenas,

    No se si te referirás a esto, pero ahora mismo tengo creados diferentes custom post type,
    proyecto
    noticia
    publicación
    oficina
    ….

    cada uno tiene su custom taxonomy, {post-type}-category.

    En mi caso, no utilizo la plantilla archive, ni la general, ni singular, cada custom post type, tiene su plantilla taxonomy-{taxonomy} y su single-{post-type}, ya que cada una tiene diferentes vistas.

    He creado un archivo donde creo el post type de proyectos, con el código del post de ayer, lo tengo así:

    if ( !class_exists( 'Proyectos_post_type' ) ) {
    
            class Proyectos_post_type {
    
                function __construct() {
                    // Adds the proyecto post type and taxonomies
                    add_action( 'init', array( &$this, 'proyecto_init' ), 0 );
    
                    // Adds columns in the admin view for thumbnail and taxonomies
                    add_filter( 'manage_edit-proyecto_columns', array( &$this, 'proyecto_edit_columns' ) );
                    add_action( 'manage_posts_custom_column', array( &$this, 'proyecto_column_display' ), 10, 2 );
    
                    // Allows filtering of posts by taxonomy in the admin view
                    add_action( 'restrict_manage_posts', array( &$this, 'proyecto_add_taxonomy_filters' ) );
                }
    
                function proyecto_init() {
    
                    /*
                     * Enable the Proyecto custom post type
                     * http://codex.wordpress.org/Function_Reference/register_post_type
                     */
    
                    $labels = array(
                        'name'                  => __( 'Proyectos' ),
                        'singular_name'         => __( 'Proyecto' ),
                        'add_new'               => __( 'Añadir nuevo' ),
                        'add_new_item'          => __( 'Añadir nuevo Proyecto' ),
                        'edit_item'             => __( 'Editar Proyecto' ),
                        'new_item'              => __( 'Nuevo Proyecto' ),
                        'view_item'             => __( 'Ver Proyecto' ),
                        'search_items'          => __( 'Buscar Proyecto' ),
                        'not_found'             => __( 'No se encontraron Proyectos' ),
                        'not_found_in_trash'    => __( 'No se encontraron Proyectos en la papelera' )
                    );
    
                    $args = array(
                        'labels'                => $labels,
                        'public'                => true,
                        'publicly_queryable'    => true,
                        'show_ui'               => true,
                        'show_in_menu'          => true,
                        'show_in_nav_menus'     => true,
                        'menu_position '        => 20,
                        'supports'              => array( 'title', 'editor', 'author', 'thumbnail', 'comments', 'post-formats', 'revisions' ),
                        'hierarchical'          => false,
                        'has_archive'           => 'proyecto',
                        'rewrite'               => array(
                            'slug'              => 'proyecto-item',
                            'hierarchical'      => true,
                            'with_front'        => false
                        )
                    );
    
                    $args = apply_filters( 'proyecto_args', $args);
                    
                    register_post_type( 'proyecto', $args );
    
                    /*
                     * Register a taxonomy for Proyectos Categories
                     * http://codex.wordpress.org/Function_Reference/register_taxonomy
                     */
    
                    // Registrar las categorias de proyectos
                    $taxonomy_proyecto_category_labels = array(
                        'name'                       => __( 'Categorias de Proyectos'),
                        'singular_name'              => __( 'Categoria de Proyectos'),
                        'search_items'               => __( 'Buscar la Categoria de Proyectos'),
                        'popular_items'              => __( 'Categorias de Proyectos Populares'),
                        'all_items'                  => __( 'Todas las Categoria de Proyectos'),
                        'parent_item'                => __( 'Padre de la Categoria de Proyectos'),
                        'parent_item_colon'          => __( 'Padre de la Categoria de Proyectos:'),
                        'edit_item'                  => __( 'Editar la Categoria de Proyectos' ),
                        'update_item'                => __( 'Actualizar la Categoria de Proyectos' ),
                        'add_new_item'               => __( 'Añadir nueva Categoria de Proyectos' ),
                        'new_item_name'              => __( 'Nueva Categoria de Proyectos' ),
                        'separate_items_with_commas' => __( 'Separar las Categorias de Proyectos por comas' ),
                        'add_or_remove_items'        => __( 'Añadir o Borrar Categoria de Proyectos' ),
                        'choose_from_most_used'      => __( 'Elegir entre las Categorias de Proyectos mas usadas' ),
                        'menu_name'                  => __( 'Categoria de Proyectos' ),
                    );
    
                    $taxonomy_proyecto_category_args = array(
                        'labels'             => $taxonomy_proyecto_category_labels,
                        'public'             => true,
                        'hierarchical'       => true,
                        'show_ui'            => true,
                        'rewrite'            => array(
                            'slug'           => 'proyecto-category',
                            'hierarchical'   => true,
                            'with_front'     => false
                        ),
                    );
    
                    $taxonomy_proyecto_category_args = apply_filters( 'taxonomy_proyecto_category_args', $taxonomy_proyecto_category_args);
                    
                    register_taxonomy( 'proyecto-category', array( 'proyecto' ), $taxonomy_proyecto_category_args );
    
                    // Registrar los tags, proyectos relacionados, de proyectos
                    $taxonomy_proyecto_tag_labels = array(
                        'name'                       => __( 'Tags de Proyectos'),
                        'singular_name'              => __( 'Tag de Proyectos'),
                        'search_items'               => __( 'Buscar el Tag de Proyectos'),
                        'popular_items'              => __( 'Tags de Proyectos Populares'),
                        'all_items'                  => __( 'Todos los Tags de Proyectos'),
                        'parent_item'                => __( 'Padre del Tag de Proyectos'),
                        'parent_item_colon'          => __( 'Padre del Tag de Proyectos:'),
                        'edit_item'                  => __( 'Editar el Tag de Proyectos' ),
                        'update_item'                => __( 'Actualizar el Tag de Proyectos' ),
                        'add_new_item'               => __( 'Añadir nuevo Tag de Proyectos' ),
                        'new_item_name'              => __( 'Nuevo Tag de Proyectos' ),
                        'separate_items_with_commas' => __( 'Separar los Tags de Proyectos por comas' ),
                        'add_or_remove_items'        => __( 'Añadir o Borrar Tag de Proyectos' ),
                        'choose_from_most_used'      => __( 'Elegir entre los Tags de Proyectos mas usadas' ),
                        'menu_name'                  => __( 'Tag de Proyectos' ),
                    );
    
                    $taxonomy_proyecto_tag_args = array(
                        'labels'            => $taxonomy_proyecto_tag_labels,
                        'public'            => true,
                        'show_in_nav_menus' => true,
                        'show_ui'           => true,
                        'show_tagcloud'     => true,
                        'hierarchical'      => false,
                        'rewrite'           => array(
                            'slug'          => 'tags'
                        ),
                        'query_var'         => true
                    );
    
                    $taxonomy_proyecto_tag_args = apply_filters( 'taxonomy_proyecto_tag_args', $taxonomy_proyecto_tag_args);
                    
                    register_taxonomy( 'tag_proyectos', array( 'proyecto' ), $taxonomy_proyecto_tag_args );
                }
    
                /*
                 * Add Columns to Proyecto Edit Screen
                 * http://wptheming.com/2010/07/column-edit-pages/
                 */
    
                function proyecto_edit_columns( $columns ) {
                    //$columns['proyecto_thumbnail']  = __( 'Thumbnail' );
                    $columns['proyecto_category']   = __( 'Category' );
                    //$columns['tag_proyectos']       = __( 'Tag' );
                    //$columns['galeria_proyectos']   = __( 'Post para Galeria' );
                    //$columns['visitas_proyectos']   = __( 'Visitas' );
                    return $columns;
                }
    
                function proyecto_column_display( $proyecto_columns, $post_id ) {
    
                    // Code from: http://wpengineer.com/display-post-thumbnail-post-page-overview
    
                    switch ( $proyecto_columns ) {
    
                        // Display the thumbnail in the column view
                        /*case 'proyecto_thumbnail':
                            $width          = (int) 80;
                            $height         = (int) 80;
                            $thumbnail_id   = get_post_meta( $post_id, '_thumbnail_id', true );
    
                            // Display the featured image in the column view if possible
                            if ( $thumbnail_id ) {
                                $thumb = wp_get_attachment_image( $thumbnail_id, array($width, $height), true );
                            }
                            if ( isset( $thumb ) ) {
                                echo $thumb;
                            } else {
                                echo __( 'None' );
                            }
                        break;*/
    
                        // Display the category proyecto in the column view
                        case 'proyecto_category':
                            if ( $category_list     = get_the_term_list( $post_id, 'proyecto-category', '', ', ', '' ) ) {
                                /*if ( is_admin() ) {
                                    $terms          = get_the_terms( $post_id, 'proyecto-category' );
                                    foreach ( $terms as $term) {
                                        $term_padre = $term->parent;
                                    }
                                    $term_father    = get_term_by( 'id', $term_padre, 'proyecto-category' );
                                    echo qtranxf_use( 'es', $term_father->name, false ) . ' - ' . qtranxf_use( 'es', $category_list, false );
                                } else {*/
                                    echo qtranxf_use( 'es', $category_list, false );
                                /*}*/
                            } else {
                                echo __( 'None' );
                            }
                        break;
    
                        // Display the tags proyecto in the column view
                        /*case 'tag_proyectos':
                            if ( $tag_list = get_the_term_list( $post_id, 'tag_proyectos', '', ', ', '' ) ) {
                                echo qtranxf_use( 'es', $tag_list, false );
                            } else {
                                echo __( 'None' );
                            }
                        break;
    
                        // Display the id post proyecto in the column view
                        case 'galeria_proyectos':
    
                            $post_id = get_the_id();
                            if ( $post_id ) {
                                echo $post_id;
                            } else {
                                echo __( 'None' );
                            }
                        break;
    
                        // Display the visit number in the column view
                        case 'visitas_proyectos':
    
                            global $current_user;
                            get_currentuserinfo();
    
                            if ( $current_user->user_login == 'admin' ) {
                                $post_id    = get_the_id();
                                $count_key  = 'post_views_count';
                                $count      = get_post_meta( $post_id, $count_key, true );
    
                                echo $count;
                            }
                        break;*/
                    }
                }
    
                /*
                 * Adds taxonomy filters to the proyecto admin page
                 * Code artfully lifed from http://pippinsplugins.com
                 */
    
                function proyecto_add_taxonomy_filters() {
                    global $typenow;
    
                    // An array of all the taxonomyies you want to display. Use the taxonomy name or slug
                    $taxonomies = array( 'proyecto-category' );
    
                    // must set this to the post type you want the filter(s) displayed on
                    if ( $typenow == 'proyecto' ) {
    
                        foreach ( $taxonomies as $tax_slug ) {
                            $current_tax_slug = isset( $_GET[$tax_slug] ) ? $_GET[$tax_slug] : false;
                            $tax_obj = get_taxonomy( $tax_slug );
                            $tax_name = $tax_obj->labels->name;
                            $terms = get_terms($tax_slug);
                            if ( count( $terms ) > 0) {
                                echo "<select name='$tax_slug' id='$tax_slug' class='postform'>";
                                echo "<option value=''>$tax_name</option>";
                                foreach ( $terms as $term ) {
                                    echo '<option value=' . $term->slug, $current_tax_slug == $term->slug ? ' selected="selected"' : '','>' . $term->name .' ( ' . $term->count .')</option>';
                                }
                                echo "</select>";
                            }
                        }
                    }
                }
            }
        }
        new Proyectos_post_type;

    En el functions.php, abajo tengo las funciones de ayer para poder poner bien las urls:

    add_action( 'generate_rewrite_rules', 'register_proyecto_rewrite_rules' );
            function register_proyecto_rewrite_rules( $wp_rewrite ) {
                $new_rules = array( 
                    'proyecto/([^/]+)/?$' => 'index.php?proyecto-category=' . $wp_rewrite->preg_index( 1 ),
                    'proyecto/([^/]+)/([^/]+)/?$' => 'index.php?post_type=proyecto&proyecto-category=' . $wp_rewrite->preg_index( 1 ) . '&proyecto=' . $wp_rewrite->preg_index( 2 ),
                    'proyecto/([^/]+)/([^/]+)/page/(\d{1,})/?$' => 'index.php?post_type=proyecto&proyecto-category=' . $wp_rewrite->preg_index( 1 ) . '&paged=' . $wp_rewrite->preg_index( 3 ),
                    'proyecto/([^/]+)/([^/]+)/([^/]+)/?$' => 'index.php?post_type=proyecto&proyecto-category=' . $wp_rewrite->preg_index( 2 ) . '&proyecto=' . $wp_rewrite->preg_index( 3 ),
                );
    
                $wp_rewrite->rules = $new_rules + $wp_rewrite->rules;
            }
    
            // A hacky way of adding support for flexible custom permalinks
            // There is one case in which the rewrite rules from register_kb_rewrite_rules() fail:
            // When you visit the archive page for a child section(for example: http://example.com/proyecto/category/child-category)
            // The deal is that in this situation, the URL is parsed as a Knowledgebase post with slug "child-category" from the "category" section
            function fix_proyecto_subcategory_query($query) {
                if ( isset( $query['post_type'] ) && 'proyecto' == $query['post_type'] ) {
                    if ( isset( $query['proyecto'] ) && $query['proyecto'] && isset( $query['proyecto-category'] ) && $query['proyecto-category'] ) {
                        $query_old = $query;
                        // Check if this is a paginated result(like search results)
                        if ( 'page' == $query['proyecto-category'] ) {
                            $query['paged'] = $query['name'];
                            unset( $query['proyecto-category'], $query['name'], $query['proyecto'] );
                        }
                        // Make it easier on the DB
                        $query['fields'] = 'ids';
                        $query['posts_per_page'] = 1;
    
                        // See if we have results or not
                        $_query = new WP_Query( $query );
                        if ( ! $_query->posts ) {
                            $query = array( 'proyecto-category' => $query['proyecto'] );
                            if ( isset( $query_old['proyecto-category'] ) && 'page' == $query_old['proyecto-category'] ) {
                                $query['paged'] = $query_old['name'];
                            }
                        }
                    }
                }
    
                return $query;
            }
            add_filter( 'request', 'fix_proyecto_subcategory_query', 10 );
    
            function proyecto_article_permalink( $article_id, $section_id = false, $leavename = false, $only_permalink = false ) {
                $taxonomy = 'proyecto-category';
                $article = get_post( $article_id );
    
                $return = '<a href="';
                $permalink = ( $section_id ) ? trailingslashit( get_term_link( intval( $section_id ), 'proyecto-category' ) ) : home_url( '/proyecto/' );
                $permalink .= trailingslashit( ( $leavename ? "%$article->post_type%" : $article->post_name ) );
                $return .= $permalink . '/" >' . get_the_title( $article->ID ) . '</a>';
                return ( $only_permalink ) ? $permalink : $return;
            }
    
            function filter_proyecto_post_link( $permalink, $post, $leavename ) {
                if ( get_post_type( $post->ID ) == 'proyecto' ) {
                    $terms = wp_get_post_terms( $post->ID, 'proyecto-category' );
                    $term = ( $terms ) ? $terms[0]->term_id : false;
                    $permalink = proyecto_article_permalink( $post->ID, $term, $leavename, true );
                }
                return $permalink;
            }
            add_filter( 'post_type_link', 'filter_proyecto_post_link', 100, 3 );
    
            function filter_proyecto_section_terms_link( $termlink, $term, $taxonomy = false ) {
                if ( $taxonomy == 'proyecto-category' ) {
                    $section_ancestors = get_ancestors( $term->term_id, $taxonomy );
                    krsort( $section_ancestors );
                    $termlink =  home_url( '/proyecto/' );
                    foreach ( $section_ancestors as $ancestor ) {
                        $section_ancestor = get_term( $ancestor, $taxonomy );
                        $termlink .= $section_ancestor->slug . '/';
                    }
                    $termlink .= trailingslashit( $term->slug );
                }
    
                return $termlink;
            }
            add_filter( 'term_link', 'filter_proyecto_section_terms_link', 100, 3 );
Viendo 15 respuestas - de la 1 a la 15 (de un total de 24)
  • El debate ‘Custom Taxonomy/Post Type URL’ está cerrado a nuevas respuestas.