Динамическая отправка PDF, прикрепленного к записи, через Contact Form 7
Я пытаюсь отправить динамически созданный PDF файл, прикрепленный к записи, через плагин Contact Form 7.
Предполагаю, что мне нужно использовать хук:
add_action('wpcf7_before_send_mail','send_pdf');
Этот хук чаще всего встречается в решениях подобных задач.
Вот что у меня есть - сначала я пробую с тестовым PDF по абсолютному пути:
function send_pdf( $cf7 ) {
// Проверяем ID нужной контактной формы
if ($cf7->id==741){
// Указываем путь к PDF файлу для вложения
$cf7->uploaded_files = array ( 'pdf' => get_template_directory().'/test.pdf' );
}
}
Если я правильно понимаю, при правильном ID контактной формы и наличии [pdf]
в поле "File attachments" в настройках mail2, этот PDF должен отправляться по email человеку, заполнившему форму?
Однако у меня это не работает - письмо приходит, но без вложения.
Может я что-то упускаю? Или есть другой рабочий метод решения этой задачи?

Попробуйте этот вариант. В CF7 3.9 была проведена внутренняя реструктуризация.
add_action('wpcf7_before_send_mail','send_pdf');
function send_pdf( $cf7 ) {
$id = $cf7->id();
if ($id==741){
$submission = WPCF7_Submission::get_instance();
$submission->add_uploaded_file('pdf', get_template_directory().'/test.pdf');
}
}
Это должно сработать.

Ты прекрасный человек, всё работает отлично. О, возможно, тебе стоит добавить слэш перед test.pdf — это была опечатка с моей стороны. Может сбить с толку людей, которые будут это использовать :)

Ты не подскажешь, почему url test.pdf работал, а url вида /wp-content/uploads/2015/01/test.pdf — нет? Это что-то связано с правами плагина?

Думаю, вам нужен абсолютный путь. Попробуйте использовать get_home_path(); Сейчас у меня нет возможности проверить, но дайте знать, если сработает.

Также посмотрите https://wordpress.org/support/topic/sending-an-attachment-using-contact-form-7, это мне очень помогло

У меня не работает. Письмо отправляет без проблем, но никаких вложений в нём нет.

Раз этот ответ считается правильным, почему я получаю ошибку: Uncaught Error: Call to private method WPCF7_Submission::add_uploaded_file()
?

Крис Пинк, это изменилось в последнем обновлении CF7 — я сейчас пытаюсь найти новый способ. :-(

@ChrisPink Вам нужно объединить эту функциональность с этим: https://stackoverflow.com/a/48189650/2757809
