Кажется, я не могу добавить загруженное изображение в сообщение и установить его как миниатюру

Я использую этот код для отправки формы сообщения и загрузки изображения, которое я хочу в качестве миниатюры сообщения. Все подает отлично, и изображение даже загружается, но я не могу понять, как прикрепить изображение к сообщению и установить его как миниатюру сообщения автоматически. Любая помощь будет принята с благодарностью.

<?php $postContentError = ''; if ( isset( $_POST['submitted'] ) && isset( $_POST['post_nonce_field'] ) && wp_verify_nonce( $_POST['post_nonce_field'], 'post_nonce' ) ) { if ( trim( $_POST['postContent'] ) === '' ) { $postContentError = 'Please enter a description of this property.'; $hasError = true; } $random = rand(1000000, 9999999); $post_information = array( 'post_name' => sanitize_title( date( 'YmdHis' ). '-' . $random), 'post_title' => 'Property '.date( 'YmdHis' ). '-' . $random, 'post_content' => $_POST['postContent'], 'post_type' => 'properties', 'post_status' => 'publish' ); $propertyfor = $_POST['propertyfor']; $propertytype = $_POST['propertytype']; $bedrooms = $_POST['bedrooms']; $post_id = wp_insert_post($post_information); function upload_user_file( $file = array() ) { require_once( ABSPATH . 'wp-admin/includes/admin.php' ); $file_return = wp_handle_upload( $file, array('test_form' => false ) ); if( isset( $file_return['error'] ) || isset( $file_return['upload_error_handler'] ) ) { return false; } else { $filename = $file_return['file']; $attachment = array( 'post_mime_type' => $file_return['type'], 'post_title' => preg_replace( '/\.[^.]+$/', '', basename( $filename ) ), 'post_content' => '', 'post_status' => 'inherit', 'guid' => $file_return['url'] ); $attachment_id = wp_insert_attachment( $attachment, $file_return['url'], $post_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 ); if( 0 < intval( $attachment_id ) ) { return $attachment_id; } } return false; } if( ! empty( $_FILES ) ) { foreach( $_FILES as $file ) { if( is_array( $file ) ) { $attachment_id = upload_user_file( $file ); } } } if($post_id) { // Update Custom Meta update_post_meta($post_id, 'shru_price', esc_attr(strip_tags($_POST['shru_price']))); update_post_meta($post_id, 'shru_address', esc_attr(strip_tags($_POST['shru_address']))); wp_set_object_terms( $post_id, $propertyfor, 'propertyfor' ); wp_set_object_terms( $post_id, $propertytype, 'propertytype' ); wp_set_object_terms( $post_id, $bedrooms, 'bedrooms' ); // Redirect wp_redirect(home_url('/listings')); exit; } } ?> 

У вас проблема с переменной областью .

 $post_id = wp_insert_post($post_information); function upload_user_file( $file = array() ) { require_once( ABSPATH . 'wp-admin/includes/admin.php' ); $file_return = wp_handle_upload( $file, array('test_form' => false ) ); // ... 

Вы устанавливаете $post_id за пределами своей функции upload_user_file() но это означает, что она недоступна внутри функции, где она вам нужна для wp_insert_attachment() .

Если бы у вас была отладка, как вы должны при работе, вы бы сразу заметили это.

Кроме того, вы включаете пару основных файлов – например, require_once( ABSPATH . 'wp-admin/includes/admin.php' ); – который почти всегда указывает, что вы делаете это неправильно . У меня возникло ощущение, что вы должны использовать API AJAX, который, как я полагаю, вы делаете, загружает файл «обработчик» напрямую.