¿Cómo mostrar los archivos de un tipo de publicación personalizada por año y mes?
¿Cómo mostrar los archivos de un tipo de publicación personalizada por año y mes?
Respuestas:
Sí tu puedes. Todo lo que necesita es hacer un filtro para wp_get_archives();
que acepte el post_type
parámetro:
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);
Siempre que desee mostrar el archivo por tipo de publicación personalizado, simplemente pase los argumentos post_type:
$args = array(
'post_type' => 'your_custom_post_type',
'type' => 'monthly',
'echo' => 0
);
echo '<ul>'.wp_get_archives($args).'</ul>';
/%category%/%year%/%monthnum%/%postname%/
. Entonces, podría ser posible usar un gancho similar al anterior, para modificar los enlaces para comenzar en /%category%/
lugar de solo la fecha.
mysite.com/2013/04
pero esto lleva a un 404. El tipo de publicación personalizada está disponible en: mysite.com/cats
lo que me hace pensar que mysite.com/cats/2013/04
debería ser el enlace, pero esto también se resuelve en un 404. ¿Cómo funciona el enlace del archivo?
No lo hace, la línea oficial de los desarrolladores de Wordpress era que los tipos de publicaciones personalizadas no estaban destinadas a hacer el trabajo de las publicaciones normales normales, y que si necesita archivos de fechas, etc., entonces no está haciendo las cosas correctamente, y es mejor usar formatos de publicación, etc.
Los tipos de publicaciones personalizadas están destinados a aplicaciones web, etc., mientras que hacer algo como configurar un tipo de publicación personalizada que actúe como un blog secundario o paralelo con un nombre diferente, por ejemplo, blog vs noticias, con las mismas capacidades, no es lo que era la característica destinado y significaría otros problemas técnicos derivados de su implementación.
Si todavía insiste en esto, y el simple uso de taxonomías personalizadas y formatos de publicación no es suficiente, puede agregar reglas de reescritura en functions.php y redirigir archivos año / mes en ciertas URL a la página de archivo de publicación, y luego verificar la configuración personalizada publique la página de archivo si ha especificado variables en sus reglas de reescritura y carga una plantilla diferente, asegurándose en sus reglas de reescritura de establecer los valores apropiados.
EDITAR -> 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 enwp_get_archives()
¡Finalmente hay una solución simple, rápida y fácil para archivos basados en fechas de tipos de publicaciones personalizadas en WordPress! Este ha sido un problema de larga data que se registra aquí en el WP Core Trac.
Todavía no se ha resuelto, pero uno de los contribuyentes a 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 de 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 de poder 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 solucionar esto usando un reemplazo de cadena en la salida de wp_get_archives.
Entonces, dependiendo de cómo estén configurados sus enlaces permanentes, este código solucionará el problema 404 y redirigirá los enlaces a la estructura de enlace permanente de tipo de publicación personalizada:
$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 se puede agregar a la publicación de takien, así que esto es lo que terminé teniendo que hacer:
funciones.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'));