Добавить контент между строками продуктов в архивах WooCommerce - PullRequest
2 голосов
/ 19 июня 2020

Я хочу показать некоторый контент после третьего продукта (и, возможно, шестого, девятого ...) категории продуктов. Не в каждой категории есть дополнительный контент или его одинаковое количество. Так что он должен быть гибким.

Я нашел пример , в котором используется следующий код:

<?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>
        <?php get_template_part( 'template-parts/content' ); ?>    
        <?php if ( $wp_query->current_post == 1 ) { ?>
             <div>Put Ad Here</div>
        <?php } ?>    
<?php endwhile; endif; ?>

Я добавил этот код в свой archive-product.php вот так:

if ( wc_get_loop_prop( 'total' ) ) {
    while ( have_posts() ) {
        the_post();

        /**
         * Hook: woocommerce_shop_loop.
         */
        do_action( 'woocommerce_shop_loop' );

        wc_get_template_part( 'content', 'product' );

        if ( $wp_query->current_post == 1 ) { 
            echo '<div>Put Ad Here</div>';
        }


    }
}

Но ничего не показывает. И было бы неплохо, если бы был способ добавить этот контент, вообще не касаясь файла шаблона.

Есть ли какой-нибудь крючок, который я мог бы использовать для этого?

1 Ответ

2 голосов
/ 19 июня 2020

Обновлено - Вместо переопределения файла шаблона вы можете использовать следующую функцию привязки, которая добавит полную строку настраиваемого содержимого между каждой строкой продуктов:

add_action( 'woocommerce_shop_loop', 'action_woocommerce_shop_loop', 100 );
function action_woocommerce_shop_loop() {
    // Only on producy cayegory archives
    if ( is_product_category() ) :
        
    global $wp_query;
    
    // Get the number of columns set for this query
    $columns = esc_attr( wc_get_loop_prop( 'columns' ) );
    
    // Get the current post count 
    $current_post = $wp_query->current_post;
    
    if ( ( $current_post % $columns ) == 0  && $current_post > 1 ) :
    
    ?>
    </ul>
    <ul class="columns-1" style="list-style:none; margin:0 0 3em;">
        <li style="text-align:center; padding:2em 1em; border: solid 1px #ccc;"><div class="banner"><?php _e("Custom content here"); ?></div></li>
    </ul>
    <ul class="products columns-<?php echo $columns; ?>">
    <?php
    endif; endif;
}

Код входит в файл functions. php вашей активной дочерней темы (или активной темы). Проверено и работает.

введите описание изображения здесь

...