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.