2016-10-05 5 views
1

私は動的にCF7をフィールドに更新しようとしていますが、受信側の文字列をカスタム投稿フィールドの値に置き換えていますが、私はエラーを取得し、私はそれが送信する電子メールを変更すると、文字列。それで、問題を私が価値を得ようとしている時だと私に伝えます。CF7の動的メール(カスタムフィールドを使用)

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

誰でも正しい方向に向けることができますか?私のカスタムフィールドはdynamic_emailと呼ばれ、値が必要です

答えて

1

get_the_id()連絡先フォーム7はAjaxを使用して送信を実行するため、適切なIDを返しません。

提出単位タグから投稿IDを取得できます。ユニットタグは、フォームとともに投稿される隠れたフォームフィールドであり、わかりにくいようですが、ポストに関する情報を格納します。単位タグの例はwpcf7-f235-p27-o1のようになります。正規表現を使用すると、単位タグから投稿IDを取得できます。

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

これはフィルタではなく、いつでもこの場合$argsであなたのコールバックに渡された最初のパラメータを返すようにしたいアクションですので。

+0

ありがとう、これは私が知らなかった本当に有用な情報です。連絡フォームは送信されているように見えますが、電子メールは届かないので、カスタムフィールドと呼ばれる方法でエラーが発生するかどうかはわかりません。私はこの分野の最初の電子メールを呼び出すべきですか? –

+0

あなたの 'str_replace'呼び出しで' $ dynamic_email ["dynamic_email"] 'を' $ dynamic_email'に変更しようとしてください。 – Jrod

+0

ええ、私はそれを試みましたが、無駄です。私は 'get_post_meta_values($ post_id、 'dynamic_email'、true)'を変更しようとしましたが、電子メールを送信していないようです - 心配する必要はありません。私は掘り続けます。 –

関連する問題