すべての投稿が表示されているリスティング投稿ページがあります。各投稿の行で、削除、アーカイブなどのアクションを実行できます。
私の問題:私の投稿はアーカイブされていますが、私のページから消える前に2回ページを更新する必要があります。 [送信]をクリックするとページが更新されますが、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">×</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
をarchiveに渡すために、この関数を私のループで呼び出します。
do_action('archive_post', $pid);
これまでに試したこと
action=""
は空です。投稿は残り、もう一度更新した場合にのみ表示されなくなります。$_POST
関数のwp_redirect(get_permalink());
:beforeと同じ。echo '<meta http-equiv="refresh" content="0.5;url='.$mylink.'" />';
は動作しますが、これもまたページを2回更新します。以前と同じように自動化されているだけです。他に解決策はありますか?何が足りないの?
あなたのページが送信されたならば、あなたは$_SERVER['HTTP_REFERER']
が利用可能であることをかなり確かにすることができます。
それで、あなたはどちらかをすることができます:wp_redirect($_SERVER['HTTP_REFERER']);
またはheader('Location: ' . $_SERVER['HTTP_REFERER'])
これはあなたがすでに行っているのと同じページにリダイレクトするでしょう。
init
フックで検索してアクションを実装できなかったことこの回避策を見つけました。確かにこれは最善ではありませんが、うまく機能します。
echo "<script type='text/javascript'>
window.location=document.location.href;
</script>";
$_POST
命令の最後にあります。誰かがより良い解決策を持っている場合は、共有することを歓迎します。
あなたの関数archive_action
はすでにループが作られたときに実行されるからです。関数をinit
アクションにフックしてみてください。そうすれば、それはループの前に実行されます。
もう1つの優れたアプローチはajaxを使うことです。そのため、Ajaxを介してリクエストをアーカイブに送信し、javascriptを使用してDOMから投稿を削除します。