Dynamic Gravityform-更新ACF中继器子字段与动态预填充字段混合

Dynamic Gravityform-更新ACF中继器子字段与动态预填充字段混合,dynamic,repeater,advanced-custom-fields,gravityforms,Dynamic,Repeater,Advanced Custom Fields,Gravityforms,我有一个ACF repeater字段,用于创建具有一定可用位置的课程。该复读生在每个单独的定制职位类型课程上。 另一方面,我有一个重力模型,它有一个自动填充ACF中继器的无线电场: add_filter( 'gform_pre_render_3', 'populate_posts' ); add_filter( 'gform_pre_validation_3', 'populate_posts' ); add_filter( 'gform_pre_submission_filter_3', 'p

我有一个ACF repeater字段,用于创建具有一定可用位置的课程。该复读生在每个单独的定制职位类型课程上。 另一方面,我有一个重力模型,它有一个自动填充ACF中继器的无线电场:

add_filter( 'gform_pre_render_3', 'populate_posts' );
add_filter( 'gform_pre_validation_3', 'populate_posts' );
add_filter( 'gform_pre_submission_filter_3', 'populate_posts' );
add_filter( 'gform_admin_pre_render_3', 'populate_posts' );

function populate_posts( $form ) {


foreach ( $form['fields'] as &$field ) {
// Vient check tous les fields du formulaire

    if ( $field->type != 'radio' || strpos( $field->cssClass, 'populate-posts' ) === false ) {
    // Choisit seulement les fields de type [radio] qui ont la class [populate-posts]
        continue;
    }

    $date_type = get_field( 'date_type' );
    $range_dates = get_field( 'date_range_repeater' );
    $sinlge_dates = get_field( 'sinlge_dates_repeater' );    
    $choices = array();


    if( $date_type === 'date_type_range' ){

        foreach ( $range_dates as $range_date ) {
            $dateformatstring = "j F Y";
            $dateclean_start = strtotime( $range_date['date_starting'] );
            $final_date_start = date_i18n($dateformatstring, $dateclean_start);

            $dateclean_end = strtotime( $range_date['date_ending'] );
            $final_date_end = date_i18n($dateformatstring, $dateclean_end);


            $choices[] = array(
                'text'  => 'Du '.$final_date_start.' au '.$final_date_end.'<br />'.$range_date['availability'].' places disponibles',
                'value' => 'Du '.$final_date_start.' au '.$final_date_end
            );
        }

    }elseif( $date_type === 'date_type_single' ){
        foreach ( $sinlge_dates as $sinlge_date ) {
            $dateformatstring = "j F Y";
            $dateclean_start = strtotime( $sinlge_date['date_starting'] );
            $final_date_start = date_i18n($dateformatstring, $dateclean_start);

            $dateclean_end = strtotime( $sinlge_date['date_ending'] );
            $final_date_end = date_i18n($dateformatstring, $dateclean_end);


            $choices[] = array(
                'text'  => 'Du '.$final_date_start.' au '.$final_date_end.'<br />'.$sinlge_date['availability'].' places disponibles',
                'value' => 'Du '.$final_date_start.' au '.$final_date_end
            );
        }
    }else{}

    // update 'Select a Post' to whatever you'd like the instructive option to be
    $field->placeholder = 'Select a Post';
    $field->choices = $choices;

}

return $form;
}
问题是我必须手动选择更新de子字段必须使用的行。我如何设法检测哪个ACF中继器行是我提交的值


谢谢

也许您可以在GF中添加一些隐藏字段,并在
函数populate_posts($form){}
中填充它们,就像您应该在提交后在
函数中直接访问一样

add_action( 'gform_after_submission', 'set_post_content', 10, 2 );
function set_post_content( $entry, $form ) {



    //$radio_value = rgar( $entry, '11' );


    $repeater = 'date_range_repeater';
    $acf_repeater = get_field('date_range_repeater' ); // get all the rows
    $row = 0;
    $specific_row = $acf_repeater[$row];
    $sub_field = 'availability';
    $current_availability = $specific_row['availability'];
    $availability_new = --$current_availability;

    update_sub_field( array($repeater, ++$row, $sub_field), $availability_new );

    //echo $radio_value;
}