Tipos de Post Personalizados en Páginas de Categorías

22 feb 2011, 19:47:27
Vistas: 43.2K
Votos: 6

Estoy trabajando con un tipo de post personalizado que utiliza las categorías normales de WordPress.
Puedo modificar mi plantilla de categoría para mostrar mis tipos de post personalizados exactamente como quiero.

El problema es que, una vez que hago esto, las entradas normales del blog también se ven afectadas.

Por supuesto, puedo limitar las entradas normales del blog o el tipo de post a una sola categoría y crear un category-ID.php para trabajar solo con esa categoría.

Pero me pregunto si existe una solución más flexible.
¿Es posible crear plantillas de categoría que sean específicas para tipos de post, es decir, una para mostrar posts normales, otra para mostrar tipos de post personalizados, etc?

¿Es esto posible? Si no lo es, ¿cuál es la mejor manera de solucionarlo?

1
Comentarios

Tengo una solución. Tu plantilla de taxonomía personalizada se llamaría taxonomy-{taxonomy}.php. Por ejemplo, si tu taxonomía se llamara "cooking-categories", nombrarías tu archivo taxonomy-cooking-categories.php.

Kiran Kumar Kadavakollu Kiran Kumar Kadavakollu
4 abr 2019 11:34:48
Todas las respuestas a la pregunta 4
0

Para tipos de entradas personalizadas con taxonomías personalizadas, puedes crear una plantilla para esa taxonomía. Tu plantilla de taxonomía personalizada se nombraría taxonomy-{taxonomía}.php. Por ejemplo, si tu taxonomía se llamara "categorias-cocina", nombrarías tu archivo taxonomy-categorias-cocina.php.

Puedes encontrar más información sobre archivos de plantillas para archivos de taxonomías especiales en el codex aquí: http://codex.wordpress.org/Template_Hierarchy#Custom_Taxonomies_display

22 feb 2011 20:13:13
0

Puedes basarte en el tipo de publicación de la siguiente manera: digamos que tienes category.php para publicaciones regulares y your-custom-type-category.php para tus publicaciones de tipo personalizado, entonces solo agrega esto a tu category.php regular al principio.

<?php if (have_posts()){
    the_post();
    if( 'your_custom_type' == get_post_type( $post ) ) {
        rewind_posts();
        get_template_part('your-custom-type-category');
        exit();
    }
    rewind_posts();
}
?>

y ahora cuando se solicite una categoría, verificará si es de tu tipo de publicación personalizado y si lo encuentra usará tu your-custom-type-category.php como plantilla, mientras que todas las publicaciones regulares se mostrarán usando category.php sin cambios.

Espero que esto ayude

22 feb 2011 20:36:29
0

Hola @Kelvin Jayanoris:

¿Hay alguna razón por la que no puedas simplemente probar el valor de $post->post_type con una declaración if..elseif dentro de tu Loop, así:

<?php if ($post->post_type=='foo'): ?>

   Coloca aquí el HTML para el tipo de post 'foo'...

<?php else if ($post->post_type=='bar'): ?>

   Coloca aquí el HTML para el tipo de post 'bar'...

<?php else if ($post->post_type=='post'): ?>

   Coloca aquí el HTML para el tipo de post 'post'...

<?php endif; ?>

¿O hay alguna razón por la que no puedas crear tu propia jerarquía de nombres de plantillas en forma de archivos como post-foo.php, post-foo.php, post-post.php, también dentro de tu Loop? Este fragmento de código podría hacerlo:

<?php include("post-{$post->post_type}.php"); ?>
23 feb 2011 06:51:42
1
-1

Una solución más sencilla si no quieres crear archivos nuevos, o pasar por el problema de estropear tus consultas, es usar esto en tu functions.php:

function sql_where_clause($sql) {
  if (is_category()) {
    $sql = str_replace("cms_posts.post_type = 'post'", "cms_posts.post_type='post' OR cms_posts.post_type = 'news' OR cms_posts.post_type='event'", $sql); 
  }
  return $sql;
}
add_filter('posts_where', 'sql_where_clause');

Por supuesto, necesitarás modificarlo para que incluya tus tipos de posts personalizados. Hice esto para que mi category.php respondiera a todos los tipos de posts personalizados que quería como si normalmente debieran estar ahí. Ahorra muchos problemas.

Edición: Ten cuidado con la versión de WP en la que uses esto. Parece que versiones antiguas de WP usaban wp_posts en lugar de cms_posts, así que verifica qué nombres de tablas estás buscando usar o tendrás resultados extraños (básicamente, no se mostrará nada)

13 abr 2011 21:18:37
Comentarios

WordPress, hasta donde alcanza mi memoria, nunca ha utilizado cms_ por defecto y siempre ha usado wp_, aunque ese prefijo puede cambiarse sitio por sitio. Lo correcto es usar $wpdb->posts en lugar de adivinar cualquier prefijo en particular.

s_ha_dum s_ha_dum
5 jun 2013 15:53:21