Retrieving repeater data from ACF Pro and adding it to Woocommerce Tab

Viewed 33

I'm attempting to add repeater data from Advanced Custom Fields Pro onto a Woocommerce product page. I have 3 custom fields, all repeaters. All 3 fields have subfields, such as a Title, and a Value.

For example, Technical Specifics (technical_specifics) has 2 subfields, Titles (titles) and Values (values). This data is being displayed as a table.

SDS and TDS both have File Name (file_name) and PDF link (pdf_file). This data is being displayed as a file name and a link to a PDF on the server.

I have the below code, which adds the tabs correctly, but no data is coming into the page, so the tabs have blank data. What am I doing wrong to retrieve the array data?

add_filter( 'woocommerce_product_tabs', 'woo_new_product_tab' );
/*
 * Add 3 custom product data tabs
 */
function woo_new_product_tab( $tabs ) {
    
    // Adds the new tab
    if(get_field('technical_specifics'))
    $tabs['technical_specifics'] = array(
        'title'     => __( 'Technical Specifics', 'woocommerce' ),
        'priority'  => 15,
        'callback'  => 'technical_specifics_callback'
        );
    if(get_field('sds'))
        $tabs['sds'] = array(
        'title'     => __( 'SDS', 'woocommerce' ),
        'priority'  => 20,
        'callback'  => 'sds_callback'
    );
    if(get_field('tds'))
        $tabs['tds'] = array(
        'title'     => __( 'TDS', 'woocommerce' ),
        'priority'  => 25,
        'callback'  => 'tds_callback'
    );

    return $tabs;

}
function technical_specifics_callback() {
    // The new tab content
    
    $per_unit_or_square = get_field( 'pricem2_or_priceunit_', $item->get_product_id() );
    
    $technical_specifics = get_field('technical_specifics');
    $technical_spec = $technical_specifics[0];
    ?>
        <div>
            <table style="width: 100%;">
            <tr>
                <?php
                    foreach ($technical_spec['titles'] as $key => $values)
                    {
                    ?>
                            <th><?php echo $values['title1']; ?></th>
                            <th><?php echo $values['title2']; ?></th>
                            <th><?php echo $values['title3']; ?></th>
                            <th><?php echo $values['title4']; ?></th>
                            <th><?php echo $values['title5']; ?></th>
                            <th><?php echo $values['title6']; ?></th>
                    <?php
                    }
                    ?>
                            
                    </tr>
                    
                    <?php
                    foreach ($technical_spec['values'] as $key => $value)
                    {
                    ?>
                        <tr>
                            <td><?php echo $value['value1']; ?></td>
                            <td><?php echo $value['value2']; ?></td>
                            <td><?php echo $value['value3']; ?></td>
                            <td><?php echo $value['value4']; ?></td>
                            <td><?php echo $value['value5']; ?></td>
                            <td><?php echo $value['value6']; ?></td>
                        </tr>
                    <?php
                    }
                    ?>
            </table>
    </div>
<?php
}


function sds_callback(){
    // The new tab content
    $sds = get_field('sds');
    if(isset($sds[0]))
    {
        ?>
        <div class="sds-spec">
            <ul class="list">
                <?php 
                foreach ($sds as $key => $value) 
                {
                    ?>                                                          
                    <li>
                        <a href="<?php echo $value['pdf_file']; ?>" class="open-popup">Download <?php echo $value['file_name']; ?></a>
                    </li>
                    <?php
                }
                ?>
            </ul>
        </div>
        <?php
    }
}


function tds_callback(){
    // The new tab content
    $tds = get_field('tds');
    if(isset($tds[0]))
    {
        ?>
        <div class="sds-spec">
            <ul class="list">
                <?php 
                foreach ($tds as $key => $value) 
                {
                    ?>                                                          
                    <li>
                        <a href="<?php echo $value['pdf_file']; ?>" class="open-popup1">Download <?php echo $value['file_name']; ?></a>
                    </li>
                    <?php
                }
                ?>
            </ul>
        </div>
        <?php
    }
}

This is the PHP code generated by my ACF fields.

if( function_exists('acf_add_local_field_group') ):

acf_add_local_field_group(array(
    'key' => 'group_5e326b8892b0f',
    'title' => 'Product Technical Specifics',
    'fields' => array(
        array(
            'key' => 'field_5e326be12fa37',
            'label' => 'Technical Specifics',
            'name' => 'technical_specifics',
            'type' => 'repeater',
            'instructions' => '',
            'required' => 0,
            'conditional_logic' => 0,
            'wrapper' => array(
                'width' => '',
                'class' => '',
                'id' => '',
            ),
            'collapsed' => '',
            'min' => 1,
            'max' => 1,
            'layout' => 'block',
            'button_label' => '',
            'sub_fields' => array(
                array(
                    'key' => 'field_5e326c132fa38',
                    'label' => 'Titles',
                    'name' => 'titles',
                    'type' => 'repeater',
                    'instructions' => '',
                    'required' => 0,
                    'conditional_logic' => 0,
                    'wrapper' => array(
                        'width' => '',
                        'class' => '',
                        'id' => '',
                    ),
                    'collapsed' => '',
                    'min' => 1,
                    'max' => 1,
                    'layout' => 'table',
                    'button_label' => '',
                    'sub_fields' => array(
                        array(
                            'key' => 'field_5e4a7d6ed08c1',
                            'label' => 'Title1',
                            'name' => 'title1',
                            'type' => 'text',
                            'instructions' => '',
                            'required' => 0,
                            'conditional_logic' => 0,
                            'wrapper' => array(
                                'width' => '',
                                'class' => '',
                                'id' => '',
                            ),
                            'default_value' => '',
                            'placeholder' => '',
                            'prepend' => '',
                            'append' => '',
                            'maxlength' => '',
                        ),
                        array(
                            'key' => 'field_5e4a81283bc92',
                            'label' => 'Title2',
                            'name' => 'title2',
                            'type' => 'text',
                            'instructions' => '',
                            'required' => 0,
                            'conditional_logic' => 0,
                            'wrapper' => array(
                                'width' => '',
                                'class' => '',
                                'id' => '',
                            ),
                            'default_value' => '',
                            'placeholder' => '',
                            'prepend' => '',
                            'append' => '',
                            'maxlength' => '',
                        ),
                        array(
                            'key' => 'field_5e4a81323bc93',
                            'label' => 'Title3',
                            'name' => 'title3',
                            'type' => 'text',
                            'instructions' => '',
                            'required' => 0,
                            'conditional_logic' => 0,
                            'wrapper' => array(
                                'width' => '',
                                'class' => '',
                                'id' => '',
                            ),
                            'default_value' => '',
                            'placeholder' => '',
                            'prepend' => '',
                            'append' => '',
                            'maxlength' => '',
                        ),
                        array(
                            'key' => 'field_5e4a813c3bc94',
                            'label' => 'Title4',
                            'name' => 'title4',
                            'type' => 'text',
                            'instructions' => '',
                            'required' => 0,
                            'conditional_logic' => 0,
                            'wrapper' => array(
                                'width' => '',
                                'class' => '',
                                'id' => '',
                            ),
                            'default_value' => '',
                            'placeholder' => '',
                            'prepend' => '',
                            'append' => '',
                            'maxlength' => '',
                        ),
                        array(
                            'key' => 'field_5e4a81463bc95',
                            'label' => 'Title5',
                            'name' => 'title5',
                            'type' => 'text',
                            'instructions' => '',
                            'required' => 0,
                            'conditional_logic' => 0,
                            'wrapper' => array(
                                'width' => '',
                                'class' => '',
                                'id' => '',
                            ),
                            'default_value' => '',
                            'placeholder' => '',
                            'prepend' => '',
                            'append' => '',
                            'maxlength' => '',
                        ),
                        array(
                            'key' => 'field_5e4a81533bc96',
                            'label' => 'Title6',
                            'name' => 'title6',
                            'type' => 'text',
                            'instructions' => '',
                            'required' => 0,
                            'conditional_logic' => 0,
                            'wrapper' => array(
                                'width' => '',
                                'class' => '',
                                'id' => '',
                            ),
                            'default_value' => '',
                            'placeholder' => '',
                            'prepend' => '',
                            'append' => '',
                            'maxlength' => '',
                        ),
                    ),
                ),
                array(
                    'key' => 'field_5e326c642fa39',
                    'label' => 'Values',
                    'name' => 'values',
                    'type' => 'repeater',
                    'instructions' => '',
                    'required' => 0,
                    'conditional_logic' => 0,
                    'wrapper' => array(
                        'width' => '',
                        'class' => '',
                        'id' => '',
                    ),
                    'collapsed' => '',
                    'min' => 1,
                    'max' => 0,
                    'layout' => 'table',
                    'button_label' => '',
                    'sub_fields' => array(
                        array(
                            'key' => 'field_5e4a80478bb97',
                            'label' => 'Value1',
                            'name' => 'value1',
                            'type' => 'text',
                            'instructions' => '',
                            'required' => 0,
                            'conditional_logic' => 0,
                            'wrapper' => array(
                                'width' => '',
                                'class' => '',
                                'id' => '',
                            ),
                            'default_value' => '',
                            'placeholder' => '',
                            'prepend' => '',
                            'append' => '',
                            'maxlength' => '',
                        ),
                        array(
                            'key' => 'field_5e4a80598bb98',
                            'label' => 'Value2',
                            'name' => 'value2',
                            'type' => 'text',
                            'instructions' => '',
                            'required' => 0,
                            'conditional_logic' => 0,
                            'wrapper' => array(
                                'width' => '',
                                'class' => '',
                                'id' => '',
                            ),
                            'default_value' => '',
                            'placeholder' => '',
                            'prepend' => '',
                            'append' => '',
                            'maxlength' => '',
                        ),
                        array(
                            'key' => 'field_5e4a80658bb99',
                            'label' => 'Value3',
                            'name' => 'value3',
                            'type' => 'text',
                            'instructions' => '',
                            'required' => 0,
                            'conditional_logic' => 0,
                            'wrapper' => array(
                                'width' => '',
                                'class' => '',
                                'id' => '',
                            ),
                            'default_value' => '',
                            'placeholder' => '',
                            'prepend' => '',
                            'append' => '',
                            'maxlength' => '',
                        ),
                        array(
                            'key' => 'field_5e4a80718bb9a',
                            'label' => 'Value4',
                            'name' => 'value4',
                            'type' => 'text',
                            'instructions' => '',
                            'required' => 0,
                            'conditional_logic' => 0,
                            'wrapper' => array(
                                'width' => '',
                                'class' => '',
                                'id' => '',
                            ),
                            'default_value' => '',
                            'placeholder' => '',
                            'prepend' => '',
                            'append' => '',
                            'maxlength' => '',
                        ),
                        array(
                            'key' => 'field_5e4a807c8bb9b',
                            'label' => 'Value5',
                            'name' => 'value5',
                            'type' => 'text',
                            'instructions' => '',
                            'required' => 0,
                            'conditional_logic' => 0,
                            'wrapper' => array(
                                'width' => '',
                                'class' => '',
                                'id' => '',
                            ),
                            'default_value' => '',
                            'placeholder' => '',
                            'prepend' => '',
                            'append' => '',
                            'maxlength' => '',
                        ),
                        array(
                            'key' => 'field_5e4a808b8bb9c',
                            'label' => 'Value6',
                            'name' => 'value6',
                            'type' => 'text',
                            'instructions' => '',
                            'required' => 0,
                            'conditional_logic' => 0,
                            'wrapper' => array(
                                'width' => '',
                                'class' => '',
                                'id' => '',
                            ),
                            'default_value' => '',
                            'placeholder' => '',
                            'prepend' => '',
                            'append' => '',
                            'maxlength' => '',
                        ),
                    ),
                ),
            ),
        ),
        array(
            'key' => 'field_5f2a9e5a6ec81',
            'label' => 'SDS',
            'name' => 'sds',
            'type' => 'repeater',
            'instructions' => '',
            'required' => 0,
            'conditional_logic' => 0,
            'wrapper' => array(
                'width' => '',
                'class' => '',
                'id' => '',
            ),
            'collapsed' => '',
            'min' => 0,
            'max' => 0,
            'layout' => 'table',
            'button_label' => '',
            'sub_fields' => array(
                array(
                    'key' => 'field_5f2a9e726ec82',
                    'label' => 'File Name',
                    'name' => 'file_name',
                    'type' => 'text',
                    'instructions' => '',
                    'required' => 0,
                    'conditional_logic' => 0,
                    'wrapper' => array(
                        'width' => '',
                        'class' => '',
                        'id' => '',
                    ),
                    'default_value' => '',
                    'placeholder' => '',
                    'prepend' => '',
                    'append' => '',
                    'maxlength' => '',
                ),
                array(
                    'key' => 'field_5f2a9e776ec83',
                    'label' => 'Pdf File',
                    'name' => 'pdf_file',
                    'type' => 'file',
                    'instructions' => '',
                    'required' => 0,
                    'conditional_logic' => 0,
                    'wrapper' => array(
                        'width' => '',
                        'class' => '',
                        'id' => '',
                    ),
                    'return_format' => 'url',
                    'library' => 'all',
                    'min_size' => '',
                    'max_size' => '',
                    'mime_types' => '',
                ),
            ),
        ),
        array(
            'key' => 'field_5f2a9e906ec84',
            'label' => 'TDS',
            'name' => 'tds',
            'type' => 'repeater',
            'instructions' => '',
            'required' => 0,
            'conditional_logic' => 0,
            'wrapper' => array(
                'width' => '',
                'class' => '',
                'id' => '',
            ),
            'collapsed' => '',
            'min' => 0,
            'max' => 0,
            'layout' => 'table',
            'button_label' => '',
            'sub_fields' => array(
                array(
                    'key' => 'field_5f2a9e906ec85',
                    'label' => 'File Name',
                    'name' => 'file_name',
                    'type' => 'text',
                    'instructions' => '',
                    'required' => 0,
                    'conditional_logic' => 0,
                    'wrapper' => array(
                        'width' => '',
                        'class' => '',
                        'id' => '',
                    ),
                    'default_value' => '',
                    'placeholder' => '',
                    'prepend' => '',
                    'append' => '',
                    'maxlength' => '',
                ),
                array(
                    'key' => 'field_5f2a9e906ec86',
                    'label' => 'Pdf File',
                    'name' => 'pdf_file',
                    'type' => 'file',
                    'instructions' => '',
                    'required' => 0,
                    'conditional_logic' => 0,
                    'wrapper' => array(
                        'width' => '',
                        'class' => '',
                        'id' => '',
                    ),
                    'return_format' => 'url',
                    'library' => 'all',
                    'min_size' => '',
                    'max_size' => '',
                    'mime_types' => '',
                ),
            ),
        ),
    ),
    'location' => array(
        array(
            array(
                'param' => 'post_type',
                'operator' => '==',
                'value' => 'product',
            ),
        ),
    ),
    'menu_order' => 0,
    'position' => 'normal',
    'style' => 'default',
    'label_placement' => 'top',
    'instruction_placement' => 'label',
    'hide_on_screen' => '',
    'active' => true,
    'description' => '',
    'show_in_rest' => false,
));
endif;      
1 Answers

Based on how you describe your repeater fields & the code you've given, it sounds like you might be accessing them incorrectly.

I'll put what I believe the code needs to be to access the values correctly below, however, for debugging sake, in the "technical_specifics_callback" function, could you try var_dump the following variables (per_unit_or_square, technical_specifics & technical_spec) and see if they return values?

From my understanding, I suspect that you either need to add the post id to the get_field('technical_specifics') call. Or the foreach call needs to be updated to work with how repeaters work (code example below).

<?php
<?php
function technical_specifics_callback() {
    $per_unit_or_square = get_field( 'pricem2_or_priceunit_', $item->get_product_id() );
    $technical_specifics = get_field('technical_specifics');

    $title_row = "";
    $values_row = "";
    foreach( $technical_specifics as $item ) {
        $title_row .= "<th>" . $item["title"] . "</th>";
        $values_row .= "<td>" . $item["values"] . "</td>";
    }
    ?>
    <div>
        <table style="width: 100%;">
            <tr><?php echo $title_row;?></tr>
            <tr><?php echo $values_row;?></tr>
        </table>
    </div>
    <?php
}
Related