Как в письме получить изображение товара contact form 7?

Ссылка скопирована
1 ответ

Создал пользовательский тег [img] для contact form 7, чтобы отобразить изображение текущего поста/товара в форме. Мне удалось вывести изображение товара в форме обратной связи которую я создал, однако я не могу передать это изображение в письме. Я пробовал разные варианты:

  1. Формировал url типа uploads/2023/.../.jpg (так как в документации сказано, что в целях безопасности, все, что находится за приделами /wp-content/ не будет считаться.
  2. Использовал тег [img] в области для вложенных файлов и в теле письма.
  3. Задавал имя [img img-name] и использовал в области для вложенных файлов и в теле письма.

Ничего не помогло.

Вот, собственно, моя функция:

/**  * Return product image for CF7 tag.  *  * @param array $tag  * @return string  */ function custom_add_form_tag_img_handler($tag) {     global $post; // Use $post to get the current post object.      // Check if we're on a WooCommerce product page.     if (function_exists('is_product') && is_product()) {         $product_id = get_the_ID(); // Get the current post (product) ID.         $product = wc_get_product($product_id); // Get the product object.          $image_url = get_the_post_thumbnail_url($product_id);          if ($image_url) {             return '<img src="' . esc_url($image_url) . '" alt="Изображение товара" class="ar-form__img">';         }  		// if ($image_url) {         //     return ltrim(wp_make_link_relative(esc_url($image_url)), '/wp-content/' );         // }     }      return ''; }  /**  * Hook to add custom 'img' tag to CF7.  * Usage in CF7: [img]  */ function custom_add_form_tag_img() {     wpcf7_add_form_tag('img', 'custom_add_form_tag_img_handler', array( 'name-attr' => true )); }  add_action('wpcf7_init', 'custom_add_form_tag_img');

/** * Return product image for CF7 tag. * * @param array $tag * @return string */ function custom_add_form_tag_img_handler($tag) { global $post; // Use $post to get the current post object. // Check if we're on a WooCommerce product page. if (function_exists('is_product') && is_product()) { $product_id = get_the_ID(); // Get the current post (product) ID. $product = wc_get_product($product_id); // Get the product object. $image_url = get_the_post_thumbnail_url($product_id); if ($image_url) { return '<img src="' . esc_url($image_url) . '" alt="Изображение товара" class="ar-form__img">'; } // if ($image_url) { // return ltrim(wp_make_link_relative(esc_url($image_url)), '/wp-content/' ); // } } return ''; } /** * Hook to add custom 'img' tag to CF7. * Usage in CF7: [img] */ function custom_add_form_tag_img() { wpcf7_add_form_tag('img', 'custom_add_form_tag_img_handler', array( 'name-attr' => true )); } add_action('wpcf7_init', 'custom_add_form_tag_img');

Дополнительно:

Нужно решить такую задачу?

Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

Заказать помощь
Лучший ответ
1
Артём Dev Ответ

В Contact Form 7 есть разница между “показать изображение в форме” и “передать изображение в письме”. Тег, который Вы сделали для вывода картинки на странице, не становится автоматически mail tag и не становится вложением. Для письма CF7 должен получить либо текстовое значение тега, либо путь к файлу, который можно прикрепить.

Если достаточно вставить картинку в тело письма, проще передать URL изображения как hidden field, а в шаблоне письма вывести ссылку или HTML. Например, добавить скрытое поле [hidden product_image_url] и заполнить его через фильтр/JS. Но многие почтовые клиенты режут внешние картинки, поэтому лучше отправлять URL, а не ожидать идеального отображения.

Если нужно именно вложение, в поле “File attachments” должен попасть путь к файлу на сервере, а не URL. Путь должен быть внутри разрешённой директории, и CF7 должен разрешить это вложение. Это сложнее и часто не нужно.

Для товара WooCommerce можно добавить mail tag:

add_filter('wpcf7_special_mail_tags', function ($output, $name) {
    if ($name !== 'product_image_url') {
        return $output;
    }
 
    $post_id = get_the_ID();
    $image_id = get_post_thumbnail_id($post_id);
 
    return $image_id ? wp_get_attachment_url($image_id) : '';
}, 10, 2);

add_filter('wpcf7_special_mail_tags', function ($output, $name) { if ($name !== 'product_image_url') { return $output; } $post_id = get_the_ID(); $image_id = get_post_thumbnail_id($post_id); return $image_id ? wp_get_attachment_url($image_id) : ''; }, 10, 2);

После этого в письме используйте [_product_image_url], если регистрируете special mail tag с подчёркиванием по правилам CF7, либо свой обычный hidden tag. В большинстве случаев лучший вариант — отправлять название товара, ссылку на товар и URL изображения. Вложения картинок утяжеляют письма и чаще попадают в спам.

Другие ответы (0)

Пока нет других ответов. Будьте первым, кто поможет автору.

Ответить на вопрос

комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Вам также может быть интересно