Не могу заставить этот слишком сложный цикл работать правильно - PullRequest
0 голосов
/ 07 апреля 2011

Итак, я редактирую index.php в папке моей темы WP, по сути, я хочу, чтобы это было так:

  • Показать 4 сообщения на первой странице блога.

  • По-разному оформляйте первый (самый новый) пост на первой странице. Украсьте остальные 3 так же.

  • Показать 6 сообщений на каждой странице с нумерацией страниц.

Вот цикл, с которым я работаю, первая страница выглядит нормально, но по какой-то причине на странице 2 и выше она выполняется очень странно и показывает только один пост на каждой дополнительной странице. Кроме того, он будет отображать только название, а не дату или выдержку. Вот мой код:

           <?php 
            if( is_home() && !is_paged() ){
            global $query_string;
            parse_str( $query_string, $args );
            $args['posts_per_page'] = 4;
            query_posts($args);
            if (have_posts()) :
                while (have_posts()) : the_post();
           if (++$counter == 1) { ?>
            <div class="featured_post">
                <p class="date"><?php the_date('M j, Y'); ?></p>
                <a href="<?php the_permalink(); ?>"><h2><?php the_title(); ?></h2></a>
                <a href="<?php the_permalink(); ?>"><?php the_post_thumbnail('featuredblog'); ?></a>
                <?php the_excerpt(); ?>
            </div>
          <?php } else { ?>
            <div class="regular_post">
                <p class="date"><?php the_date('M j, Y'); ?></p>
                <div class="postimage"><a href="<?php the_permalink(); ?>"><?php the_post_thumbnail('regularblog'); ?></a></div>
                <a href="<?php the_permalink(); ?>"><h3><?php
                    // short_title($after, $length)
                    echo short_title('...', 7);
                    ?></h3></a>
                <?php the_excerpt(); ?>
            </div>
          <?php } ?>
        <?php endwhile;
        else :
           // Code for no posts found here
        endif;
        } else {
            global $query_string;
            parse_str( $query_string, $args );
            $args['posts_per_page'] = 6;
            query_posts($args); ?>
            <div class="regular_post">
                <p class="date"><?php the_date('M j, Y'); ?></p>
                <div class="postimage"><a href="<?php the_permalink(); ?>"><?php the_post_thumbnail('regularblog'); ?></a></div>
                <a href="<?php the_permalink(); ?>"><h3><?php the_title(); ?></h3></a>
                <?php the_excerpt(); ?>
            </div>
        <?php } ?>

Может быть, там слишком много операторов if ... else?

Ответы [ 3 ]

1 голос
/ 07 апреля 2011

мое предложение последует за да123, но на самом деле оставлю все это на css.в основном, все ваши сообщения должны быть обернуты в родительский div, и каждый должен классифицироваться одинаково.

<div id="content">
    <div class="post">
        <div class="title"></div>
    </div>
    <div class="post">
        <div class="title"></div>
    </div>
    <div class="post">
        <div class="title"></div>
    </div>
    <div class="post">
        <div class="title"></div>
    </div>
</div>

это то, к чему вы должны разрешить, с большим количеством тегов в сообщении, очевидно.

оттуда, способ по-другому оформить первый пост будет использовать селектор #content > .post:first-child.

также, вероятно, не очень хорошая идея иметь другое количество постов на странице.Я на самом деле никогда не пробовал, но я могу видеть, где пейджинг будет испорчен, и вы, вероятно, никогда не увидите посты 5 или 6. Я думаю, WordPress, вероятно, сказал бы, что с 6 постами на страницу, страница 2всегда следует начинать с поста 7. не положительно, хотя.

1 голос
/ 07 апреля 2011

Используете ли вы какие-то рамки? это довольно плохой темпальный двигатель.

В любом случае, если вам нужно добавить стиль, вы должны оставить работу на CSS.

если вам нужна предельная точность, вы можете просто оставить класс со счетчиком для каждого элемента, который нужно по-разному оформить.

как <div class="Element<?php echo ++$counter; ?>"></div>

и затем вы можете добавить свои стили в CSS

.Element1,.Element2,.Element3 {styles}
.Element4 {other styles}

таким образом вы упростите жизнь с помощью своего php-кода

Имейте в виду, что однажды вам даже не понадобится добавлять счетчик классов. В ближайшем будущем вы можете использовать nth-child css selector http://reference.sitepoint.com/css/pseudoclass-nthchild

Редактировать: черт возьми, я ответил кому-то с 50% AR

0 голосов
/ 07 апреля 2011
<?php if (is_home() && !is_paged() ) {
                global $query_string;
                parse_str( $query_string, $args );
                $args['posts_per_page'] = 4;
                query_posts($args);
                } else { 
                global $query_string;
                parse_str( $query_string, $args );
                $args['posts_per_page'] = 6;
                query_posts($args);
                } ?>
            <?php if ( have_posts() ) while ( have_posts() ) : the_post(); ?>
            <div class="post<?php echo ++$counter; ?>">
                    <?php if ( is_home() && !is_paged() && $counter == 1 ) { ?>
                        do stuff
                    <?php } else { ?>
                        do other stuff
                    <?php } ?> 
            </div>
            <?php endwhile; ?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...