Как в цикле вывести свой блок wordpress?

Ссылка скопирована
1 ответ

Есть такой цикл вывода новостей

<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'); ?>

Где будет форма обратной связи.

Дополнительно:

Ответы:

Наверно как-то так +-

&lt;section class="main__wall"&gt;     &lt;?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;     ?&gt; &lt;/section&gt;

&lt;section class="main__wall"&gt; &lt;?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; ?&gt; &lt;/section&gt;

  • После третьего вроде выведет
  • да, поправил
Нужно решить такую задачу?

Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

Заказать помощь
Лучший ответ
1
Максим Павлов Ответ

Вам нужен счётчик внутри цикла. После вывода каждой записи увеличиваете счётчик и после второй записи подключаете свой шаблон формы. Главное — делать это внутри while, сразу после get_template_part('partials/content', 'post').

&lt;section class="main__wall"&gt;
    &lt;?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;
    ?&gt;
&lt;/section&gt;

&lt;section class="main__wall"&gt; &lt;?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; ?&gt; &lt;/section&gt;

Если нужно вывести блок после третьего поста, меняете условие на $count === 3. Если нужно выводить форму каждые N записей, можно использовать остаток от деления:

if ($count % 5 === 0) {
    get_template_part('partials/ask-form');
}

if ($count % 5 === 0) { get_template_part('partials/ask-form'); }

Если форма должна выводиться только на первой странице архива, добавьте проверку:

$paged = max(1, get_query_var('paged'));
 
if ($paged === 1 &amp;&amp; $count === 2) {
    get_template_part('partials/ask-form');
}

$paged = max(1, get_query_var('paged')); if ($paged === 1 &amp;&amp; $count === 2) { get_template_part('partials/ask-form'); }

Так Вы не получите одинаковый блок на каждой странице пагинации после второго поста. Для SEO и UX это обычно лучше.

Итог: счётчик — нормальное решение. Не нужно делать второй запрос к базе или пытаться вставлять блок через JS. Подключайте template part прямо в цикле в нужный момент.

Если блок содержит форму, убедитесь, что на странице не появляется несколько одинаковых ID. Форма обратной связи, капча или JS-валидация часто используют уникальные идентификаторы. Если Вы выводите форму несколько раз на одной странице, лучше передать в template part аргумент с номером блока и использовать его в ID полей.

Если архив подгружается через AJAX или бесконечную прокрутку, серверный счётчик всё равно должен работать на стороне шаблона, который отдаёт карточки. В этом случае важно передавать номер страницы и учитывать смещение: иначе форма будет появляться после второго поста в каждой подгруженной пачке. Для обычной пагинации достаточно проверки $paged === 1, для AJAX лучше передать флаг “показывать форму” явно.

Другие ответы (0)

Пока нет других ответов. Будьте первым, кто поможет автору.

Ответить на вопрос

комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Вам также может быть интересно