Как в письме получить изображение товара contact form 7?
Создал пользовательский тег [img] для contact form 7, чтобы отобразить изображение текущего поста/товара в форме. Мне удалось вывести изображение товара в форме обратной связи которую я создал, однако я не могу передать это изображение в письме. Я пробовал разные варианты:
- Формировал url типа uploads/2023/.../.jpg (так как в документации сказано, что в целях безопасности, все, что находится за приделами /wp-content/ не будет считаться.
- Использовал тег [img] в области для вложенных файлов и в теле письма.
- Задавал имя [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');
Дополнительно:
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос
В 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);
После этого в письме используйте
[_product_image_url], если регистрируете special mail tag с подчёркиванием по правилам CF7, либо свой обычный hidden tag. В большинстве случаев лучший вариант — отправлять название товара, ссылку на товар и URL изображения. Вложения картинок утяжеляют письма и чаще попадают в спам.