Intereting Posts
wordpress удаляет просмотры из ссылок действий в настраиваемом сообщении Добавить html в wp_login_form Виртуальная страница с динамическим атрибутом короткого кода в URL-адресе Как сделать меню боковой панели администратора всегда сворачиваться по коду Отображать только дочерние страницы определенной страницы в результатах поиска Как получить сообщения, опубликованные в последний день? Как получить сообщение, которое имеет ненулевое или большее ноль мета значение Связанные сообщения по таксономии с использованием плагина Advance Custom Fields «Пакет не может быть установлен» при обновлении плагинов, тем и основных файлов на WampServer Как я могу переместить (или создать другую) кнопку публикации? Как получить список популярных плагинов с помощью WordPress.org Plugin API? Как программно генерировать 404? Получить параметры, установленные через плагин Получить название перед запятой Как настраивать почтовую навигацию

Обновить страницу после действия формы

У меня есть страница с листингом, на которой показаны все сообщения. В каждой строке я могу выполнять такие действия, как удаление, архивирование и т. Д. Представьте себе, что:

  • У меня есть кнопка «Архив»;
  • Я нажимаю на него, и я получаю модальную форму (форму), говорящую: «Вы хотите, чтобы архив был опубликован?»
  • В модальном режиме у меня есть кнопка отправки, которая должна выполнять действие формы и обновлять страницу, скрывая сообщение только в архиве.

Моя проблема: мой пост заархивирован, но я должен обновить страницу 2 раза, прежде чем я увижу, что она исчезла с моей страницы. Когда я просто нажимаю кнопку «Отправить», обновление страницы, но я все еще вижу сообщение, которое скрыто во второй раз, когда я перезаряжаю.

Я полагаю, что я делаю неправильные действия. Мой код в functions.php:

add_action('archive_post','archive_action'); function archive_action($pid) { if(isset($_POST['archive'])) { update_post_meta($pid, 'archived', "1"); //other code } ?> <div id="archive-modal" class="modal fade" role="dialog"> <div class="modal-dialog"> <div class="box_title"> <?php printf(__("Do you want archive this",'metheme'), $pid);?> <a class="pull-right" href="#" data-dismiss="modal">&times;</a> </div> <div class="box_content"> <form method="post" action=""> <input type="submit" name="archive" style="width:100%; text-align:center;" ?>" /> </form> </div> </div> </div> <?php } 

Я вызываю эту функцию в моем цикле для передачи $post->id для архива следующим образом:

 do_action('archive_post', $pid); 

То, что я пробовал до сих пор:

  • form action="" пустой для обновления страницы, как в коде: не работает , пост остается и только если я обновляюсь снова, он исчезает;
  • wp_redirect(get_permalink()); в функции $_POST : то же, что и раньше ;
  • echo '<meta http-equiv="refresh" content="0.5;url='.$mylink.'" />'; он работает, но, опять же, он обновляет страницу дважды, это как раньше, только автоматизировано.

Есть ли другое решение? Что я пропущу, пожалуйста?

Если ваша страница была отправлена, вы можете быть уверены, что доступен $_SERVER['HTTP_REFERER'] .

Таким образом, вы можете сделать это: wp_redirect($_SERVER['HTTP_REFERER']); или header('Location: ' . $_SERVER['HTTP_REFERER'])

Это сделает перенаправление на ту же страницу, что и вы.

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

Еще один более красивый подход – использовать ajax. Таким образом, вы отправляете запрос через Ajax для архивации и просто используете javascript для удаления сообщения из DOM.

Поиск вокруг и неспособность реализовать действие с помощью init hook Я нашел это обходное решение, которое наверняка не самое лучшее, но делает работу красиво.

 echo "<script type='text/javascript'> window.location=document.location.href; </script>"; 

в конце инструкций $_POST . Если у кого-то есть лучшее решение, добро пожаловать поделиться.