2

私はこのコードを持っており、4 投稿ごとに行を閉じる必要があります。すべての投稿は div 内にあります。いくつか試してみましたが、コードに実装できませんでした。

    <?php
    echo "<div class='row'>";
    global $post;
    $all_events = tribe_get_events(
        array(
            'eventDisplay'=>'upcoming',
            //'posts_per_page'=>10,
    )
    );

    foreach($all_events as $post) {
    setup_postdata($post);
    ?>

    <div class="col-sm-3">
        <span class="event-date"><?php echo tribe_get_start_date($post->ID, true, 'j M'); ?></span>
        <h3><?php the_title(); ?></h3>
        <?php if ( has_post_thumbnail() ) { ?>
            <div class="event-thumb">
                <a href="<?php the_permalink(); ?>"><?php the_post_thumbnail('thumbnail'); ?></a>
            </div>
            <div class="event-excerpt">
                <?php the_excerpt(); ?>
            </div>
        <?php } else { ?>
            <div class="event-content">
                <?php the_content(); ?>
            </div>
        <?php } ?>

    </div>

<?php } //endforeach ?>
<?php wp_reset_query(); ?>
4

3 に答える 3

3

実際、これは CSS で 100% 解決できるので、PHP コード内でカウントや処理を行う必要はありません。

この JSFiddleを見てください。

float: left単一の要素がすべて互いに続きます (左揃え)。 要素clear: leftごとに( ) を指定すると、これがクリアされ、基本的に改行が強制されます。4 * n + 1nth-child(4n+1)

これには注意点が 1 つあります。1 つの行に 4 つのエントリすべてを配置する余地がない場合は、最終的に追加の折り返しが発生します。これはwidth、コンテナに固定を定義することで回避できます。


PHP の簡略化されたコード内バージョンは、書き込まれたフィールドを数え、必要に応じて改行を追加するだけです。

$i = 1;                        // counter
foreach ($events as $event) {  // iterate over all events
    if ($i++ % 4 == 0)         // a % b will be 0 for 4, 8, etc.
        echo '<br />';         // print the line break using whatever HTML you see fit.
    print_event($event);       // print the actual event
}

実際にイベントを出力する前に改行をチェックするかどうかを尋ねられるかもしれません: これは、エントリ数が 4 の倍数の場合に追加の改行を防ぐためです。つまり、末尾に空の行がないようにします。

于 2013-09-29T11:57:10.790 に答える
0

モジュロ演算子が必要です。それはこのように動作します:

$i == 0;
foreach($some_array as $some_value){
    if ($i % $number_to_divide_by == 0) {
        // do something here every nth time
    }
    $i++;
}
于 2013-09-29T11:38:06.177 に答える