Получить значение поля в формах гравитации и использовать это значение в качестве параметра php?

Я пытаюсь динамически заполнить два раскрывающихся поля в форме 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 такая встроенная функция?


person Kasia    schedule 01.11.2019    source источник


Ответы (1)


Используя этот метод, вам нужно будет использовать несколько страниц и добавить второе раскрывающееся поле на вторую страницу формы. Затем, когда пользователь отправляет первую страницу, вы можете получить доступ к значению первого раскрывающегося списка из $ _POST. У Gravity Forms есть вспомогательный метод для этого под названием rgpost(). Вот как может выглядеть ваш $args:

$args = array(
    'post_status' => 'publish',
    'post_type' => 'procedure',
    'procedure_category' => rgpost( 'input_FIELDID' ),
);

Замените FIELDID идентификатором поля вашего первого раскрывающегося списка.

С учетом сказанного, если вы хотите сделать это, не касаясь кода, попробуйте Gravity Forms Populate Anything.

https://gravitywiz.com/documentation/gravity-forms-populate-anything/ < / а>

person Dave from Gravity Wiz    schedule 04.11.2019
comment
Спасибо, Дэйв. Мне почти удалось заставить его работать так, как мне нужно, благодаря вашей помощи - но вместо этого я куплю ваш плагин! - person Kasia; 06.11.2019
comment
С нетерпением ждем ваших отзывов. ???? - person Dave from Gravity Wiz; 07.11.2019