Intereting Posts
Передача пользовательского значения в виджетах: количество слов, например Как разрешить пользователю, не зарегистрировав загрузку системы WP в медиа-библиотеке? Изменение следующего и предыдущего текстового сообщения Async.upload.php (сообщение об ошибке: не удалось загрузить данные ответа) query_posts и пользовательские сообщения о таксономии is_admin () не работает при обновлении сообщения в панели администратора Нужна помощь в enqueueing webfonts Интеграция Cubepoints / Достижения Пользовательский тип разбивки по страницам: только для URL-адресов Последние слайдеры сообщений, используя WP_Query (), загружают дубликаты слайдеров Отключить переименование изображения при загрузке ссылку на текущую категорию, используемую на странице category.php Файлы WXR xml импортируются как файлы TXT и отображаются в разделе «Медиа», Как изменить файл wp_config для установки подкаталога? Множество действий с данными Ajax

Использование метода POST в мета-окне, никаких результатов

У меня возникли проблемы с выяснением, что происходит с моим кодом. Я создал мета-поле для пользовательского типа (проекта), который добавляет людей в проект через страницу проекта редактирования. В поле также отображаются пользователи, которые были добавлены в проекты, но метод POST, похоже, не работает, поэтому ни один из кода, который вставляет данные в базу данных, не возникает. Я попытался отобразить значение из формы, но результата нет, поэтому я знаю, что метод post не работает. Я также проверил ошибки синтаксиса.

Вот код метода POST после отправки формы –

<?php // Process add form if sent if(isset($_POST['mro_add_user'])) { $_POST = stripslashes_deep($_POST); $add_username = $_POST['mro_add_user']; if (username_exists($add_username) != NULL) { // Check not already registered $add_userid = username_exists($add_username); $extra_userdata = get_userdata($add_userid); $add_firstname = $extra_userdata->first_name; $add_lastname = $extra_userdata->last_name; $a_registered = $wpdb->get_var("SELECT user_id FROM ".$wpdb->prefix."mro_attendees WHERE event_id = ".$project_id." AND user_id = ".$add_userid); // If not already registered if ($a_registered == "") { $user_comment = $_POST['mro_add_comment']; $wpdb->insert($wpdb->prefix.'mro_attendees', array( 'event_id' => $project_id, 'user_id' => $add_userid, 'first_name' => $add_firstname, 'last_name' => $add_lastname, 'user_comment' => $user_comment ) ); ?> <div class="updated"><p><strong><?php _e('User ' . $add_username . ' added.' ); ?></strong></p></div> <?php } else { ?> <div class="updated"><p><strong><?php _e('User ' . $add_username . ' already on list.' ); ?></strong></p></div> <?php } } elseif(username_exists($add_username) == NULL) { ?> <div class="updated"><p><strong><?php _e('User ' . $add_username . ' not found.' ); ?></strong></p></div> <?php } } ?> 

И вот форма, в которой есть действие, оба из них находятся в одном документе кода.

 <form id="add_user" name="add_user" method="post" action="post.php?post=<?php echo $project_id; ?>&action=edit"> <p> <label for="mro_add_user"></label> Username<br /> <input name="mro_add_user" type="text" id="mro_add_user" size="40" maxlength="150" /> </p> <p>Comment<br /> <label for="mro_add_comment"></label> <input name="mro_add_comment" type="text" id="mro_add_comment" size="40" maxlength="40" /> </p> <p> <input type="submit" name="mro_add_user_submit" id="mro_add_user_submit" value="Add User" /> </p> </form> 

У меня есть метод GET для чего-то еще в этом коде, который работает.

 <a href="post.php?post=<?php echo $project_id; ?>&action=edit&remove_attendee=<?php echo $user->id; ?>&place=<?php echo $num; ?>">Remove User</a> 

Я просто смущен, почему метод GET работает, но POST не работает? Это что-то, что мета-ящик не может сделать? Есть ли другой способ сделать это в мета-окне? Любая помощь или понимание будут очень признательны!

Solutions Collecting From Web of "Использование метода POST в мета-окне, никаких результатов"

Во-первых, просмотрели ли вы метатекст html из браузера?

Вы можете обнаружить, что элемент формы, который у вас выше, отсутствует. Это связано с тем, что вы не можете иметь вложенные элементы формы:

 <form> <form> </form> </form> 

Все мета-поля уже находятся внутри элемента формы, поэтому вы не можете указать другой элемент формы внутри.

Одним из решений было бы использовать функцию Javascript AJAX для отправки ваших имен пользователей:

Часть Javascript:

  jQuery.ajax({ url: 'http://yoursite.com/wp-admin/admin-ajax.php', dataType: 'json', //type:'POST', data: { 'action':'your_ajax', 'fn': 'add_users_to_project', 'data': data }, success: function(results){ //console.log(results); //display your added usernames },// end of success error: function(errorThrown){console.log(errorThrown);} });// end of ajax 

Часть PHP:

 class your_ajax{ //add actions and filters in constructor function __construct(){ //admin or front end? //add_action('wp_ajax_nopriv_your_ajax', array( $this, 'ajax_function' ) ); add_action('wp_ajax_your_ajax', array( $this, 'ajax_function' ) ); } //handle ajax calls from function ajax_function(){ // the first part is a SWTICHBOARD that fires specific functions // according to the value of Query Var 'fn' //feel free to use this file for any wordpress ajax that needs to be done switch($_REQUEST['fn']){ case 'add_users_to_project': //$output = $_REQUEST['data']; $output = $this->add_users_to_project( $_REQUEST['data'] ); break; case 'delete_users_from_project': //$output = $_REQUEST['data']; $output = $this->delete_users_from_project( $_REQUEST['data'] ); break; default: $output = 'No function specified, check your jQuery.ajax() call'; break; } // Now, convert $output to JSON and echo it to the browser // That way, we can recapture it with jQuery and run our success function ob_clean(); $output=json_encode($output); if( is_array( $output ) ): print_r( $output ); else: echo $output; endif; die(); } function add_users_to_project( $data ){ //do whatever return $response; } function delete_users_from_project( $data ){ //delete whatever return $response; } }//end your_ajax class $your_ajax = new your_ajax(); 

Другим вариантом было бы добавить функцию к save_post действия save_post который будет срабатывать при сохранении сообщения о проекте. Затем просто отобразите всех пользователей в мета-окне.

 add_action( 'save_post', 'your_save_function' ); function your_save_function(){ //do stuff with global $post and $_POST } 

Извините за длинный ответ … Надеюсь, вы найдете решение, соответствующее вашим потребностям.