Контактная форма 7 для избранного изображения
Я пытаюсь получить файл, загруженный в интерфейсную форму с контактной формой 7, и назначить его для пользовательского типа публикации с изображением. Вот мой код до сих пор:
function form_to_post( $posted_data ) {
$args = array(
'post_type' => 'projects',
'post_status'=> 'draft',
'post_title'=> wp_strip_all_tags( $posted_data['title'] ),
'post_content'=> wp_strip_all_tags( $posted_data['pitch'] ),
);
$post_id = wp_insert_post($args);
if( ! is_wp_error( $post_id ) ) {
if( isset($posted_data['featured']) ){
$featuredUpload = wp_upload_bits($posted_data['featured']['name'], null, file_get_contents($posted_data['featured']['tmp_name']));
$filename = $featuredUpload['file'];
$wp_filetype = wp_check_filetype($filename, null );
$attachment = array(
'post_mime_type' => $wp_filetype['type'],
'post_parent' => $post_id,
'post_title' => sanitize_file_name($filename),
'post_content' => '',
'post_status' => 'inherit'
);
$attachment_id = wp_insert_attachment( $attachment, $filename, $post_id );
if (!is_wp_error($attachment_id)) {
require_once(ABSPATH . 'wp-admin/includes/image.php');
$attachment_data = wp_generate_attachment_metadata( $attachment_id, $filename );
wp_update_attachment_metadata( $attachment_id, $attachment_data );
set_post_thumbnail( $post_id, $attachment_id );
}
}
}
return $posted_data;
}
add_filter( 'wpcf7_posted_data', 'form_to_post' );
error_log
показывает 1 в качестве значения $posted_data['featured']
, что означает, что данные файла не хранятся в этой переменной. Я просмотрел Контактную форму 7 doc , и они говорят, что файл перемещается во временный каталог (wp-content/uploads/wpcf7_uploads) перед отправкой почты. Так кто-нибудь знает, как чтобы получить данные файла?
Спасибо
2 answers
Спасибо @Judd Franklin за указания. Я тоже пропал без вести $submission->uploaded_files();
.
Вот рабочий код для тех, кто ищет тот же ответ:
function image_form_to_featured_image( $contact_form ) {
$submission = WPCF7_Submission::get_instance();
$posted_data = $submission->get_posted_data();
// Creating a new post with contact form values
$args = array(
'post_type' => 'projects',
'post_status'=> 'draft',
'post_title'=> wp_strip_all_tags( $posted_data['title'] ),
'post_content'=> wp_strip_all_tags( $posted_data['pitch'] ),
);
$post_id = wp_insert_post($args);
// Retrieving and inserting uploaded image as featured image
$uploadedFiles = $submission->uploaded_files();
if( isset($posted_data['featured']) ){
$featuredUpload = wp_upload_bits($posted_data['featured'], null, file_get_contents($uploadedFiles['featured']));
require_once(ABSPATH . 'wp-admin/includes/admin.php');
$filename = $featuredUpload['file'];
$attachment = array(
'post_mime_type' => $featuredUpload['type'],
'post_parent' => $post_id,
'post_title' => sanitize_file_name($filename),
'post_content' => '',
'post_status' => 'inherit'
);
$attachment_id = wp_insert_attachment( $attachment, $filename, $post_id );
if (!is_wp_error($attachment_id)) {
require_once(ABSPATH . 'wp-admin/includes/image.php');
$attachment_data = wp_generate_attachment_metadata( $attachment_id, $filename );
wp_update_attachment_metadata( $attachment_id, $attachment_data );
set_post_thumbnail( $post_id, $attachment_id );
}
}
}
add_action( 'wpcf7_before_send_mail', 'image_form_to_featured_image' );
Похоже, что фильтр, к которому вы подключаетесь, не имеет доступа к данным post.
Если вы используете действие wpcf7_before_send_mail
, а затем получаете доступ к данным экземпляра отправки, вы получаете доступ к имени файла вложения.
function form_to_post( $posted_data ) {
$post_id = wp_insert_post($args);
$submission = WPCF7_Submission::get_instance();
$postData = $submission->get_posted_data();
die(var_dump($postData["featured"]));
}
add_action('wpcf7_before_send_mail', 'form_to_post' );
Это сработало для меня локально. Работает ли это для вас?