Я пытаюсь динамически заполнить два выпадающих поля в форме Gravity Forms. Первое поле динамически заполняется терминами, доступными в пользовательском типе записи. Я хочу, чтобы второе динамически заполненное поле содержало список всех заголовков постов в пользовательском типе поста И чтобы эти заголовки фильтровались по термину, выбранному в предыдущем раскрывающемся списке. Можно ли получить значение раскрывающегося списка в Gravity Forms и передать это значение в качестве параметра в $ args для использования функции get_posts ($ args)?
Я начал использовать следующий учебник в качестве руководства. https://docs.gravityforms.com/dynamically-populating-drop-down-fields/
add_filter( 'gform_pre_render_3', 'populate_procedures' );
add_filter( 'gform_pre_validation_3', 'populate_procedures' );
add_filter( 'gform_pre_submission_filter_3', 'populate_procedures' );
add_filter( 'gform_admin_pre_render_3', 'populate_procedures' );
function populate_procedures( $form ) {
// Procedure Category Dropdown
foreach ( $form['fields'] as &$field ) {
Первое поле. Следующий код заполняет раскрывающееся поле, содержащее список всех терминов в пользовательском типе сообщения (процедура):
if ( $field->type != 'select' || strpos( $field->cssClass, 'populate_procedure_categories' ) === false ) {
continue;
}
$terms = get_terms( array(
'taxonomy' => 'procedure_category',
'orderby' => 'name',
'order' => 'ASC',
) );
// 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( 'post_type=procedure&numberposts=-1&post_status=publish' );
$choices = array();
foreach ( $terms as $term ) {
$choices[] = array( 'text' => $term->name, 'value' => $term->name );
}
// update 'Select a Post' to whatever you'd like the instructive option to be
$field->placeholder = 'Select Procedure Category';
$field->choices = $choices;
Второе поле. Следующий код динамически заполняет поле всеми заголовками сообщений пользовательского типа записи (процедура). Я хочу отфильтровать эти результаты на основе значения, выбранного выше.
if ( $field->type != 'select' || strpos( $field->cssClass, 'populate_procedures' ) === false ) {
continue;
}
$args = array(
'post_status' => 'publish',
'post_type' => 'procedure',
'procedure_category' => 'cardiovascular',
);
$posts = get_posts( $args );
$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 Procedure';
$field->choices = $choices;
}
return $form;
}
Второе динамически заполненное поле успешно извлекает отфильтрованный список заголовков сообщений на основе $ args, если я явно перечислил термин (вПример выше я использовал «сердечно-сосудистые»). Меня интересует, есть ли способ получить значение предыдущего поля и использовать его для фильтрации результатов второго поля (без перезагрузки страницы). Есть идеи? Имеет ли Gravity Forms такую встроенную функциональность?