Cómo obtener el nombre de la categoría desde la URL y pasarlo a una plantilla
Estoy usando la siguiente plantilla de página para mostrar los posts de una sola categoría y planeo formatear el primer post diferente a los demás. Esto funciona como quiero pero tengo el category_name hard coded en la plantilla. Quiero usar esta plantilla para varias categorías diferentes y me gustaría aprender cómo pasar el category_name a la plantilla desde un enlace.
Por ejemplo, el enlace a la página deseada usando la plantilla especial es http://wildcatweb.net/5th/ y '5th' es también el category_name. ¿Cómo le digo a la plantilla que obtenga el category_name desde la URL y lo use en la plantilla?
<?php
/*
Template Name: pageAssignments
*/ ?>
<?php get_header(); ?>
<div class="small-12 large-8 columns" id="content" role="main">
<header>
<h1 class="entry-title"><?php the_title(); ?></h1>
</header>
<!-- mostrar último post COMPLETO -->
<?php query_posts('showposts=1&category_name=5th'); ?>
<?php if (have_posts()) : while (have_posts()) : the_post(); ?>
<div class="lastest-post">
<h2 class="pagetitle"><?php the_title(); ?></h2>
<?php the_content(); ?>
</div><!--cerrar .latest-post -->
<?php endwhile; endif; ?><!-- fin último post -->
<!-- mostrar extractos de posts antiguos -->
<?php query_posts('showposts=5&offset=1&category_name=5th'); ?>
<?php if (have_posts()) : while (have_posts()) : the_post(); ?>
<div class="older-post">
<h3 class="pagetitle"><a href="<?php the_permalink() ?>" rel="bookmark" title="<?php the_title(); ?>"><?php the_title(); ?></a></h3>
<?php the_excerpt(); ?>
</div><!--.older-post -->
<?php endwhile; endif; ?><!-- fin entrada pasada -->
</div>
<?php get_sidebar(); ?>
<?php get_footer(); ?>

En lugar de crear páginas y asignar una plantilla, utilizaría el filtro category_template
para cargar una plantilla específica para todas esas categorías particulares. En este ejemplo uso un array definido manualmente, pero podría adaptarse para cargar una opción que almacene los slugs de categoría a los que quieres aplicar la plantilla.
function wpa_category_template( $templates = '' ){
$special_categories = array(
'one',
'another',
'more'
);
$this_category = get_queried_object();
if( in_array( $this_category->slug, $special_categories ) ){
$templates = locate_template( array( 'special_category.php', $templates ), false );
}
return $templates;
}
add_filter( 'category_template', 'wpa_category_template' );
Así ya no tendrás que hacer una consulta para estos posts en la plantilla, ya que los posts ya están en la consulta principal. (como nota adicional, nunca uses query_posts
).
Dentro de la plantilla puedes usar single_cat_title
para mostrar el nombre de la categoría.
Tampoco necesitas usar dos consultas y bucles para dar un estilo diferente al primer post, simplemente verifica la variable current_post
dentro del bucle para saber qué post estás mostrando.
if (have_posts()):
while (have_posts()):
the_post();
if( 0 == $wp_query->current_post ):
echo 'este es el primer post';
else:
echo 'este es el post > 1';
endif;
endwhile;
endif;

WordPress utilizará el primer archivo de plantilla que encuentre en el directorio de tu Tema actual de la siguiente lista:
- category-slug.php
- category-ID.php
- category.php
- archive.php
- index.php
Fuente http://codex.wordpress.org/Category_Templates
Puedes añadir el nombre de la categoría insertando este código en la plantilla antes del Loop (Bucle):
<p>Categoría: <?php single_cat_title(); ?></p>

No quiero que esta plantilla se aplique a todas las páginas de categoría, solo a las 5-6 que necesitan un formato especial. Por eso estoy creando una plantilla diferente. Aparte de duplicar la plantilla para cada ID de categoría o slug de categoría, ¿tienes alguna idea de cómo podría pasar el nombre de la categoría a la plantilla? Gracias por tu ayuda.

Si deseas utilizar esta plantilla para múltiples categorías, probablemente la hayas nombrado como category.php
?
Para obtener el nombre del Término que se está mostrando actualmente, usa esto (antes de entrar en El Loop) -
$taxonomy_slug = $wp_query->tax_query->queries[0]['taxonomy'];
$term_slug = $wp_query->tax_query->queries[0]['terms'][0];
$term = get_term_by('slug', $term_slug, $taxonomy_slug);
$term_name = $term->name;
Y luego reemplaza -
<h1 class="entry-title"><?php the_title(); ?></h1>
Con -
<h1 class="entry-title"><?php echo $term_name ?></h1>

No nombré el archivo category.php porque solo quiero usarlo para unas pocas categorías, ya que planeo agregar algún formato especial solo para 5-6 páginas. Gracias por mostrarme cómo hacer el echo de la consulta. Creo que será útil para una variedad de cosas. Lo revisaré más cuando tenga la oportunidad más tarde hoy.
