基于ACF帖子类型字段的GravityForms预填充字段值-动态

时间:2019-12-10 02:32:04

标签: php wordpress advanced-custom-fields elementor

我有一个自定义帖子类型,并且正在使用Elementor,PAFE和ACF Pro和Gravity Forms。出于视觉原因,我使用了PAFE / Elementor,并且在表单处理结束时,我创建了一个自定义帖子类型“合同”,然后在创建合同后将其重定向到上面带有重力形式的页面(隐藏ACF值) 。我希望与合同关联的“自定义字段值”与重力形式共享,但是我没有成功映射它。

我已经尝试过了,但是没有运气。我不确定我需要在自定义值中加载哪个GravityForms过滤器。

参考: https://docs.gravityforms.com/gform_field_value_parameter_name/

add_filter( 'gform_field_value', 'populate_fields');


function populate_fields( $value, $field, $name ) {

    $values = array(
        'pc'   => get_field('pc',),
        'dc'   => get_field('dc'),
        'tt'   => get_field('tt'),
        'rd'   => get_field('rd'),
        'vl'   => get_field('vl'),
        'on'   => get_field('on'),
        'fn'   => get_field('fn'),
        'ln'   => get_field('ln'),
        'cp'   => get_field('cp'),
        'ph'   => get_field('ph'),
        'e'   => get_field('e'),
        'apd'   => get_field('apd'),
        'tariff'   => get_field('tariff'),
        'c2c'   => get_field('c2c'),
        'tsc'   => get_field('tsc'),
        'awc'   => get_field('awc'),
        'pp_address'   => get_field('pp_address'),
        'pp_fn'   => get_field('pp_fn'),
        'pp_ln'   => get_field('pp_ln'),
        'pp_biz'   => get_field('pp_biz'),
        'pp_ph'   => get_field('pp_ph'),
        'pp_notes'   => get_field('pp_notes'),
        'do_address'   => get_field('do_address'),
        'do_fn'   => get_field('do_fn'),
        'do_ln'   => get_field('do_ln'),
        'do_biz'   => get_field('do_biz'),
        'do_notes'   => get_field('do_notes')
    );

    return isset( $values[ $name ] ) ? $values[ $name ] : $value;
}

2 个答案:

答案 0 :(得分:0)

您必须检查ACF字段和重力形式密钥是否有效。您还可以在从get_field()获取数据时传递id,如下所示:

此示例显示了各种$ post_id值,用于从帖子,用户,术语和选项中获取值。

$post_id = false; // current post
$post_id = 1; // post ID = 1
$post_id = "user_2"; // user ID = 2
$post_id = "category_3"; // category term ID = 3
$post_id = "event_4"; // event (custom taxonomy) term ID = 4
$post_id = "option"; // options page
$post_id = "options"; // same as above

$value = get_field( 'my_field', $post_id );

我希望它能对您有所帮助。

答案 1 :(得分:0)

谢谢您的成功,我能够使它像这样工作,但是我没有分配变量来节省一些时间,可能就性能而言,这不是最佳实践,但是它可以工作。 :


function populate_fields( $value, $field, $name ) {                                  

    //to use current post                                                                             
    $post_id = false;                                                                                                      

    $values = array(                                                                 
        'do_notes'   => get_field( 'do_notes', $post_id ),                                                    
    );                                                                               

    return isset( $values[ $name ] ) ? $values[ $name ] : $value;                    
}