Контактная форма 7 - Значения загрузки нескольких файлов в виде ссылок в электронном письме - PullRequest
0 голосов
/ 22 февраля 2019

Я использую плагин «Контактная форма 7 Загрузка файлов с перетаскиванием - загрузка нескольких файлов» (https://codecanyon.net/item/contact-form-7-drag-and-drop-files-upload-multiple-files-upload/20683653) плагин в моей форме. Загрузки могут быть довольно большими, поэтому я не хочу, чтобы они прикреплялись к почтевместо этого есть ссылки на загруженные файлы в почте.

Я удалил тег из поля почтового вложения и добавил его в тело письма, надеясь, что он выведет ссылки на загруженный файл:

 <p><strong>IMAGES</strong><br/><br/>[dropfiles-291]</a></p>

Но выводятся только имена файлов, разделенные "|". Например: 'imagename1.jpg | imagename2.jpg | imagename3.jpg | imagename4.jpg'.

После некоторого поиска янашел этот код в коде плагина перетаскивания:

add_filter('wpcf7_mail_tag_replaced_dropfiles', array($this, 'wpcf7_mail_tag_replaced'), 100, 3);

function wpcf7_mail_tag_replaced($text, $submitted, $html ){
    $upload_dir   = wp_upload_dir();
    $datas = explode("|",$text);
    $url = $upload_dir["baseurl"]."/cf7-uploads-save/";
    $text_custom = array();

    foreach ($datas as $value) {
        $text_custom[] = $url.$value;
    }
    if($html){
        return implode(" <br>", $text_custom);
    }else{
        return implode(" | ", $text_custom);
    }           

}

Я не являюсь разработчиком php, но мне кажется, что этот код должен обернуть загруженные файлы ссылкой в ​​сообщении электронной почты.это не работает. И после обширных онлайн-исследований я изменил код на:

add_filter('wpcf7_mail_tag_replaced', array($this, 'wpcf7_mail_tag_replaced_dropfiles'), 100, 3);

function wpcf7_mail_tag_replaced_dropfiles( $text, $submitted, $html ){        

    $upload_dir = wp_upload_dir();
    $datas = explode("|",$text);
    $url = $upload_dir["baseurl"]."/cf7-uploads-save/";
    $text_custom = array();

    foreach ($datas as $value) {
        $text_custom[] = $url.$value;
    }
    if($html){
        return implode(" <br>", $text_custom);}
        else{return implode(" | ", $text_custom);}               

}

Письмо теперь имеет желаемый эффект ссылки, но на ВСЕ отправленные поля в форме, а не только на [dropfiles] fieLDS.Поля [dropfiles] отлично смотрятся со ссылкой на каждый загруженный файл в новой строке и т. Д. Но я, разумеется, не хочу, чтобы обычные поля text, textarea, checkbox, radio и т. Д. Также были ссылками.

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

Ответы [ 2 ]

0 голосов
/ 25 августа 2019

Я потратил ЧАСЫ на устранение этой проблемы, но думаю, что нашел проблему.

Я заметил, что это произошло, когда я использовал тег dropfiles в качестве обязательного поля.[dropfiles * ...]

В контактной форме 7 есть функция "replace_tags_callback", которая применяет фильтр "wpcf7_mail_tag_replaced _ {$ type}".

Проблема заключается в том, что {$ type} получаетиз типа $ form_tag->, который в нашем случае может быть как «dropfiles» или «dropfiles *».Если CF7 получит его, используя $ form_tag-> basetype, он будет одинаковым для обоих тегов.

Поэтому, чтобы решить проблему, я добавил фильтр для «dropfiles *» в строке 7 в contact-form-7-drop-files / frontend / index.php

add_filter('wpcf7_mail_tag_replaced_dropfiles*', array($this, 'wpcf7_mail_tag_replaced'), 100, 3);

Итак, начало класса теперь выглядит так:

function __construct(){
    add_action("wp_enqueue_scripts",array($this,"add_lib"));
    add_filter('wpcf7_form_response_output', array($this,'add_settings'),999999,4);
    add_filter('wpcf7_mail_tag_replaced_dropfiles', array($this, 'wpcf7_mail_tag_replaced'), 100, 3);
    add_filter('wpcf7_mail_tag_replaced_dropfiles*', array($this, 'wpcf7_mail_tag_replaced'), 100, 3);
}
function wpcf7_mail_tag_replaced($text, $submitted, $html ){
    $upload_dir   = wp_upload_dir();
    $datas = explode("|",$text);
    $url = $upload_dir["baseurl"]."/cf7-uploads-save/";
    $text_custom = array();

    foreach ($datas as $value) {
        $text_custom[] = $url.$value;
    }
    if($html){
        return implode(" <br>", $text_custom);
    }else{
        return implode(" | ", $text_custom);
    }



}

Я сообщил об ошибке автору плагина и надеюсь, что он / онаобновлю в следующей версии.

0 голосов
/ 25 февраля 2019

Я нашел временное решение - только до тех пор, пока не получу постоянное решение от разработчика плагина.Я изменил код следующим образом:

add_filter('wpcf7_mail_tag_replaced', array($this, 'wpcf7_mail_tag_replaced_dropfiles'), 100, 3);

function wpcf7_mail_tag_replaced_dropfiles( $text, $submitted, $html ){        
if(preg_match('/\.(jpg|png|jpeg|gif)$/', $submitted))  {
    $upload_dir = wp_upload_dir();
    $datas = explode("|",$text);
    $url = $upload_dir["baseurl"]."/cf7-uploads-save/";
    $text_custom = array();

    foreach ($datas as $value) {
        $text_custom[] = $url.$value;
    }
    if($html){
        return implode(" <br>", $text_custom);}
        else{return implode(" | ", $text_custom);}               
    } 

    return $text; 
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...