2013-02-21 4 views
1

Может ли кто-нибудь помочь мне найти способ скрыть поля в отправляемом электронном письме?Контактная форма 7 в Wordpress - Как я могу скрыть незаполненные поля в сообщении электронной почты?

В принципе у меня есть несколько строк (например, список нескольких заказов), и если пользователь заполняет только верхнюю строку, я не хочу, чтобы другие пустые строки вообще отображались в сообщении электронной почты.

Вот часть кода для формы (но есть еще 8 строк, т.е. 10 заказов):

<tr class="stationary-order-input"> 
     <td>[text order-1-page-number]</td> 
     <td>[text order-1-item-number]</td> 
     <td>[text order-1-item-description]</td> 
     <td>[text order-1-quantity]</td> 
    </tr> 
    <tr class="stationary-order-input"> 
     <td>[text order-2-page-number]</td> 
     <td>[text order-2-item-number]</td> 
     <td>[text order-2-item-description]</td> 
     <td>[text order-2-quantity]</td> 
    </tr> 

А вот раздел о том, как моя электронная почта установлен (до порядка 10):

ORDER 1 - Details: 

Page number: [page-number] 
Item number: [item-number] 
Item description: [item-description] 
Quantity: [quantity] 

ORDER 2 - Details: 

Page number: [order-2-page-number] 
Item number: [order-2-item-number] 
Item description: [order-2-item-description] 
Quantity: [order-2-quantity] 

В настоящее время все 10 заказов будут отображаться по электронной почте, даже если пользователь не выполнил их все. Итак, как я могу скрыть эти неполные поля в электронной почте?

Пожалуйста, помогите!

ответ

1

Попробуйте следующий фильтр, не протестировав его на живом сайте, и мой местный сайт не отправляет электронные письма, поэтому я не уверен.

Как CF7 имеет некоторые внутренние ценности, я думаю, что лучше, чтобы проверить для каждого поля в отдельности, например, your-address, your-phone и т.д.:

add_filter('wpcf7_posted_data', 'cf7_so_15007502'); 

function cf7_so_15007502($posted_data) 
{ 
    if(isset($posted_data['your-address']) && '' == $posted_data['your-address']) 
     unset($posted_data['your-address']); 

    if(isset($posted_data['your-phone']) && '' == $posted_data['your-phone']) 
     unset($posted_data['your-phone']); 

    return $posted_data; 
} 
+0

Спасибо @brasofilo, я попробую это. Так это происходит в functions.php? Где угодно? – user1794295

+1

@ user1794295, два варианта, пользовательский плагин или 'functions.php', см. [Где я помещаю фрагменты кода, которые я нашел здесь или где-то еще в Интернете?] (Http://wordpress.stackexchange.com/q/ 72160/12615) и [Куда поместить мой код: плагин или functions.php?] (Http://wordpress.stackexchange.com/q/73031/12615) – brasofilo

+0

Спасибо, но я боюсь, что это не совсем верно для того, что я я делаю так, как я надеялся скрыть ненужный текст в электронном письме (т.е. части, относящиеся к полям формы, которые не заполнены). Думаю, мне, возможно, придется подумать о том, как отформатировано электронное письмо ... – user1794295

1

В поле почты 1 в контактной форме 7 есть проверка в нижней части поля электронной почты. он указывает, что строки Exclude с пустыми почтовыми тегами с выхода помещают на него галочку. затем сохраните форму

Теперь, когда клиенты заполняют форму и не заполняют какие-либо поля, они не будут отображаться в вашем письме.

0

Здесь более динамичный способ удалить теги Contact Form 7 из почты.

function on_wpcf7_mail_components($data, $form, $mail) 
{   
    foreach ((array) $form->form_scan_shortcode() as $shortcode) 
    { 
     if (empty($shortcode['name'])) 
     { 
      continue; 
     } 

     $tag = sprintf('[%s]', $shortcode['name']); 

     $data['body'] = str_replace($tag , '', $data['body']); 
    } 

    return $data; 
} 

add_filter('wpcf7_mail_components', 'on_wpcf7_mail_components', 10, 3); 
0

Просто установите флажок параллельно текст «Исключить строки с пустыми почтовыми тегами от выхода», под полем тела сообщения.