Как в цикле вывести свой блок wordpress?
Есть такой цикл вывода новостей
<section class="main__wall"> <?php if (have_posts()) : while (have_posts()) : the_post(); get_template_part('partials/content', 'post'); endwhile; else : get_template_part('partials/message'); endif; ?> </section> |
<section class="main__wall"> <?php if (have_posts()) : while (have_posts()) : the_post(); get_template_part('partials/content', 'post'); endwhile; else : get_template_part('partials/message'); endif; ?> </section>
Как мне после 2 поста вывести
<?php get_template_part('partials/ask-form'); ?>
Где будет форма обратной связи.
Дополнительно:
Ответы:
Наверно как-то так +-
<section class="main__wall"> <?php $curr = 0; if (have_posts()) : while (have_posts()) : the_post(); get_template_part('partials/content', 'post'); $curr++; $curr == 2 ? get_template_part('partials/ask-form') : ''; endwhile; else : get_template_part('partials/message'); endif; ?> </section> |
<section class="main__wall"> <?php $curr = 0; if (have_posts()) : while (have_posts()) : the_post(); get_template_part('partials/content', 'post'); $curr++; $curr == 2 ? get_template_part('partials/ask-form') : ''; endwhile; else : get_template_part('partials/message'); endif; ?> </section>
- После третьего вроде выведет
- да, поправил
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос
Вам нужен счётчик внутри цикла. После вывода каждой записи увеличиваете счётчик и после второй записи подключаете свой шаблон формы. Главное — делать это внутри
while, сразу послеget_template_part('partials/content', 'post').<section class="main__wall"> <?php $count = 0; if (have_posts()) : while (have_posts()) : the_post(); get_template_part('partials/content', 'post'); $count++; if ($count === 2) { get_template_part('partials/ask-form'); } endwhile; else : get_template_part('partials/message'); endif; ?> </section>
Если нужно вывести блок после третьего поста, меняете условие на
$count === 3. Если нужно выводить форму каждые N записей, можно использовать остаток от деления:if ($count % 5 === 0) { get_template_part('partials/ask-form'); }
Если форма должна выводиться только на первой странице архива, добавьте проверку:
$paged = max(1, get_query_var('paged')); if ($paged === 1 && $count === 2) { get_template_part('partials/ask-form'); }
Так Вы не получите одинаковый блок на каждой странице пагинации после второго поста. Для SEO и UX это обычно лучше.
Итог: счётчик — нормальное решение. Не нужно делать второй запрос к базе или пытаться вставлять блок через JS. Подключайте template part прямо в цикле в нужный момент.
Если блок содержит форму, убедитесь, что на странице не появляется несколько одинаковых ID. Форма обратной связи, капча или JS-валидация часто используют уникальные идентификаторы. Если Вы выводите форму несколько раз на одной странице, лучше передать в template part аргумент с номером блока и использовать его в ID полей.
Если архив подгружается через AJAX или бесконечную прокрутку, серверный счётчик всё равно должен работать на стороне шаблона, который отдаёт карточки. В этом случае важно передавать номер страницы и учитывать смещение: иначе форма будет появляться после второго поста в каждой подгруженной пачке. Для обычной пагинации достаточно проверки
$paged === 1, для AJAX лучше передать флаг “показывать форму” явно.