Support

Account

Home Forums Add-ons Repeater Field Determine if a Sub Field with a specific title is present

Solving

Determine if a Sub Field with a specific title is present

  • Hello!

    I’ve created some custom Woocommerce tabs for the single product pages and am populating them based on the title of a repeater sub field. My ACF repeater field is “details_repeater” and have two subfields, “title” and “content”. I have an IF statement that checks to see if the subfield title matches a specific text string. In the example below “Characteristics” and if so, it echos the content. That all works fine. However, I would also like to an ELSE statement or something that checks to see if there isn’t a title subfield of “Characteristics” and then will do something. In this case, I want to add some CSS to hide the “Characteristics” WC Tab. I’m not sure how to check if a sub field with a specific title doesn’t exist. Any help would be greatly appreciated!

    function woo_if_characteristics_tab_content()
    {
        echo '<h2>Characteristics</h2>';
        while (have_rows('details_repeater')) {
            the_row();
            if (get_sub_field('title') == 'Characteristics') {
                $content = get_sub_field('content');
                echo $content;
            } elseif (!get_sub_field('title') == 'Characteristics') {
                echo 'does not exist';
            }
        }
    }
  • Hi @brianwaxingmedia-com

    I wonder if you need to use the woo product TAB callback.

    So something like:

    <?php
    ########################
    # Add Custom Product Page TAB
    ########################
    add_filter( 'woocommerce_product_tabs', 'acf_woo_new_product_tab' );
    function acf_woo_new_product_tab( $tabs ) {
    	
    	global $product;
    	$product_id = $product->get_id();	
    	if( have_rows('details_repeater',$product_id ) ):
    		while( have_rows('details_repeater',$product_id ) ) : the_row();
    			if (get_sub_field('title') == 'Characteristics') :
    			// Adds the new tab
    			$tabs['product_details_tab'] = array(
    				'title' 	=> __( 'Characteristics', 'woocommerce' ),
    				'priority' 	=> 10,
    				'callback' 	=> 'acf_product_details_tab_content'
    			);	
    			endif;
    		endwhile;
    	endif;
    	
    	return $tabs;
    
    }
    
    function acf_product_details_tab_content() {
    
    	global $product;
    	$product_id = $product->get_id();
    	
    	// Check rows exists.
    	if( have_rows('details_repeater',$product_id ) ):
    		echo '<h2>Characteristics</h2>';
    		// Loop through rows.
    		while( have_rows('details_repeater',$product_id ) ) : the_row();
    
    			// Load sub field value.
    			$content = get_sub_field('content');
    			echo $content;
    
    		// End loop.
    		endwhile;
    
    	// No value.
    	else :
    		// Do something...
    	endif;	
    	
    }

    Code is untested but hopefully, you can see what’s happening.

  • Hi, Jarvis

    ahhh, yes. That’s a much better way to do it! Thanks for the help! Appreciate it!

Viewing 3 posts - 1 through 3 (of 3 total)

You must be logged in to reply to this topic.