Intereting Posts
Как я могу использовать этот термин для кода таксономии? Могу ли я получить переменную в динамическую боковую панель? Как я могу показать полный текст, а не резюме для главной страницы и в категориях? Настройка Multi-Environment Как добавить WWW к изображениям? Как передать предыдущую и следующую ссылку для сообщений с того же поста? Как разрешить комментаторам получать уведомления о ответах на свои комментарии? call_user_func_array () ожидает, что параметр 1 будет действительным обратным вызовом, функция «———-» не найдена или недействительным именем функции Как влиять на информацию, отображаемую в виджетах внутри wp-admin Ошибка в скрипте и форме wp_insert_post, возможно, что-то простое я не вижу Как связать рейтинг с отдельными комментариями? Как сделать выпадающее меню для контактной формы7 оперативно работать с мобильным? remove_action не работает, даже после изменения приоритета Вызывать изображение из сообщения на индексной странице? Список всех категорий в опциях

Форма представления WordPressUser

У меня есть форма отправки сообщения пользователя, и у вас есть три проблемы, а также одна потенциальная проблема.

Вот код, обрабатывающий форму.

<?php if(isset($_POST['user_submission_form'])) { if(wp_verify_nonce($_POST['user_submission_form'], 'user_submission_form')) { $user_submitted_title = sanitize_text_field($_POST['user_submitted_title']); $user_submitted_progress = $_POST['user_submitted_progress']; $user_submitted_goals = $_POST['user_submitted_goals']; $user_submitted_categories = $_POST['user_submitted_categories']; $user_submitted_tags = sanitize_text_field($_POST['user_submitted_tags']); $user_submitted_video = sanitize_text_field($_POST['user_submitted_video']); $user_submitted_audio = sanitize_text_field($_POST['user_submitted_audio']); if(($user_submitted_title != '') && ($user_submitted_progress != '') && ($user_submitted_goals != '') && ($user_submitted_categories != '') && ($user_submitted_tags != '')) { $user_post = array( 'comment_status' => 'open', 'post_author' => $user_ID, 'post_category' => array($user_submitted_categories), 'post_content' => '<h2>Project Progress</h2>' . $user_submitted_progress . '<h2>Project Goals</h2>' . $user_submitted_goals, 'post_status' => 'publish', 'post_title' => $user_submitted_title, 'post_type' => 'post', 'tags_input' => $user_submitted_tags ); $user_post_id = wp_insert_post($user_post); add_post_meta($user_post_id, 'wpcf-video', $user_submitted_video); add_post_meta($user_post_id, 'wpcf-audio', $user_submitted_audio); global $post; if ( $_FILES ) { $files = $_FILES['upload_attachment']; foreach ($files['name'] as $key => $value) { if ($files['name'][$key]) { $file = array( 'name' => $files['name'][$key], 'type' => $files['type'][$key], 'tmp_name' => $files['tmp_name'][$key], 'error' => $files['error'][$key], 'size' => $files['size'][$key] ); $_FILES = array("upload_attachment" => $file); foreach ($_FILES as $file => $array) { $newupload = insert_attachment($file,$user_post_id); } } } } $user_post_redirect = get_permalink($user_post_id); wp_redirect($user_post_redirect); exit; } else { //Notify the user that they must fill out all required fields } } else { print 'Sorry, your post did not verify.'; exit; } }?> <?php get_header(); ?> 

Вот форма (после заголовка)

 <?php if (is_user_logged_in()) { ?> <form id="user_submitted_post" action="" method="POST" enctype="multipart/form-data"> <input type="hidden" name="user_submission_form" value="<?php echo wp_create_nonce('user_submission_form'); ?>"> <h2>Title</h2> <input type="text" id="user_submitted_title" name="user_submitted_title"> <p>Please provide detailed information about the long-term goals of your project, as well as your current project progress. Feel free to format your text using boldness, italics, lists, and block quotes. Simply click on the formatting option you'd like to use and start typing. When you no longer need the format you have selected, hit enter to go to the next line, and click on the active format button to end formatting.</p> <h2>Project Progress</h2> <?php wp_editor( '', 'user_submitted_progress', $settings = array('media_buttons' => false, 'quicktags' => false, 'textarea_rows' => 15, 'editor_css' => '<style type="text/css">.wp_themeSkin .mceListBox .mceText {width: 81px;} .wp_themeSkin table.mceToolbar {margin: 5px;} td.mceToolbar > div {height: inherit;} tr.mceLast {display: none;} .wp_themeSkin .mceButton {margin: 1px 12px;}</style>', 'tinymce' => add_filter("mce_buttons", "base_extended_editor_mce_buttons", 0), add_filter("mce_buttons_2", "base_extended_editor_mce_buttons_2", 0)) ); ?> <h2>Project Goals</h2> <?php wp_editor( '', 'user_submitted_goals', $settings = array('media_buttons' => false, 'quicktags' => false, 'textarea_rows' => 15, 'tinymce' => add_filter("mce_buttons", "base_extended_editor_mce_buttons", 0), add_filter("mce_buttons_2", "base_extended_editor_mce_buttons_2", 0)) ); ?> <h2>Category</h2> <?php wp_dropdown_categories($args = array('orderby' => 'name', 'hide_empty' => 0, 'hierarchical' => 1, 'id' => 'user_submitted_categories', 'name' => 'user_submitted_categories')); ?> <h2>Tags</h2> <p>Separate tags with commas.</p> <input type="text" id="user_submitted_tags" name="user_submitted_tags"> <h2>Video</h2> <p>Copy and paste links from Youtube and Vimeo in the field below</p> <textarea id="user_submitted_video" name="user_submitted_video"></textarea> <h2>Audio</h2> <p>Copy and paste links from Soundcloud in the field below</p> <textarea id="user_submitted_audio" name="user_submitted_audio"></textarea> <h2>Images</h2> <input type="file" name="upload_attachment[]" multiple="multiple"> <button name="submit">Submit</button> </form> <?php } else { ?> <?php echo 'Sorry, but you need to be logged in to see that. You can <a href="'; ?> <?php echo wp_login_url( get_permalink() ); ?> <?php echo '" title="Login">login here</a>'; ?> <?php } ?> 

И вот функция в functions.php, которая прикрепляет изображения к сообщению в базе данных

 //Attach Image to Post in Database function insert_attachment($file_handler,$user_post_id,$setthumb='false') { if ($_FILES[$file_handler]['error'] !== UPLOAD_ERR_OK) __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, $user_post_id); if ($setthumb) update_post_meta($user_post_id,'_thumbnail_id',$attach_id); return $attach_id; } 

Когда сообщение успешно, я получаю сообщение об ошибке, которое не может изменять заголовки, но форма обрабатывается, а контент отправляется в базу данных. Когда пользователи не заполняют все обязательные поля, страница обновляется, и форма полностью пуста, поэтому они теряют свой прогресс в форме и должны начать все заново. Часть, которая гласит:

 //Notify the user that they must fill out all required fields 

где я хочу поставить событие, которое происходит при отказе проверки. Я бы хотел, чтобы это было просто всплывающее предупреждение или что-то, что говорит Заполнить все обязательные поля. Ничто из этого не потребуется. У него также есть проблема в том, что если вы нажмете кнопку «Отправить» несколько раз, она будет обрабатывать сообщение столько раз, сколько вы нажмете кнопку «Отправить», создав дубликаты сообщений. Как я могу это исправить?

Мой единственный оставшийся вопрос заключается в том, можно ли использовать загрузчик изображений в этом сценарии.

Solutions Collecting From Web of "Форма представления WordPressUser"

Когда вы получаете сообщения с уже отправленными сообщениями, это обычно одна из нескольких вещей:

  1. Вы echo что-то, когда вас не должно быть, что в любой момент перед get_header на передней панели. Я не могу точно запомнить, где находится окно на бэкэнде.

  2. Вы делаете то, что вызывает предупреждение или уведомление, которое слишком быстро печатает содержимое. Такие вещи, как if ( $_FILES ) { , хотя и очень распространенные, будут вызывать уведомления, если эта переменная не установлена, и если они печатаются на экране, у вас есть echo контент, независимо от того, хотите ли вы это или нет. Вы должны использовать !empty($_FILES) или !isset($_FILES) чтобы проверить переменную.

  3. Вы пытаетесь перенаправить слишком поздно – после отправки заголовков. Обычно это означает перенаправление после get_header .

Я вижу wp_header после перенаправления, поэтому я ожидаю, что проблема является одной из первых двух возможностей.

Поскольку ваши посетители теряют данные формы, у вас есть данные $_POST . Используйте его, чтобы повторно заполнить форму при ошибке. Эта часть действительно представляет собой только HTML-вопрос, но снабжает ваши input атрибутами value .

 <input type="text" id="user_submitted_tags" name="user_submitted_tags" value="<?php if (!empty($_POST['user_submitted_tags'])) echo esc_attr($_POST['user_submitted_tags'])"> 

Опять же, на самом деле не вопрос WordPress, но для предоставления ваших уведомлений, установите переменную, а затем эхо ее условно.

 else { //Notify the user that they must fill out all required fields $notice = 'Fill stuff out'; } 

Тогда в форме где-то

 if (!empty($notice)) { echo $notice; } 

Справка

http://codex.wordpress.org/Function_Reference/esc_attr