2016-10-05 3 views
1

J'essaye de mettre à jour dynamiquement le champ CF7 en remplaçant la chaîne de destinataire par une valeur de champ de courrier personnalisée, bien que je n'arrive pas à déterminer comment attribuer la valeur. la chaîne comme je reçois une erreur et si je change d'email il envoie. Donc, cela me dit que le problème est lorsque j'essaie d'obtenir la valeur.Courriel dynamique dans CF7 (utilisant des champs personnalisés)

<?php 
function wpcf7_dynamic_email_field($args) { 
    $dynamic_email = get_post_meta(get_the_ID(), 'dynamic_email', true); 
    if(!empty($args['recipient'])) { 
    $args['recipient'] = str_replace('[email protected]', $dynamic_email["dynamic_email"], $args['recipient']); 
    return $args; 
    } 
    return false; 
} 
add_filter('wpcf7_mail_components', 'wpcf7_dynamic_email_field'); 
?> 

Est-ce que quelqu'un peut me pointer dans la bonne direction ici? Mon champ personnalisé est appelé dynamic_email et j'ai besoin de la valeur

Répondre

1

get_the_id() ne retournera pas l'identifiant correct car le formulaire de contact 7 utilise Ajax pour effectuer l'envoi.

Vous pouvez obtenir l'ID poste à partir de l'étiquette de l'unité de soumission. L'étiquette d'unité est un champ de formulaire caché qui est posté avec le formulaire et il semble énigmatique, mais il stocke des informations sur le poste. Un exemple de tag d'unité ressemble à wpcf7-f235-p27-o1. En utilisant une regex, nous pouvons extraire l'identifiant de publication de l'étiquette d'unité.

function wpcf7_dynamic_email_field($args) { 

    $dynamic_email = ''; 
    $submission = WPCF7_Submission::get_instance(); 
    $unit_tag = $submission->get_meta('unit_tag'); 

    // get the post ID from the unit tag 
    if ($unit_tag && preg_match('/^wpcf7-f(\d+)-p(\d+)-o(\d+)$/', $unit_tag, $matches)) { 
     $post_id = absint($matches[2]); 
     $dynamic_email = get_post_meta($post_id, 'dynamic_email', true); 
    } 

    if ($dynamic_email) { 
     $args['recipient'] = str_replace('[email protected]', $dynamic_email["dynamic_email"], $args['recipient']); 
    } 

    return $args; 
} 

add_filter('wpcf7_mail_components', 'wpcf7_dynamic_email_field'); 

Comme c'est un filtre et non une action que vous voulez toujours revenir le premier paramètre qui a été passé à votre rappel dans ce cas $args.

+0

Merci, c'est une information vraiment utile que je ne connaissais pas. Le formulaire de contact semble envoyer maintenant, mais l'e-mail ne vient pas, donc je ne suis pas sûr si c'est une erreur dans la façon dont j'ai appelé mon champ personnalisé? Ai-je raison de dire qu'il devrait appeler le premier email dans ce domaine? –

+0

Essayez de changer '$ dynamic_email [" dynamic_email "]' simplement $ 'dynamic_email' dans votre appel' str_replace' – Jrod

+0

Ouais j'ai essayé mais en vain. J'ai essayé de changer 'get_post_meta_values ​​($ post_id, 'dynamic_email', true)' aussi mais il n'a pas semblé envoyer l'email - pas de soucis. Je vais continuer à creuser. –