首页 > 解决方案 > Gravity Forms - 访问在简码中定义的字段

问题描述

我正在使用 Gravity Forms 编写评分系统。每个帖子旁边都有一个“投票”链接,它会打开一个灯箱,里面有重力形式的简码。简码填充两个隐藏字段 - 帖子 ID 和用户 ID:

[gravityform id="2" field_values="gf_rating_post=123&gf_rating_user=456" title="false" description="false" ajax="true" tabindex="49"]

表单内部是下拉菜单,用于对各种元素进行评分,从 1 到 10。我正在尝试编写代码以使用下拉列表中先前选择的值插入 SELECTED,但我需要能够引用 Post ID 才能检索先前选择的值。

add_filter('gform_pre_render_2', 'ac_populate_post_ratings');
add_filter('gform_pre_validation_2', 'ac_populate_post_ratings');
add_filter('gform_pre_submission_filter_2', 'ac_populate_post_ratings');
add_filter('gform_admin_pre_render_2', 'ac_populate_post_ratings');
function ac_populate_post_ratings($form) {

    foreach ( $form['fields'] as &$field ) {

        if ( $field->type != "select" || strpos( $field->cssClass, 'populate-posts' ) ) {
            continue;
        }

        $choices = $field->choices;

        foreach ( $choices as $choice ) {

            // echo "defaultValue: " . $field->defaultValue . "<br />";
            $newchoices[] = array( 'text' => $choice['text'], 'value' => $choice['value'] );

        }            

        $field->choices = $newchoices;
    }

    return $form;
}

似乎因为 Post ID 值是动态添加到表单中的,所以无法使用字段的 defaultValue 来引用它,即使您查看源代码时输入值设置正确,它也始终为空。

有什么想法可以在ac_populate_post_ratings()函数中引用该 Post ID 吗?

标签: wordpressgravity-forms-plugin

解决方案


作为最后的努力,我联系了 Gravity Forms 支持,他们收到了货物。

只有在表单编辑器中配置了该设置,该字段defaultValue属性才会包含一个值。动态填充的值不能从$form.

过滤器在其第三个参数gform_pre_render中传递来自短代码的动态人口值。

我需要改变这一行:

add_filter('gform_pre_render_2', 'ac_populate_post_ratings');`

对此:

add_filter('gform_pre_render_2', 'ac_populate_post_ratings', 10, 3 );`

而这一行:

function ac_populate_post_ratings($form) {

对此:

function ac_populate_post_ratings( $form, $ajax = false, $field_values = array() ) {

现在我可以像这样访问这些值:

$gf_rating_post = rgar( $field_values, 'gf_rating_post' );

推荐阅读