У меня есть цикл while в WordPress и я хочу добавить изображение после каждого десятого поста. Только я хочу начать это после 5-го поста.

Я попробовал что-то подобное, но не смог настроить его так, как я описал выше.

<?php while ( have_posts() ): the_post();
if($i % 5 == 0) 
    echo '<img src="/image.gif">';
    ++$i; 
?>

Как я могу заставить его начать после 5-го поста и после этого каждый 10-й пост?

0
user2812779 21 Авг 2018 в 18:52

3 ответа

Лучший ответ

Начните счетчик с 6

<?php 
    $i = 6;  // start i at 6

    while ( have_posts() ): the_post();
        if($i % 10 == 0) 
            echo '<img src="/image.gif">';
        ++$i; 
    }
?>

Макетированный пример

<?php 
    $i = 6;  // start i at 6

    while ( $i < 31 ) {
        if($i % 10 == 0) { 
            echo "info $i" . PHP_EOL;
            echo '<img src="/image.gif">' . PHP_EOL;
        } else {
            echo "info $i" . PHP_EOL;
        }
        ++$i; 
    }
?>

Полученные результаты

info 6
info 7
info 8
info 9
info 10
<img src="/image.gif">
info 11
info 12
info 13
info 14
info 15
info 16
info 17
info 18
info 19
info 20
<img src="/image.gif">
info 21
info 22
info 23
info 24
info 25
info 26
info 27
info 28
info 29
info 30
<img src="/image.gif">
3
RiggsFolly 21 Авг 2018 в 16:27

Предполагая, что $i изначально равен 0, пятый пост будет иметь $i равный 4. Поэтому мы пропускаем 4 (пятый пост), а затем получаем каждые 10 после (заканчивая 4):

while ( have_posts() ): the_post();
    if(4 < $i) 
        if(4 == substr($i, -1)) 
            echo '<img data-count="'.$i.'" src="/image.gif">'."\n";                
    $i++;    

Результат:

<img data-count="14" src="/image.gif">
<img data-count="24" src="/image.gif">
<img data-count="34" src="/image.gif">

Вот код, который я использовал для тестирования:

$arr = array_fill(0, 40, 'pic');

for($i = 0; $i < count($arr); $i++)
    if(4 < $i) 
        if(4 == substr($i, -1)) 
            echo '<img data-count="'.$i.'" src="/image.gif">'."\n";
2
Jay Blanchard 21 Авг 2018 в 16:36

Попробуй это:

<?php while ( have_posts() ): the_post();
$i++;
if($i % 10 == 0 and $i > 5) 
    echo '<img src="/image.gif">';
?>

Он проверит, делится ли номер сообщения на 10 без остатка и будет ли номер сообщения больше 5.

Я также перенес ваш итератор перед оператором if, потому что в противном случае номер поста будет начинаться с 0 и будет выводить первое изображение в посте № 6 вместо 5.

0
Zhulkov 21 Авг 2018 в 16:40
51952491