¿Tipo de mensaje personalizado Archives por año y mes?


Respuestas:


17

Sí tu puedes. Todo lo que necesita es hacer un filtro para wp_get_archives();que acepte el post_typepará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>';

3
¿Intentaste esta solución? Recupera correctamente la lista de meses con una publicación de su CPT y la cantidad de publicaciones, pero los enlaces son inútiles. Hacer clic en ellos lo lleva al mes para todo el sitio, no para el CPT.
jerclarke

Después de investigar un poco (ver la respuesta de Tom Nowell a continuación), renuncié a los archivos mensuales para tipos de publicaciones personalizadas. En cambio, utilicé una categoría de publicación y cambié mi estructura de enlaces permanentes a /%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.
Kevin C.

Pregunta sobre esto. Esto crea URL como: mysite.com/2013/04pero esto lleva a un 404. El tipo de publicación personalizada está disponible en: mysite.com/catslo que me hace pensar que mysite.com/cats/2013/04debería ser el enlace, pero esto también se resuelve en un 404. ¿Cómo funciona el enlace del archivo?
gaoshan88

2
Aún mejor, finalmente hay un complemento para lidiar con esta funcionalidad que falta en WordPress. Fue creado por un colaborador principal que intentaba solucionar este problema en el núcleo. El complemento se proporciona para ayudarnos hasta que el problema se aborde correctamente en el núcleo. wordpress.org/plugins/archives-for-custom-post-types
Trevor

6

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.


Parece un poco extraño que solo lleguen tan lejos con esta funcionalidad. ¿Me puede dar un ejemplo de cómo se deben usar las publicaciones personalizadas?
Dan Lee

Las publicaciones personalizadas deben usarse para cualquier cosa que no esté cubierta por el alcance de las páginas y publicaciones de blog (o publicaciones de blog con un nombre diferente pero que funcionen de la misma manera, por ejemplo, artículos / noticias / diario / etc.) Entre los ejemplos de usos correctos de publicaciones personalizadas se incluyen : eventos, menús, ubicaciones, formularios, registros, etc.
Tom J Nowell

Las publicaciones personalizadas son básicamente el medio para producir aplicaciones web, no son los medios para duplicar el menú de publicaciones en el back-end para una edición más fácil (y tal uso haría que Wordpress sea mucho más lento y sea más una tarea de lo que crees)
Tom J Nowell

1
UUUUUgh. Esta es la respuesta correcta a la pregunta trágicamente. Sin embargo, no puedo creer que la explicación anterior se base en "no deberíamos tener URL de fecha para CPT", sin embargo, es casi definitivamente "Las URL de fecha para CPT son demasiado complicadas" lo que está impulsando la decisión real de no implementar. CLARAMENTE hay casos en los que la gente querría archivos de fechas para un tipo de publicación personalizada, no puede hacer que ese deseo obvio desaparezca señalando los formatos de publicación.
jerclarke

1
Tengo que estar en total desacuerdo. Los tipos de publicaciones personalizadas están destinados a usarse para lo que usted quiera que se usen, en ningún lugar del Codex dice que sean para "aplicaciones web". Además, es muy posible que necesite una sección de "noticias" que tenga su propia taxonomía personalizada y desee archivos para ellas. O incluso el tipo de "eventos" sugerido, que estoy de acuerdo es un uso perfecto para los CPT, pero de nuevo esos fácilmente podrían necesitar archivos basados ​​en fechas.
Trevor

5

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_cptfunciona igual que el estándar, wp_get_archivespor 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.


2

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);

1

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'));

Ver la suya es tu primera respuesta. Solo un consejo al responder preguntas, no solo agregue código o enlaces. Aunque su código podría funcionar, siempre es bueno saber qué hace su código y por qué debería funcionar. De lo contrario, su respuesta está bien formateada. +1 por eso
Pieter Goosen
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.