Хочу при помощи вебхуков вставить в тело письма Contact Form 7 фото товара, со страницы которого данная форма отправляется.
Нашел очень хороший плагин, который добавляет это самое фото во вложение к письму:
// Add product image to email as an attachment
add_filter( 'wpcf7_mail_components', 'dcwd_cf7_mail_components', 10, 3 );
function dcwd_cf7_mail_components( $components, $current_cf7_form, $form_object ) {
$cf7_form_id = 10454;
// Verify that the we are processing the correct form.
if ( $cf7_form_id == $current_cf7_form->id() ) {
// Ensure that a match was found.
if ( 1 === preg_match( '/Product ID: (\d+)/m', $components[ 'body' ], $matches ) ) {
$product_id = $matches[1];
// Check that the matched product ID is a number.
if ( ( $product_id > 0 ) && is_numeric( $product_id ) ) {
// Create a product object...
$product = wc_get_product( $product_id );
// checking that the ID is a valid product...
if ( is_object( $product ) ) {
// then get the product image url.
$product_image_url = wp_get_attachment_image_src( $product->get_image_id(), 'large' )[ 0 ];
if ( $product_image_url ) {
// Change the url to an absolute path to include it in the email.
$product_image_path = str_replace( WP_CONTENT_URL, WP_CONTENT_DIR, $product_image_url );
// Verify that the file exists before appending it to the attachments array.
if ( file_exists( $product_image_path ) ) {
$components[ 'attachments' ][] = $product_image_path;
}
}
}
}
}
}
return $components;
}
Есть также вот такой код от другого автора для добавления ссылки на фото в само письмо:
<?php
add_filter( 'wpcf7_before_send_mail', 'wpcf7_before_send_mail_start_function' );
function wpcf7_before_send_mail_start_function($cf7){
//Get the form ID
$form_id = $contact_form->id();
//Do something specifically for form with the ID "123"
if( $form_id == 10454 ) {
$mail = $cf7->prop('mail');
if($mail){
$postr = $_POST['_wpcf7_container_post'];//получаем id поста с которого отправлена форма
$imgges_url = get_the_post_thumbnail_url($postr,'full');//получаем ссылку на картинку
//$imgges = get_the_post_thumbnail($postr,'thumbnail');//получаем саму картинку с тегом img
$mail['body'].='Фото товара'."$imgges_url";// допишем в конец письма ссылку
$cf7->set_properties(array('mail'=>$mail));//
}
}
}
Но данный вариант не совсем то, что мне нужно.
Я пытался объединить два этих кода, чтобы абсолютная ссылка на фото из первого кода отправлялась через before send mail из второго пункта, но скорее всего проблема в том, что я неправильно вызываю функции при объединении этих строк кода.
Вот что я пытался сделать, добавил комментарии и перевел некоторые комментарии автора первого кода (*** - неточный перевод):
<?php
// Добавил к фильтрам из первого кода фильтры из второго
add_filter( 'wpcf7_mail_components', 'dcwd_cf7_mail_components', 'wpcf7_before_send_mail', 'wpcf7_before_send_mail_start_function' );
// Думаю в данном случае мне нужна функция из второго кода, поэтому вызвал её, но на всякий случай добавил элементы из первого ($current_cf7_form, $form_object)
function wpcf7_before_send_mail_start_function($cf7, $current_cf7_form, $form_object){
$cf7_form_id = 10454;
// Проверяем что мы работаем с нужной формой
if ( $cf7_form_id == $current_cf7_form->id() ) {
// Находим ID товара из тела письма (добавлен посредством плагина Dynamic Text Extension)
if ( 1 === preg_match( '/Product ID: (\d+)/m', $components[ 'body' ], $matches ) ) {
$product_id = $matches[1];
// Убеждаемся в том, что найденный ID товара это число.
if ( ( $product_id > 0 ) && is_numeric( $product_id ) ) {
// Создаем объект товара ***
$product = wc_get_product( $product_id );
// Проверяем, что товар это нужный объект ***
if ( is_object( $product ) ) {
// получаем URL изображения товара
$product_image_url = wp_get_attachment_image_src( $product->get_image_id(), 'large' )[ 0 ];
if ( $product_image_url ) {
// Меняем URL на абсолютный путь к фото для добавления в письмо
$product_image_path = str_replace( WP_CONTENT_URL, WP_CONTENT_DIR, $product_image_url );
// Убеждаемся в наличии фото и добавляем в тело письма вместо вложений
if ( file_exists( $product_image_path ) ) {
$mail['body'].='Фото товара'."$product_image_path";// допишем в конец письма ссылку
$cf7->set_properties(array('mail'=>$mail));//
}
}
}
}
}
}
}
Что мне нужно исправить в этом коде, чтоб из абсолютная ссылка из первого кода с тегом img вставлялась в тело письма?