Support

Account

Home Forums Front-end Issues Repeater field not working in archive-product.php

Solving

Repeater field not working in archive-product.php

  • Hello!

    I am trying to create an FAQ repeater to my archive-product.php (category pages) in WooCommerce + Storefront but unfortunately, it’s not working. It skips right over the “if” statement and just says “Come back later”. Am I missing something here since I’ve never come across an issue like this and didn’t find a solution for this from anywhere else?

    Full code of the template:

    <?php
    /**
    * The Template for displaying product archives, including the main shop page which is a post type archive
    *
    * This template can be overridden by copying it to yourtheme/woocommerce/archive-product.php.
    *
    * HOWEVER, on occasion WooCommerce will need to update template files and you
    * (the theme developer) will need to copy the new files to your theme to
    * maintain compatibility. We try to do this as little as possible, but it does
    * happen. When this occurs the version of the template file will be bumped and
    * the readme will list any important changes.
    *
    * @see https://docs.woocommerce.com/document/template-structure/
    * @package WooCommerce\Templates
    * @version 3.4.0
    */
    
    defined( 'ABSPATH' ) || exit;
    
    get_header( 'shop' );
    
    /**
    * Hook: woocommerce_before_main_content.
    *
    * @hooked woocommerce_output_content_wrapper - 10 (outputs opening divs for the content)
    * @hooked woocommerce_breadcrumb - 20
    * @hooked WC_Structured_Data::generate_website_data() - 30
    */
    do_action( 'woocommerce_before_main_content' );
    
    ?>
    <header class="woocommerce-products-header">
    <?php if ( apply_filters( 'woocommerce_show_page_title', true ) ) : ?>
    <h1 class="woocommerce-products-header__title page-title"><?php woocommerce_page_title(); ?></h1>
    <?php endif; ?>
    
    <?php
    /**
    * Hook: woocommerce_archive_description.
    *
    * @hooked woocommerce_taxonomy_archive_description - 10
    * @hooked woocommerce_product_archive_description - 10
    */
    do_action( 'woocommerce_archive_description' );
    ?>
    </header>
    <?php
    if ( woocommerce_product_loop() ) {
    
    /**
    * Hook: woocommerce_before_shop_loop.
    *
    * @hooked woocommerce_output_all_notices - 10
    * @hooked woocommerce_result_count - 20
    * @hooked woocommerce_catalog_ordering - 30
    */
    do_action( 'woocommerce_before_shop_loop' );
    
    woocommerce_product_loop_start();
    
    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' );
    }
    }
    
    woocommerce_product_loop_end();
    
    /**
    * Hook: woocommerce_after_shop_loop.
    *
    * @hooked woocommerce_pagination - 10
    */
    do_action( 'woocommerce_after_shop_loop' );
    } else {
    /**
    * Hook: woocommerce_no_products_found.
    *
    * @hooked wc_no_products_found - 10
    */
    do_action( 'woocommerce_no_products_found' );
    }
    ?>
    <div class="container FAQ">
    <div class="row">
    <div class="col-md-12">
    <?php if( have_rows('faq') ):
    $i = 1; // Set the increment variable
    
    ?>
    <div id="accordion">
    <?
    // loop through the rows of data for the tab header
    while ( have_rows('faq') ) : the_row();
    ?>
    
    <div class="card" itemscope itemprop="mainEntity" itemtype="https://schema.org/Question">
    <div class="card-header" id="heading-<?php echo $i;?>">
    <button class="btn btn-link collapsed" data-toggle="collapse" data-target="#collapse-<?php echo $i;?>" aria-expanded="true" aria-controls="collapse-<?php echo $i;?>">
    <span class="accordion-title" itemprop="name"><?php the_sub_field('question'); ?></span>
    </button>
    </div>
    
    <div id="collapse-<?php echo $i;?>" class="collapse" aria-labelledby="heading-<?php echo $i;?>" data-parent="#accordion">
    <div class="card-body" itemscope itemprop="acceptedAnswer" itemtype="https://schema.org/Answer">
    <span itemprop="text"><?php the_sub_field('answer'); ?></span>
    </div>
    </div>
    </div>
    
    <?php $i++; // Increment the increment variable
    
    endwhile; //End the loop
    
    ?>
    </div>
    <?php
    else :
    
    // no rows found
    echo 'Come back later';
    endif;?>
    </div>
    </div>
    </div>
    
    <?php
    
    /**
    * Hook: woocommerce_after_main_content.
    *
    * @hooked woocommerce_output_content_wrapper_end - 10 (outputs closing divs for the content)
    */
    do_action( 'woocommerce_after_main_content' );
    
    /**
    * Hook: woocommerce_sidebar.
    *
    * @hooked woocommerce_get_sidebar - 10
    */
    do_action( 'woocommerce_sidebar' );
    
    get_footer( 'shop' );
  • Hey Hirmuli,
    have you found a solution? I feel the same way and the support doesn’t answer.

    Greetings Nico

  • Maybe it will help you, I solved it. The individual vars must be called within the repeater. In my case:

    		<?php if( have_rows('affiliatepartner') ): ?>
    			<div class="external-links">
    			<?php while( have_rows('affiliatepartner') ): the_row(); ?>
    				<?php
    					$produkturl = get_sub_field('produkturl');
    					$buttontext = get_sub_field('buttontext');
    				?>
    				<a href="<?php echo esc_url( $produkturl ); ?>" class="button product_type_external" aria-label="<?php echo $buttontext; ?>" rel="nofollow" target="_blank"><?php echo $buttontext; ?></a>
    			<?php endwhile; ?>
    			</div>
    		<?php endif; ?>
    
  • The have rows loop must be inside of the product post loop

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

    or in the template part loaded by this

    
    wc_get_template_part( 'content', 'product' );
    
Viewing 4 posts - 1 through 4 (of 4 total)

You must be logged in to reply to this topic.

We use cookies to offer you a better browsing experience, analyze site traffic and personalize content. Read about how we use cookies and how you can control them in our Cookie Policy. If you continue to use this site, you consent to our use of cookies.