¿Cómo se muestran los archivos de un tipo de publicación personalizada por año & ¿Mes?
¿Cómo se muestran los archivos de un tipo de publicación personalizada por año & ¿Mes?
Sí, puedes.
Todo lo que necesita es hacer un filtro para wp_get_archives();
para que acepte el parámetro post_type
:
function my_custom_post_type_archive_where($where,$args){
$post_type = isset($args['post_type']) ? $args['post_type'] : 'post';
$where = "WHERE post_type = '$post_type' AND post_status = 'publish'";
return $where;
}
entonces llama a esto:
add_filter( 'getarchives_where','my_custom_post_type_archive_where',10,2);
Cuando quiera mostrar el archivo por tipo de publicación personalizada, simplemente pase el post_type args:
$args = array(
'post_type' => 'your_custom_post_type',
'type' => 'monthly',
'echo' => 0
);
echo '<ul>'.wp_get_archives($args).'</ul>';
No, la línea oficial de los desarrolladores de Wordpress fue que los tipos de publicación personalizados no estaban destinados a hacer el trabajo de las publicaciones normales normales, y que si necesita publicar archivos de fechas, etc., entonces no está haciendo las cosas correctamente, y es mejor utilizar formatos de publicación, etc.
Los tipos de publicaciones personalizadas están pensados para aplicaciones web, etc., mientras que se hace algo como configurar un tipo de publicación personalizada que actúa como un blog secundario o paralelo con un nombre diferente, por ejemplo. Blog vs noticias, con las mismas capacidades, no es para lo que fue diseñada la función, y significaría otros problemas técnicos derivados de su implementación.
Si aún insiste en esto y no es suficiente con el uso de taxonomías personalizadas y formatos de publicación, puede agregar reglas de reescritura en functions.php y redirigir los archivos de año / mes en ciertas URL a la página de archivado de la publicación, y luego verificar en la página de archivado personalizado si ha especificado variables en sus reglas de reescritura y cargue una plantilla diferente, asegurándose de que en las reglas de reescritura establezca los valores adecuados.
EDIT - > mientras que esta respuesta todavía funciona para < WP4.4, ya que la compatibilidad con 4.4 para los tipos de publicaciones personalizadas ahora se incluye en wp_get_archives()
Finalmente, hay una solución simple, rápida y fácil para archivos basados en fecha de tipos de publicaciones personalizados en WordPress. Este ha sido un problema de larga data que se registrado aquí en WP Core Trac.
Aún no se ha resuelto, pero uno de los colaboradores de Trac ha publicado un complemento simple en GitHub que le permitirá tener archivos basados en fechas para CPT.
Después de instalar este complemento, o agregar el código para sus funciones manualmente, puede usar archivos para CPT como tales:
<?php wp_get_archives_cpt( 'post_type=custom_post_type' ); ?>
Tenga en cuenta que esta nueva función wp_get_archives_cpt
funciona igual que el estándar wp_get_archives
, por lo que puede usar cualquiera de los argumentos regulares que acepta. Sin embargo, simplemente agrega la capacidad para que puedas agregar un argumento de nombre de tipo de publicación personalizado.
No hay suficiente reputación para agregar esto a la respuesta de taiken, lo siento.
Sin embargo, quería agregar que su respuesta funcionó para mí, sin embargo, los enlaces estaban en el formato 'localhost / date / 2010'. Mientras que necesitaba el formato 'localhost / postslug / 2010'. Pude arreglar esto usando una cadena de reemplazo en la salida de wp_get_archives.
Por lo tanto, dependiendo de cómo se configuren los enlaces permanentes, este código solucionará el problema 404 y redirigirá los enlaces a la estructura de enlaces personalizados del tipo de publicación:
$yearly_archive = wp_get_archives(array( 'type' => 'yearly', 'post_type' => '<your post type name>', 'echo' => '0') );
$blog_url = get_bloginfo('url');
echo str_replace(($blog_url . '/date'), ($blog_url . '<your post type slug>'),$yearly_archive);
No puedo agregar a la publicación de takien, así que esto es lo que terminé por hacer:
functions.php
add_action('init', 'my_year_archive_rewrites');
function my_year_archive_rewrites() {
add_rewrite_rule('resource/news/([0-9]{4})/page/?([0-9]{1,})/?', 'index.php?post_type=news&year=$matches[1]&paged=$matches[2]', 'top');
add_rewrite_rule('resource/news/([0-9]{4})/?', 'index.php?post_type=news&year=$matches[1]', 'top');
}
add_filter('getarchives_where', 'my_custom_post_type_archive_where', 10, 2);
function my_custom_post_type_archive_where($where,$args){
$post_type = isset($args['post_type']) ? $args['post_type'] : 'post';
return "WHERE post_type = '$post_type' AND post_status = 'publish'";
}
add_filter('year_link', 'my_year_link');
function my_year_link($link) {
global $wp_rewrite;
if(true) { // however you determine what archive you want
$link = str_replace($wp_rewrite->front, '/resource/news/', $link);
}
return $link;
}
Llamando a wp_get_archives ()
wp_get_archives(array('post_type'=>'news', 'type'=>'yearly'));
Lea otras preguntas en las etiquetas custom-post-types archives custom-post-type-archives date wp-get-archives