web-dev-qa-db-ja.com

ページングと投稿数のオプションを使用して、コンテンツと抜粋のグリッドループを作成する

やりたいこと:index.phpでは、the_contentを使用して選択可能な数の完全な投稿を表示し、その下に選択可能な数(the_excerptを使用して関数内で投稿の数をハードコードすることができます)を表示するループ)グリッドパターンで2の抜粋が広くなります。投稿のpagedページは、抜粋のグリッド表示のみを使用します。このような:

index post display

paged post display

このループは、画像ではなくテキストと抜粋とコンテンツを処理する場合に理想的です。 http://www.billerickson.net/a-better-and-easier-grid-loop/

さらに別のアップデート11/03/12:

Kaiserに感謝します。最後の1つのバグ:2ページ目には、すべての抜粋ではなく2つの完全な投稿と抜粋が表示されています。

    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

$wp_queryプロパティは"alot"を許可します

実際、$wp_queryのようなcurrent_postオブジェクトの一部を使用すれば、それほど難しくありません。

ここでは、is_paged()$wp_query->current_post、および$wp_query->posts_per_pageなどのトリッキーな使用例をいくつか示しています。最初のページかそれ以降のページか、最初の3つ(または任意の数)の投稿を受け取ったかに応じて、MarkUpを切り替えることができます。また、post_class()という名前のフィルターもあるpost_class()関数を使用するのも良いことです。3つの引数があります。$classes(デフォルトWPコアクラス)、$class(呼び出し中に定義したクラスの配列-以下の例を参照)および$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

以下のように変更してください。未テスト:

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