Crie um loop de grade de conteúdo e trecho com paginação e opções para # de postagens

4

O que eu gostaria de fazer: no index.php, um loop que mostra um número selecionável de postagens completas usando the_content e, em seguida, mostra um número selecionável (o número de postagens pode ser codificado na função) de trechos (usando the_excerpt ) em um padrão de grade 2 trechos de largura. Qualquer página de posts paged usa apenas a exibição da grade de trechos. Assim:

Esse loop seria ideal se lidasse com texto e trechos e conteúdo em vez de imagens: enlace

Ainda outra atualização 11/03/12:

Obrigado ao kaiser por isso. Um último bug: a segunda página mostra os 2 posts completos e trechos ao invés de todos os trechos.

    global $wp_query;
    if ( have_posts() )
    {
        while( have_posts() )
        {
            the_post();

            // Add Class: "post-number-X"
            $current_post = "post-number-{$wp_query->current_post}";

            // Add Class: "home" (for index page) or "post-number-X-of-total";
            $current_in_total = 'home';
            if ( is_paged() )
            {

                $current_in_total  = "post-number-";
                $current_in_total .= get_query_var( 'paged' ) * get_query_var( 'posts_per_page' ) - $wp_query->current_post;
                $current_in_total .= "-of-total";
            }

            // Add Class: Even/Odd
            $even_odd = ( 0 === $GLOBALS['wp_query']->current_post % 2 ) ? ' even' : ' odd';
            // Avoid even/odd class for excerpts (everything after the 2nd post)
            2 > $wp_query->current_post AND $even_odd = '';

            // MarkUp: Uses 'post_class()' to add classes
            ?>
     <article <?php post_class( "{$current_post}{$even_odd} {$current_in_total}" ); ?>>
                <h3><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h3>
                <?php 
                // Home/Index/Front-Page/Archive first page
                if ( ! is_paged() )
                {
                    // Display the_content(); for the first 2 posts, then the_excerpt();
                    2<= $wp_query->current_post ? the_excerpt() : the_content();
                }
                // Paged archives (starts at second page)
                else
                {
                    the_excerpt();
                }
                ?>
            </article>
            <?php
        } 

// Add navigation ...
    twentyeleven_content_nav( 'nav-below' );

    } // endif;
    unset( $current_post, $current_in_total, $even_odd );
    
por markratledge 29.10.2012 / 06:11

2 respostas

2

As propriedades $wp_query permitem "alot"

Na verdade, não é tão difícil usar partes do objeto $wp_query como current_post .

Aqui você pode ver alguns exemplos que fazem uso complicado de coisas como is_paged() , $wp_query->current_post e $wp_query->posts_per_page . Você pode alternar o MarkUp dependendo se você está na primeira ou na última página, se você tiver os três primeiros posts (ou qualquer número) ou posteriores. Também é bom usar a função post_class() , que também possui um filtro chamado post_class() - ela possui três argumentos: $classes (classes principais padrão do WP), $class (uma matriz de classes que você definiu ao chamar veja o exemplo abaixo) e o $post_ID .

global $wp_query;
if ( have_posts() )
{

    // Add navigation ... TOP
    twentyeleven_content_nav( 'nav-above' );

    while( have_posts() )
    {
        the_post();

        // Add Class: "post-number-X"
        $current_post = "post-number-{$wp_query->current_post}";

        // Add Class: "home" (for index page) or "post-number-X-of-total";
        $current_in_total = 'home';
        if ( is_paged() )
        {

            $current_in_total  = "post-number-";
            $current_in_total .= get_query_var( 'paged' ) * get_query_var( 'posts_per_page' ) - $wp_query->current_post;
            $current_in_total .= "-of-total";
        }

        // Add Class: Even/Odd
        $even_odd = ( 0 === $GLOBALS['wp_query']->current_post % 2 ) ? ' even' : ' odd';
        // Avoid even/odd class for excerpts (everything after the 3rd post)
        3 > $wp_query->current_post AND $even_odd = '';

        // MarkUp: Uses 'post_class()' to add classes
        ?>
        <article <?php post_class( "{$current_post}{$even_odd} {$current_in_total}" ); ?>>
            <h3><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h3>
            <?php 
            // Home/Index/Front-Page/Archive first page
            if ( ! is_paged() )
            {
                // Display the_content(); for the first 3 posts, then the_excerpt();
                3 <= $wp_query->current_post ? the_excerpt() : the_content();
            }
            // Paged archives (starts at second page)
            else
            {
                the_excerpt();
            }
            ?>
        </article>
        <?php
    }

    // Add navigation ... BELOW
    twentyeleven_content_nav( 'nav-below' );

} // endif;
unset( $current_post, $current_in_total, $even_odd );
    
por kaiser 29.10.2012 / 12:06
0

Faça as seguintes alterações. Não testado:

global $wp_query, $paged;

parse_str( $query_string, $query_args );   


// Home/Index/Front-Page/Archive first page

if ( 0 == $paged )

{
    // Display the_content(); for the first 2 posts, then the_excerpt();
    2<= $wp_query->current_post ? the_excerpt() : the_content();
}
// Paged archives (starts at second page)
else
{
    the_excerpt();
}
?>
    
por Marco 08.11.2012 / 14:33