skip to Main Content

So I have the following code:

/**
 Add custom fields to user / checkout - Date + Venue
 */
 add_action( 'woocommerce_after_order_notes', 'my_custom_checkout_field' ); 
 function my_custom_checkout_field( $checkout ) {

if( have_rows('date_venue', 424) ): $x = 1;
    while ( have_rows('date_venue', 424) ) : the_row(); ?>
        <?php $dates[] = get_sub_field('date').' - '.get_sub_field('session_time'); ?>
    <?php $x++; endwhile;
else : endif;

 echo '<div id="bv_custom_checkout_field"><h4>Select Course Date/Venue</h4>';
    woocommerce_form_field( 'course_venue', array(
        'type' => 'select',
        'class' => array('my-class form-row-wide'),
        'label' => __('Select Course Date / Venue'),
        'placeholder' => __('Course Date/Venue'),
        'options'       => array(
            $dates[0]       => __( $dates[0], 'wps' ),
            $dates[1]   => __( $dates[1], 'wps' ),
            $dates[2]   => __( $dates[2], 'wps' )
            ),
        ),
        get_user_meta(  get_current_user_id(),'course_venue' , true  ) ); echo '</div>';
 }

As you can see I have added $dates[] as an array which could range from 2-X options, which will depend on the product ID.

As an example, I have included the options manually, i.e. dates[0], dates[1] etc…

How would I go about looping this and including it within the options array?

It works fine as it is, but it’s not dynamic.

Any help is much appreciated!

2

Answers


  1. Chosen as BEST ANSWER

    Thanks to sMyles:

    You can use array_flip to set all the keys to the values from $dates, but if you want the value to be passed through translation function you can just build the array using foreach

    $options_dates = array();
    
    foreach( (array) $dates as $date ){
        $options_dates[ $date ] = __( $date, 'wps' );
    }
    

    Then just set 'options' => $options_dates,


  2. This is perfect loop I have follow like this

    First I get data from ACF:-

    $options_for_variations = array();
    if( have_rows('material_sizes_is','option') ):
        while( have_rows('material_sizes_is','option') ) : the_row();
    
            $material_name_is = get_sub_field('material_isname');
             $options_for_variations[$material_name_is] = __($material_name_is, 'woocommerce' );
    
        endwhile;
    endif;
    

    woocommerce_wp_select – then pass array into the wp_select

      woocommerce_wp_select( 
            array( 
            'id'          => '_select[' . $variation->ID . ']', 
            'label'       => __( 'My Select Field', 'woocommerce' ), 
            'description' => __( 'Choose a value.', 'woocommerce' ),
            'value'       => get_post_meta( $variation->ID, '_select', true ),
            'options' =>  $options_for_variations,
            )
        );
    
    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search