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

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

Есть цикл который выводит блоки со ссылками внутри

<?php    $layout         = $settings['layout'];   $prod_categories = get_terms( 'product_cat', $catargs );   foreach ( $prod_categories as $key => $prod_cat ): 	$counter++; 	$bgc++; 	$cat_thumb_id = get_term_meta( $prod_cat->term_id, 'thumbnail_id', true ); 	$cat_thumb = wp_get_attachment_image( $cat_thumb_id, $image_size ); 	$term_link = get_term_link( $prod_cat, 'product_cat' ); 	$thumbnails = $cat_thumb;  	<div class="<?php echo esc_attr( $collumval ); ?>">  		<?php if( '1' === $layout ): ?> 		<div class="1"></div> 		<?php elseif( '3' === $layout ):?> 				<a>ссылка</a> 			 		<?php endif; ?>  	</div> 	<?php 	if( $bgc == 4 ){ $bgc = 0; } 	if( $counter == $limitcount ) { break; } endforeach;

<?php $layout = $settings['layout']; $prod_categories = get_terms( 'product_cat', $catargs ); foreach ( $prod_categories as $key => $prod_cat ): $counter++; $bgc++; $cat_thumb_id = get_term_meta( $prod_cat->term_id, 'thumbnail_id', true ); $cat_thumb = wp_get_attachment_image( $cat_thumb_id, $image_size ); $term_link = get_term_link( $prod_cat, 'product_cat' ); $thumbnails = $cat_thumb; <div class="<?php echo esc_attr( $collumval ); ?>"> <?php if( '1' === $layout ): ?> <div class="1"></div> <?php elseif( '3' === $layout ):?> <a>ссылка</a> <?php endif; ?> </div> <?php if( $bgc == 4 ){ $bgc = 0; } if( $counter == $limitcount ) { break; } endforeach;

Html на выходе работы цикла:

<div class="w-row">    <div class="3">       <a>ссылка</a>    </div>    <div class="3">         <a>ссылка</a>     </div> </div>

<div class="w-row"> <div class="3"> <a>ссылка</a> </div> <div class="3"> <a>ссылка</a> </div> </div>

Необходимо в цикл вывести свой
<div class="3"><a href="#">test</a></div>
Благодарю за помощь

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

Ответы:

Есть цикл который выводит блоки со ссылками внутри

code

&lt;?php    $layout         = $settings['layout'];   $prod_categories = get_terms( 'product_cat', $catargs );   foreach ( $prod_categories as $key =&gt; $prod_cat ):   $counter++;   $bgc++;   $cat_thumb_id = get_term_meta( $prod_cat-&gt;term_id, 'thumbnail_id', true );   $cat_thumb = wp_get_attachment_image( $cat_thumb_id, $image_size );   $term_link = get_term_link( $prod_cat, 'product_cat' );   $thumbnails = $cat_thumb;   ?&gt;   &lt;div class="&lt;?php echo esc_attr( $collumval ); ?&gt;"&gt;      &lt;?php if( '1' === $layout ): ?&gt;     &lt;div class="1"&gt;&lt;/div&gt;     &lt;?php elseif( '3' === $layout ):?&gt;         &lt;a&gt;ссылка&lt;/a&gt;            &lt;?php endif; ?&gt;    &lt;/div&gt;   &lt;?php   if( $bgc == 4 ){ $bgc = 0; }   if( $counter == $limitcount ) { break; } endforeach;

&lt;?php $layout = $settings['layout']; $prod_categories = get_terms( 'product_cat', $catargs ); foreach ( $prod_categories as $key =&gt; $prod_cat ): $counter++; $bgc++; $cat_thumb_id = get_term_meta( $prod_cat-&gt;term_id, 'thumbnail_id', true ); $cat_thumb = wp_get_attachment_image( $cat_thumb_id, $image_size ); $term_link = get_term_link( $prod_cat, 'product_cat' ); $thumbnails = $cat_thumb; ?&gt; &lt;div class="&lt;?php echo esc_attr( $collumval ); ?&gt;"&gt; &lt;?php if( '1' === $layout ): ?&gt; &lt;div class="1"&gt;&lt;/div&gt; &lt;?php elseif( '3' === $layout ):?&gt; &lt;a&gt;ссылка&lt;/a&gt; &lt;?php endif; ?&gt; &lt;/div&gt; &lt;?php if( $bgc == 4 ){ $bgc = 0; } if( $counter == $limitcount ) { break; } endforeach;

А кто писал этот код? Мне просто интересно...

Слегка переделал:

$layout = $settings['layout']; $prod_categories = get_terms('product_cat', $catargs);  foreach ($prod_categories as $key =&gt; $prod_cat) {     $counter++;     $bgc++;     $cat_thumb_id = get_term_meta($prod_cat-&gt;term_id, 'thumbnail_id', true);     $cat_thumb = wp_get_attachment_image($cat_thumb_id, $image_size);     $term_link = get_term_link($prod_cat, 'product_cat');      echo '&lt;div class="' . esc_attr($collumval) . '"&gt;';      switch ($layout) {         case '1':             echo '&lt;div class="1"&gt;&lt;/div&gt;';             break;         case '3':             echo '&lt;a href="' . esc_url($term_link) . '"&gt;ссылка&lt;/a&gt;';             break;     }      echo '&lt;/div&gt;';      if ($bgc == 4) {         $bgc = 0;     }      if ($counter == $limitcount) {         break;     } }  if ('3' === $layout) {     echo '&lt;div class="3"&gt;&lt;a href="#"&gt;test&lt;/a&gt;&lt;/div&gt;'; }

$layout = $settings['layout']; $prod_categories = get_terms('product_cat', $catargs); foreach ($prod_categories as $key =&gt; $prod_cat) { $counter++; $bgc++; $cat_thumb_id = get_term_meta($prod_cat-&gt;term_id, 'thumbnail_id', true); $cat_thumb = wp_get_attachment_image($cat_thumb_id, $image_size); $term_link = get_term_link($prod_cat, 'product_cat'); echo '&lt;div class="' . esc_attr($collumval) . '"&gt;'; switch ($layout) { case '1': echo '&lt;div class="1"&gt;&lt;/div&gt;'; break; case '3': echo '&lt;a href="' . esc_url($term_link) . '"&gt;ссылка&lt;/a&gt;'; break; } echo '&lt;/div&gt;'; if ($bgc == 4) { $bgc = 0; } if ($counter == $limitcount) { break; } } if ('3' === $layout) { echo '&lt;div class="3"&gt;&lt;a href="#"&gt;test&lt;/a&gt;&lt;/div&gt;'; }

Нужно решить такую задачу?

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

Заказать помощь
Лучший ответ
1
Редакция по БД Ответ

Свой блок со ссылкой в цикле WordPress можно вывести прямо внутри foreach, но важно не ломать HTML-структуру и не смешивать логику счётчика с разметкой. Если нужно вставить рекламный/служебный блок после каждого четвертого элемента или вместо одного из элементов, используйте счётчик и отдельный шаблон блока.

Пример вставки блока после четырёх категорий:

$counter = 0;
 
foreach ($prod_categories as $prod_cat) {
    $counter++;
 
    $term_link = get_term_link($prod_cat, 'product_cat');
    if (is_wp_error($term_link)) {
        continue;
    }
 
    echo '&lt;div class="' . esc_attr($collumval) . '"&gt;';
    echo '&lt;a href="' . esc_url($term_link) . '"&gt;';
    echo esc_html($prod_cat-&gt;name);
    echo '&lt;/a&gt;';
    echo '&lt;/div&gt;';
 
    if ($counter % 4 === 0) {
        echo '&lt;div class="' . esc_attr($collumval) . ' custom-link-card"&gt;';
        echo '&lt;a href="' . esc_url(home_url('/special/')) . '"&gt;Свой блок&lt;/a&gt;';
        echo '&lt;/div&gt;';
    }
 
    if ($counter &gt;= $limitcount) {
        break;
    }
}

$counter = 0; foreach ($prod_categories as $prod_cat) { $counter++; $term_link = get_term_link($prod_cat, 'product_cat'); if (is_wp_error($term_link)) { continue; } echo '&lt;div class="' . esc_attr($collumval) . '"&gt;'; echo '&lt;a href="' . esc_url($term_link) . '"&gt;'; echo esc_html($prod_cat-&gt;name); echo '&lt;/a&gt;'; echo '&lt;/div&gt;'; if ($counter % 4 === 0) { echo '&lt;div class="' . esc_attr($collumval) . ' custom-link-card"&gt;'; echo '&lt;a href="' . esc_url(home_url('/special/')) . '"&gt;Свой блок&lt;/a&gt;'; echo '&lt;/div&gt;'; } if ($counter &gt;= $limitcount) { break; } }

Если блок должен зависеть от $layout, не вставляйте его внутрь незакрытых условий. Лучше вынести вывод карточки в функцию или template-part. Тогда у Вас не будет ситуации, когда div открывается в одном условии, а закрывается в другом.

Также обязательно проверяйте get_term_link() на is_wp_error(), а вывод URL и классов экранируйте. Это особенно важно в WooCommerce-категориях, где данные могут прийти из админки.

Если блок должен быть не после каждого четвёртого, а ровно в определённом месте, например после второй карточки, условие меняется на $counter === 2. Если нужно вставлять разные блоки, заведите массив с позициями и шаблонами. Так код останется управляемым, а не превратится в набор вложенных if. Для Elementor/виджетов темы иногда правильнее не править цикл напрямую, а использовать hook, который предусмотрел автор виджета.

Перед правкой проверьте, где именно находится этот цикл: в теме, дочерней теме, плагине или виджете конструктора. Если это файл плагина, лучше не менять его напрямую, а скопировать шаблон в тему, если плагин поддерживает override, либо добавить фильтр/хук.

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

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

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

комментарий

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

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