Как вывести свой блок со ссылкой в цикле WordPress?
Есть цикл который выводит блоки со ссылками внутри
<?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
<?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;
А кто писал этот код? Мне просто интересно...
Слегка переделал:
$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'); echo '<div class="' . esc_attr($collumval) . '">'; switch ($layout) { case '1': echo '<div class="1"></div>'; break; case '3': echo '<a href="' . esc_url($term_link) . '">ссылка</a>'; break; } echo '</div>'; if ($bgc == 4) { $bgc = 0; } if ($counter == $limitcount) { break; } } if ('3' === $layout) { echo '<div class="3"><a href="#">test</a></div>'; } |
$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'); echo '<div class="' . esc_attr($collumval) . '">'; switch ($layout) { case '1': echo '<div class="1"></div>'; break; case '3': echo '<a href="' . esc_url($term_link) . '">ссылка</a>'; break; } echo '</div>'; if ($bgc == 4) { $bgc = 0; } if ($counter == $limitcount) { break; } } if ('3' === $layout) { echo '<div class="3"><a href="#">test</a></div>'; }
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос
Свой блок со ссылкой в цикле 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 '<div class="' . esc_attr($collumval) . '">'; echo '<a href="' . esc_url($term_link) . '">'; echo esc_html($prod_cat->name); echo '</a>'; echo '</div>'; if ($counter % 4 === 0) { echo '<div class="' . esc_attr($collumval) . ' custom-link-card">'; echo '<a href="' . esc_url(home_url('/special/')) . '">Свой блок</a>'; echo '</div>'; } if ($counter >= $limitcount) { break; } }
Если блок должен зависеть от
$layout, не вставляйте его внутрь незакрытых условий. Лучше вынести вывод карточки в функцию или template-part. Тогда у Вас не будет ситуации, когдаdivоткрывается в одном условии, а закрывается в другом.Также обязательно проверяйте
get_term_link()наis_wp_error(), а вывод URL и классов экранируйте. Это особенно важно в WooCommerce-категориях, где данные могут прийти из админки.Если блок должен быть не после каждого четвёртого, а ровно в определённом месте, например после второй карточки, условие меняется на
$counter === 2. Если нужно вставлять разные блоки, заведите массив с позициями и шаблонами. Так код останется управляемым, а не превратится в набор вложенныхif. Для Elementor/виджетов темы иногда правильнее не править цикл напрямую, а использовать hook, который предусмотрел автор виджета.Перед правкой проверьте, где именно находится этот цикл: в теме, дочерней теме, плагине или виджете конструктора. Если это файл плагина, лучше не менять его напрямую, а скопировать шаблон в тему, если плагин поддерживает override, либо добавить фильтр/хук.