Post individual personalizado por categoria

2

Estou tentando entender a terminologia dos meandros do WordPress, então peço desculpas.

Estou configurando um site completo utilizando o WordPress e um modelo personalizado, baseando-se no TwentyTen underpinnings.

Estou tentando ter o máximo possível sob o tipo de postagem "post", e as "listas" de nível superior são apenas as páginas de categoria.

Uma categoria é "trabalho"

Eu consegui personalizá-los fazendo arquivos de categoria-work.php e loop-work.php personalizados. Mas como faço para criar um único post personalizado por categoria?

Parece que fazer um single-work.php procuraria por um tipo de post personalizado chamado "trabalho". Existe uma maneira de fazer um clone single.php modificado que é acionado por slug categoria / categoria?

    
por Keefer 15.08.2012 / 16:31

2 respostas

6

Faça o seu single.php o seguinte:

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

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

e faça single-work-cat.php o modelo que você deseja mostrar para postagens de categoria de trabalho único e single-generic.php o que você deseja mostrar em todos os outros casos. Para mais categorias, basta adicionar mais instruções elseif e criar novos modelos individuais.

    
por artparks 15.08.2012 / 17:02
2

Eu percebo que essa é uma pergunta antiga, mas no caso de qualquer outra pessoa encontrar enquanto pesquisa o mesmo tópico, esteja ciente de que você não deve usar declarações de inclusão em seus temas do WordPress. Sempre use get_template_part () ou locate_template () em vez disso.

(veja enlace )

O código a seguir usa filtros do WordPress para realizar a tarefa e procurará automaticamente por modelos para todas e quaisquer categorias:

/**
 * 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 );
}

Existem alguns pontos fracos no código. Primeiro, isso significa que o WordPress realiza locate_template () duas vezes para postagens únicas (uma vez antes dessa função ser executada e uma vez durante). Segundo, não acho que haja uma maneira clara de priorizar quais categorias procurar primeiro. Isso significa que, se sua postagem estiver em várias categorias com modelos únicos de postagem, você não poderá escolher qual modelo será usado.

    
por Michael Dozark 13.07.2013 / 21:35