Cómo obtener el nombre de la categoría desde la URL y pasarlo a una plantilla

2 ene 2014, 18:13:29
Vistas: 14.8K
Votos: 1

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(); ?>
0
Todas las respuestas a la pregunta 3
1

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;
2 ene 2014 19:24:22
Comentarios

Milo, gracias por tu ayuda. Tu solución concisa fue perfecta y mucho más simple que mi primer intento. Estoy aprendiendo rápidamente mucho sobre Wordpress y tu respuesta fue exactamente lo que necesitaba. Gracias de nuevo.

user3154076 user3154076
3 ene 2014 20:55:01
2

WordPress utilizará el primer archivo de plantilla que encuentre en el directorio de tu Tema actual de la siguiente lista:

  1. category-slug.php
  2. category-ID.php
  3. category.php
  4. archive.php
  5. 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>
2 ene 2014 18:26:51
Comentarios

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.

user3154076 user3154076
2 ene 2014 18:55:14

Actualicé mi respuesta con el código.

Brad Dalton Brad Dalton
2 ene 2014 19:10:19
1

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>
2 ene 2014 18:26:57
Comentarios

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.

user3154076 user3154076
2 ene 2014 18:49:37