Я хочу позволить пользователям выбирать товары в форме. Для этого мне нужно динамически заполнить форму опубликованными продуктами WooCommerce.
Я нашел решение для заполнения поля выбора продуктами WooCommerce. Но пользователь должен иметь возможность выбрать количество для каждого продукта. Поэтому мне нужно использовать поле списка и заполнить ячейки поля списка.
Вот как выглядит поле списка:
SKU и поля заголовка должны заполняться динамически. И поле количества должно быть заполнено пользователем.
Вот мой код для заполнения поля выбора данными продукта WooCommerce:
add_filter( 'gform_pre_render_5', 'populate_posts' );
add_filter( 'gform_pre_validation_5', 'populate_posts' );
add_filter( 'gform_pre_submission_filter_5', 'populate_posts' );
add_filter( 'gform_admin_pre_render_5', 'populate_posts' );
function populate_posts( $form ) {
foreach ( $form['fields'] as &$field ) {
if ( $field->type != 'select' || strpos( $field->cssClass, 'populate-posts' ) === false ) {
continue;
}
// you can add additional parameters here to alter the posts that are retrieved
// more info: http://codex.wordpress.org/Template_Tags/get_posts
$posts = get_posts( 'numberposts=-1&post_status=publish&post_type=product' );
$choices = array();
foreach ( $posts as $post ) {
$choices[] = array( 'text' => $post->post_title, 'value' => $post->post_title );
}
// update 'Select a Post' to whatever you'd like the instructive option to be
$field->placeholder = 'Select a product';
$field->choices = $choices;
}
return $form;
}
К сожалению, я не знаю, как заполнить ячейки поле списка динамически.
Я нашел пример заполнения поля списка: https://docs.gravityforms.com/gform_field_value_parameter_name/#list -field
Но я не мог понять, как объединить эти поля два фрагмента: /
add_filter( 'gform_field_value_list', 'populate_list' );
function populate_list( $value ) {
$list_array = array(
array(
'Column 1' => 'row1col1',
'Column 2' => 'row1col2',
'Column 3' => 'row1col3',
),
array(
'Column 1' => 'row2col1',
'Column 2' => 'row2col2',
'Column 3' => 'row2col3'
),
);
return $list_array;
}