Получить значение поля в гравитационных формах и использовать это значение в качестве параметра php? - PullRequest
0 голосов
/ 01 ноября 2019

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

1 Ответ

0 голосов
/ 04 ноября 2019

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

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

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

При этом, если вы хотите выполнить это без необходимостинажмите любой код , попробуйте Гравитационные формы Заполните что-нибудь .

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

...