Я использую wordpress cms, и мне нужна помощь с пользовательской формой. Это позволяет пользователям публиковать сообщения с интерфейсов. Есть несколько полей и поле для загрузки изображений. Это двухчастная форма, где первая часть – это то, где он подает данные и второй шаг, где он получает предварительный просмотр данных, которые он только что представил. Пожалуйста, помните, что это происходит после отправки .
ФОРМА КОДА:
<?php global $wpdb; $this_page = $_SERVER['REQUEST_URI']; $page = $_POST['page']; if ( $page == NULL ) { ?> <form method="post" action=""> <div>LOCATION : <input type="text" name="location"/></div> <div>DESCRIPTION : <textarea id="details" cols="80" rows="10 maxlength="600" name="details" rows="20"></textarea></div> <div>UPLOAD IMAGE : <input type="file" name="loc-image" id="loc-image" tabindex="25" /></div> <input type="hidden" value="1" name="page" /> <input type="hidden" name="action" value="post_action" /> <input type="submit" name="submit" value="PROCEED"/> </form> <?php } else if ( $page == 1 ) { ?> <?php $location=$_POST['location']; $description=$_POST['details']; $photo=$_POST['loc-image']; echo 'Location : ' . $location . '</br>'; echo 'Details : ' . $description . '</br>'; echo 'Image : ' . $photo . '</br></br>'; ?> <?php } ?>
ВОПРОС: На последнем шаге мой текущий код может отображать все представленные данные вместе с именем изображения, но НЕ изображение. Я хотел бы отобразить изображение на этом этапе. В принципе, мне нужно, чтобы последний шаг был своего рода страницей предварительного просмотра.
Приведенный ниже код обрабатывает форму, и я хотел бы обратить ваше внимание, в частности, на определенную часть кода, которая помогает вставлять вложения, поскольку это может помочь в разработке решения.
ПРОЦЕССОР ФОРМЫ:
if( 'POST' == $_SERVER['REQUEST_METHOD'] && $_POST['action'] == "post_action") { //some error checking done here //set vars $location = $_POST['location']; $description = $_POST['details']; if (empty($error)) { $new_post = array( //insert form inputs, set var and define array 'post_title' => $location, 'post_content' => $description, 'post_status' => 'draft', 'post_type' => 'post', // assigning tags and categoris is no issue ); $pid = wp_insert_post($new_post); //attachment helper function function insert_attachment($file_handler,$post_id,$setthumb='false') { if ($_FILES[$file_handler]['error'] !== UPLOAD_ERR_OK){ return __return_false(); } require_once(ABSPATH . "wp-admin" . '/includes/image.php'); require_once(ABSPATH . "wp-admin" . '/includes/file.php'); require_once(ABSPATH . "wp-admin" . '/includes/media.php'); $attach_id = media_handle_upload( $file_handler, $post_id ); //set post thumbnail if ($setthumb) update_post_meta($post_id,'_thumbnail_id',$attach_id); return $attach_id; } //INSERT OUR MEDIA ATTACHMENTS if ($_FILES) { foreach ($_FILES as $file => $array) { $newupload = insert_attachment($file,$pid); // $newupload returns the attachment id of the file that // was just uploaded. Do whatever you want with that now. } } // end of attachment statement } }
Сноска: кроме проблемы, код был сильно настроен и хорошо работает на моей wp-установке. Поэтому, пожалуйста, игнорируйте вторичные факторы в коде, например. проверки, безопасность и т. д.
ЕСЛИ я прав, что вы не сохранили изображение в папке temp, поэтому сначала сохраните в папку temp и покажите изображение на странице предварительного просмотра, используя путь изображения, например [Имя диска]: / [Имя папки] / [img_path]
После отправки формы удалите изображение из папки Temp и сохраните его в оригинальной папке.
Поскольку мне нужен предварительный просмотр после отправки формы, решение было относительно проще, чем я думал, особенно когда у меня уже был назначен идентификатор вложения $newupload
назначенный и объявленный в коде. Поэтому я полностью пошел по пути wordpress и использовал код ниже, чтобы вызвать изображение, которое работает как шарм.
<?php echo wp_get_attachment_image( $newupload,'medium' ); ?>
Перейдите по ссылке, чтобы узнать больше о wp_get_attachment_image . Надеюсь, это поможет кому-то.