Publicación única personalizada por categoría

2

Estoy tratando de ponerme al día con la terminología de los entresijos de WordPress, así que disculpas.

Estoy configurando un sitio completo utilizando WordPress y una plantilla personalizada, basándome en las bases TwentyTen.

Estoy tratando de tener tanto como sea posible en las páginas de "categoría" Tipo de publicación, y las páginas de "lista" de nivel superior solo deben ser las páginas de categoría.

Una categoría es "trabajo"

He podido personalizarlos haciendo archivos personalizados category-work.php y loop-work.php. Pero, ¿cómo hago para hacer una única publicación personalizada por categoría?

Parece que hacer un solo-work.php buscaría un tipo de publicación personalizado llamado "trabajo". ¿Hay alguna manera de hacer un clon modificado con un solo php que sea activado por la categoría / categoría babosa?

    
pregunta Keefer 15.08.2012 - 16:31

2 respuestas

6

Haz tu single.php lo siguiente:

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

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

y haga que single-work-cat.php sea la plantilla que desea mostrar para publicaciones de categorías de trabajo individuales, y single-generic.php la que desea mostrar en todos los demás casos. Para más categorías, simplemente agregue más sentencias elseif y cree nuevas plantillas individuales.

    
respondido por el artparks 15.08.2012 - 17:02
2

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

(consulte enlace )

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

/**
 * Replace "themeslug" with your theme's unique slug
 *
 * @see http://codex.wordpress.org/Theme_Review#Guidelines
 */
add_filter( 'single_template', 'themeslug_single_template' );

/**
 * Add category considerations to the templates WordPress uses for single posts
 *
 * @global obj $post The default WordPress post object. Used so we have an ID for get_post_type()
 * @param string $template The currently located template from get_single_template()
 * @return string The new locate_template() result
 */
function themeslug_single_template( $template ) {
    global $post;

    $categories = get_the_category();

    if ( ! $categories )
        return $template; // no need to continue if there are no categories

    $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";
    }

    // remember the default templates

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

    $templates[] = 'single.php';

    $templates[] = 'index.php';

    /**
     * Let WordPress figure out if the templates exist or not.
     *
     * @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 realiza 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 manera limpia de priorizar qué categorías buscar primero. Esto significa que si su publicación se encuentra en varias categorías que tienen plantillas únicas de publicación única, no podrá elegir qué plantilla se usa.

    
respondido por el Michael Dozark 13.07.2013 - 21:35

Lea otras preguntas en las etiquetas