Gravity Custom Merge Tags

时间:2013-11-06 作者:Rizzo

我按照的建议创建了一些自定义概要文件字段Thomas GriffinStephanie Leary. 像这样:

function change_contactmethod( $contactmethods ) {
  // Add some fields
  $contactmethods[\'twitter\'] = \'Twitter Name (no @)\';
  $contactmethods[\'phone\'] = \'Phone Number\';
  $contactmethods[\'title\'] = \'Title\';
  // Remove AIM, Yahoo IM, Google Talk/Jabber
  unset($contactmethods[\'aim\']);
  unset($contactmethods[\'yim\']);
  unset($contactmethods[\'jabber\']);
  // make it go!
  return $contactmethods;
}
add_filter(\'user_contactmethods\',\'change_contactmethod\',10,1);
我想为重力表单创建一个自定义合并标记,以通过用户的电话号码输出($contactmethods[\'phone\']).

我可以通过两种不同的方式检索此信息:

方式1:

function phone() {
    $userid = get_current_user_id();
    $user_info = get_userdata($userid);
    return get_user_meta($userid, \'phone\', true);
}
或方式2:

function phone() {
    echo the_author_meta(\'phone\', $current_author->ID);
}
我甚至可以创建[phone] 通过添加短代码:

add_shortcode(\'phone\', \'phone\');
当我尝试添加[phone] 短代码作为重力表单中的默认输入值,它不处理短代码。重力有一种叫做短标签的东西,我从documentation on Gravity 那个{user:[meta_key]} 可以作为{user:phone}, 但我还没有将其设置为合并标记。我对JavaScript不太熟悉,我所做的设置此合并标记的工作不起作用:

add_action("gform_admin_pre_render", "add_merge_tags");
function add_merge_tags($form){
    $mergeTags["phone"] = the_author_meta(\'phone\', $current_author->ID);
?>
<script type="text/javascript">
    gform.addFilter("gform_merge_tags", "add_merge_tags");
    function add_merge_tags(mergeTags, elementId, hideAllFields, excludeFieldTypes, isPrepop, option){
        mergeTags["phone"].tags.push({ tag: \'{phone}\', label: \'Phone\' });

        return mergeTags;
    }
</script>
<?php
    //return the form object from the php hook  
    return $form;
}
如何为添加的自定义元字段创建自定义合并标记?或者如何允许我的字段输入读取[phone] 短代码?

1 个回复
最合适的回答,由SO网友:webaware 整理而成

您需要使用添加新的合并标记gform_custom_merge_tags filter, 然后用gform_replace_merge_tags filter, 像这样:

编辑:您需要使用gform_field_content filter 要替换字段的默认值,请参见下文。

add_filter(\'gform_custom_merge_tags\', \'wpse_121476_custom_merge_tags\', 10, 4);
add_filter(\'gform_replace_merge_tags\', \'wpse_121476_replace_merge_tags\', 10, 7);
add_filter(\'gform_field_content\', \'wpse_121476_field_content\', 10, 5);

/**
* add custom merge tags
* @param array $merge_tags
* @param int $form_id
* @param array $fields
* @param int $element_id
* @return array
*/
function wpse_121476_custom_merge_tags($merge_tags, $form_id, $fields, $element_id) {
    $merge_tags[] = array(\'label\' => \'User Phone\', \'tag\' => \'{user_phone}\');

    return $merge_tags;
}

/**
* replace custom merge tags in notifications
* @param string $text
* @param array $form
* @param array $lead
* @param bool $url_encode
* @param bool $esc_html
* @param bool $nl2br
* @param string $format
* @return string
*/
function wpse_121476_replace_merge_tags($text, $form, $lead, $url_encode, $esc_html, $nl2br, $format) {
    $userid = get_current_user_id();
    $phone = $userid ? get_user_meta($userid, \'phone\', true) : \'\';
    $text = str_replace(\'{user_phone}\', $phone, $text);

    return $text;
}

/**
* replace custom merge tags in field content
* @param string $field_content
* @param array $field
* @param string $value
* @param int $lead_id
* @param int $form_id
* @return string
*/
function wpse_121476_field_content($field_content, $field, $value, $lead_id, $form_id) {
    if (strpos($field_content, \'{user_phone}\') !== false) {
        $userid = get_current_user_id();
        $phone = $userid ? get_user_meta($userid, \'phone\', true) : \'\';
        $field_content = str_replace(\'{user_phone}\', $phone, $field_content);
    }

    return $field_content;
}

结束

相关推荐