Archivos de fecha para el tipo de publicación personalizada

He visto muchas preguntas / publicaciones con respecto a esto, pero aún no he encontrado una solución decente. Básicamente, estoy intentando hacer lo que hace wp_get_archives , pero para un tipo de publicación personalizado (personalmente, no estoy seguro de por qué wp_get_archives no admite tipos de publicaciones personalizadas).

El código que estoy usando actualmente es el siguiente

functions.php

 function Cpt_getarchives_where_filter( $where , $r ) { $post_type = 'events'; return str_replace( "post_type = 'post'" , "post_type = '$post_type'" , $where ); } 

sidebar-events.php

 add_filter( 'getarchives_where' , 'Cpt_getarchives_where_filter' , 10 , 2 ); wp_get_archives(); remove_filter('getarchives_where' , 'Cpt_getarchives_where_filter' , 10 ); 

Este código muestra las fechas (p. Ej., Abril de 2014, marzo de 2014), etc., lo cual es genial, pero al hacer clic en los enlaces simplemente va a 404. La URL que se crea en cada enlace de fecha es / 2014/04 /, sin embargo debe ser algo like / events / 2014/04 /.

¿Hay alguna manera de incluir ‘eventos’ en la URL para que se pueda usar la plantilla archive-events.php, y hay alguna razón por la cual los enlaces generan actualmente un 404?

Muchas gracias por cualquier ayuda

Hay muchos ejemplos en Internet similares a los tuyos, pero el problema es que aunque wp_get_archive() creará una lista de archivos de tipos de publicaciones personalizados, los enlaces aún apuntan al tipo de publicación predeterminado. Esto se debe a que WordPress no genera reglas de reescritura para los archivos del tipo de publicación personalizada, tendrá que crearlos manualmente. Aquí hay un ejemplo de cómo generar reglas para archivos anuales, mensuales y diarios. También muestra cómo convertir enlaces con el filtro get_archives_link . Asegúrese de agregar 'has_archive' => true a register_post_type() matriz de argumentos y para vaciar las reglas de reescritura visitando la página settings->permalinks en admin.

functions.php

 add_filter( 'getarchives_where', 'getarchives_where_filter', 10, 2 ); add_filter( 'generate_rewrite_rules', 'generate_events_rewrite_rules' ); function getarchives_where_filter( $where, $args ) { if ( isset($args['post_type']) ) { $where = "WHERE post_type = '$args[post_type]' AND post_status = 'publish'"; } return $where; } function generate_events_rewrite_rules( $wp_rewrite ) { $event_rules = array( 'events/([0-9]{4})/([0-9]{1,2})/([0-9]{1,2})/?$' => 'index.php?post_type=events&year=$matches[1]&monthnum=$matches[2]&day=$matches[3]', 'events/([0-9]{4})/([0-9]{1,2})/?$' => 'index.php?post_type=events&year=$matches[1]&monthnum=$matches[2]', 'events/([0-9]{4})/?$' => 'index.php?post_type=events&year=$matches[1]' ); $wp_rewrite->rules = $event_rules + $wp_rewrite->rules; } function get_archives_events_link( $link ) { return str_replace( get_site_url(), get_site_url() . '/events', $link ); }; 

ejemplos de sidebar.php

 add_filter( 'get_archives_link', 'get_archives_events_link', 10, 2 ); wp_get_archives( array( 'post_type' => 'events' ) ); wp_get_archives( array( 'post_type' => 'events', 'type' => 'yearly' ) ); wp_get_archives( array( 'post_type' => 'events', 'type' => 'monthly' ) ); wp_get_archives( array( 'post_type' => 'events', 'type' => 'daily' ) ); remove_filter( 'get_archives_link', 'get_archives_events_link', 10, 2 );