Reescribiendo un permalink de custom-post-type con término de taxonomía

16 abr 2012, 09:23:57
Vistas: 35.3K
Votos: 17

Estoy tratando de reescribir mi URL para un custom_post_type llamado wr_events con uno de sus términos de custom_taxonomy de event_type

add_action('init', 'wr_events');

function wr_events() {

     register_taxonomy(
        'event_type',
        'wr_event',
        array(
            'label' => 'Types',
            'singular_label' => 'Typ',
            'hierarchical' => true,
            'query_var' => true,
            'rewrite' => array('slug' => 'events'),
        )
    );

    $labels = array(
        'name' => _x('Events', 'nombre general del tipo de post'),
        'singular_name' => _x('Event', 'nombre singular del tipo de post')
    );

    $args = array(
        'labels' => $labels,
        'public' => true,
        'publicly_queryable' => true,
        'show_ui' => true,
        'query_var' => true,
        'capability_type' => 'post',
        'hierarchical' => false,
        'menu_position' => null,
        'supports' => array('title','editor','thumbnail', 'excerpt'),
        'rewrite' => array(
            //'slug' => 'event',
            'slug' => 'events/%event%',
            'with_front' => false
        ),
        'has_archive' => 'events'
    ); 

    register_post_type( 'wr_event' , $args );
    flush_rewrite_rules();
}

add_action('save_post', 'save_details');

add_filter('post_type_link', 'events_permalink_structure', 10, 4);
function events_permalink_structure($post_link, $post, $leavename, $sample)
{
    if ( false !== strpos( $post_link, '%event%' ) ) {
        $event_type_term = get_the_terms( $post->ID, 'event_type' );
        $post_link = str_replace( '%event%', array_pop( $event_type_term )->slug, $post_link );
    }
    return $post_link;
}

Así que en mi caso, mis términos de taxonomía serían "workshops" o "lectures" etc. url/events/lectures o url/events/workshops lista todos mis posts relacionados con esta "categoría", url/events muestra un archivo personalizado para todos mis eventos. -> esto es justo lo que quiero, sin embargo, lo único que no funciona es la URL completa al custom-post en sí...

url/events/lectures/post-name - ¡devuelve un 404!

¿Alguna idea de por qué está sucediendo esto? Mi función events_permalink_structure() parece funcionar correctamente ya que reemplaza mis permalinks exactamente de la manera que quiero.

Instalé el plugin "Rewrite Analyzer" y me muestra "Regex is empty" para wr_event.

También he intentado actualizar las Rewrite Rules visitando la configuración de permalinks. Sin embargo, no tiene efecto.

0
Todas las respuestas a la pregunta 1
3
11

Cambia todos tus %event% por %event_type%. Espero que eso funcione para ti.

16 abr 2012 14:33:00
Comentarios

¡Muchas, muchas gracias! ¡Increíble! No lo entiendo pero funciona :)

mathiregister mathiregister
16 abr 2012 17:57:18

@mathiregister - es porque WP no entiende automáticamente la etiqueta %event%, pero sí entiende que %event_type% corresponde a tu taxonomía de tipo de evento.

Stephen Harris Stephen Harris
9 may 2012 18:55:51

Ahora tengo un tipo de entrada personalizado con el slug /catalog/ que muestra todas las entradas, /katalog/whatever/ muestra entradas en la taxonomía personalizada con el slug whatever, y /katalog/whatever/mypost muestra una entrada individual que pertenece a la taxonomía whatever. Solo coloca en lugar de %event% en el código anterior el nombre de tu taxonomía personalizada con %%

User User
16 ago 2012 22:51:51