Personalizar Entrada Única por Categoría en WordPress

15 ago 2012, 17:31:25
Vistas: 19.5K
Votos: 6

Estoy intentando familiarizarme con la terminología y los detalles de WordPress, así que disculpen mis preguntas.

Estoy configurando un sitio completo utilizando WordPress y una plantilla personalizada, basándome en los fundamentos de TwentyTen.

Estoy tratando de tener la mayor cantidad posible de contenido bajo el tipo de entrada "post", y que las páginas de "lista" de nivel superior sean simplemente las páginas de categoría.

Una categoría es "trabajo"

He podido personalizar esas páginas creando archivos personalizados category-trabajo.php y loop-trabajo.php. ¿Pero cómo puedo crear una entrada única (single) personalizada por categoría?

Parece que crear un single-trabajo.php buscaría un tipo de entrada personalizado llamado "trabajo". ¿Hay alguna manera de hacer un clon modificado de single.php que se active por categoría/slug de categoría?

0
Todas las respuestas a la pregunta 2
0
11

Configura tu single.php de la siguiente manera:

<?php
$post = $wp_query->post;

if ( in_category( 'work' ) ) {
  include( TEMPLATEPATH.'/single-work-cat.php' );
} 
else {
  include( TEMPLATEPATH.'/single-generic.php' );
}
?>

y haz que single-work-cat.php sea la plantilla que deseas mostrar para publicaciones de la categoría 'work', y single-generic.php la que deseas mostrar en todos los demás casos. Para más categorías simplemente añade más sentencias elseif y crea nuevas plantillas single.

15 ago 2012 18:02:05
0

Me doy cuenta de que esta es una pregunta antigua, pero en caso de que alguien más la encuentre mientras busca el mismo tema, tenga en cuenta que no debe usar declaraciones include en sus temas de WordPress. Siempre use get_template_part() o locate_template() en su lugar.

(ver http://make.wordpress.org/themes/guidelines/guidelines-theme-check/)

El siguiente código utiliza filtros de WordPress para realizar la tarea y buscará automáticamente plantillas para todas las categorías:

/**
 * Reemplace "themeslug" con el slug único de su tema
 *
 * @see http://codex.wordpress.org/Theme_Review#Guidelines
 */
add_filter( 'single_template', 'themeslug_single_template' );

/**
 * Agrega consideraciones de categoría a las plantillas que WordPress usa para publicaciones individuales
 *
 * @global obj $post El objeto de publicación predeterminado de WordPress. Se usa para tener un ID para get_post_type()
 * @param string $template La plantilla actualmente ubicada desde get_single_template()
 * @return string El nuevo resultado de locate_template()
 */
function themeslug_single_template( $template ) {
    global $post;

    $categories = get_the_category();

    if ( ! $categories )
        return $template; // no es necesario continuar si no hay categorías

    $post_type = get_post_type( $post->ID );

    $templates = array();

    foreach ( $categories as $category ) {

        $templates[] = "single-{$post_type}-{$category->slug}.php";

        $templates[] = "single-{$post_type}-{$category->term_id}.php";
    }

    // recuerda las plantillas predeterminadas

    $templates[] = "single-{$post_type}.php";

    $templates[] = 'single.php';

    $templates[] = 'index.php';

    /**
     * Permite que WordPress determine si las plantillas existen o no.
     *
     * @see http://codex.wordpress.org/Function_Reference/locate_template
     */
    return locate_template( $templates );
}

Hay un par de puntos débiles en el código. Primero, significa que WordPress ejecuta locate_template() dos veces para publicaciones individuales (una vez antes de que se ejecute esta función y una vez durante). En segundo lugar, no creo que haya una forma limpia de priorizar qué categorías buscar primero. Esto significa que si su publicación está en múltiples categorías que tienen plantillas de publicación únicas, no podrá elegir qué plantilla se utiliza.

13 jul 2013 22:35:16