web-dev-qa-db-fra.com

Balises de fusion personnalisées Gravity

J'ai créé des champs de profil personnalisés en suivant les conseils de Thomas Griffin et Stephanie Leary . Ainsi:

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);

Je souhaite créer une balise de fusion personnalisée pour Gravity Forms à afficher par numéro de téléphone de l'utilisateur ( $contactmethods['phone'] ).

Je peux récupérer cette information de deux manières différentes:

Voie 1:

function phone() {
    $userid = get_current_user_id();
    $user_info = get_userdata($userid);
    return get_user_meta($userid, 'phone', true);
}

ou voie 2:

function phone() {
    echo the_author_meta('phone', $current_author->ID);
}

Je peux même créer un shortcode [phone] en ajoutant:

add_shortcode('phone', 'phone');

Lorsque j'essaie d'ajouter mon shortcode [phone] en tant que valeur d'entrée par défaut dans Gravity Forms, il ne traite pas le shortcode. Gravity a ces choses appelées balises courtes, ce qui, d'après la documentation sur Gravity , pourrait utiliser {user:[meta_key]} comme {user:phone}, mais je ne l'ai pas encore défini comme balise de fusion. Je ne connais pas trop JavaScript et ce que je fais pour configurer cette balise de fusion ne fonctionne pas:

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;
}

Comment créer une balise de fusion personnalisée pour un champ méta personnalisé ajouté? Ou comment autoriser mes entrées de champ à lire mon shortcode [phone]?

1
Rizzo

Vous devez ajouter les nouvelles balises de fusion avec le filtre gform_custom_merge_tags , puis les remplacer par le filtre gform_replace_merge_tags , comme suit:

Edit: vous devez utiliser le filtre gform_field_content pour remplacer la valeur par défaut du champ, voir ci-dessous.

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;
}
5
webaware