Cree un bucle de cuadrícula de contenido y extracto con paginación y opciones para el número de publicaciones

4

Lo que me gustaría hacer: en index.php, un bucle que muestra un número seleccionable de mensajes completos usando the_content y luego a continuación que muestra un número seleccionable (el número de mensajes se puede codificar en la función) de extractos (usando the_excerpt ) en un patrón de cuadrícula 2 extractos de ancho. Cualquier página paged de publicaciones solo usa la visualización de la cuadrícula de extractos. Así:

Este bucle sería ideal si manejara texto, extractos y contenido en lugar de imágenes: enlace

Otra actualización más 11/03/12:

Gracias a Kaiser por esto. Un último error: la segunda página muestra los 2 mensajes completos y extractos en lugar de todos los extractos.

    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 );
    
pregunta markratledge 29.10.2012 - 06:11

2 respuestas

2

Las propiedades $wp_query permiten "mucho"

En realidad no es tan difícil si usas partes del objeto $wp_query como current_post .

Aquí puede ver algunos ejemplos que hacen un uso difícil de cosas como is_paged() , $wp_query->current_post y $wp_query->posts_per_page . Puedes cambiar MarkUp dependiendo de si estás en la primera página o en las siguientes, si obtuviste las tres primeras (o cualquier número) o publicaciones posteriores. También es bueno usar la función post_class() , que también tiene un filtro llamado post_class() ; tiene tres argumentos: el $classes (clases centrales predeterminadas de WP), el $class (una matriz de clases que definió mientras llamaba es - vea el ejemplo a continuación) y el $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 );
    
respondido por el kaiser 29.10.2012 - 12:06
0

Haz los siguientes cambios. Sin probar:

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();
}
?>
    
respondido por el Marco 08.11.2012 - 14:33

Lea otras preguntas en las etiquetas