web-dev-qa-db-fra.com

Créez une boucle de grille de contenu et d'extrait avec pagination et options pour le nombre de publications.

Ce que j'aimerais faire: sur index.php, une boucle qui affiche un nombre sélectionnable d'articles complets en utilisant the_content, puis un nombre sélectionnable ci-dessous qui affiche un nombre sélectionnable (le nombre d'articles en lecture peut être codé en dur dans la fonction) (en utilisant the_excerpt ) en forme de grille 2 extraits de large. Toute page paged d'articles utilise uniquement l'affichage d'extraits sur la grille. Comme ça:

index post display

paged post display

Cette boucle serait idéale si elle gérait du texte, des extraits et du contenu plutôt que des images: http://www.billerickson.net/a-better-and-eas-rer-grid-loop/

Encore une autre mise à jour 11/03/12:

Merci à Kaiser pour cela. Un dernier bug: la deuxième page montre les 2 posts complets et extraits plutôt que tous les extraits.

    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 );
4
markratledge

Les propriétés $wp_query permettent "beaucoup"

En réalité, ce n'est pas si difficile si vous utilisez des parties de l'objet $wp_query comme current_post.

Vous pouvez voir ici quelques exemples d'utilisation délicate de fonctions telles que is_paged(), $wp_query->current_post et $wp_query->posts_per_page. Vous pouvez basculer MarkUp selon que vous vous trouvez sur la première ou les dernières pages, si vous avez les trois premières publications (ou un nombre quelconque) ou des publications ultérieures. Il est également agréable d’utiliser la fonction post_class(), qui possède également un filtre nommé post_class(), composé de trois arguments: Le $classes (classes par défaut WP), le $class (un tableau de classes que vous avez défini lors de son appel - voir l'exemple ci-dessous) et le $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 );
2
kaiser

Apportez les modifications suivantes. Non testé:

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();
}
?>
0
Marco