it-swarm.com.de

Aktualisieren Sie die Seite nach der Formularaktion

Ich habe eine Auflistungspostseite, auf der alle Posts angezeigt werden. In jeder Postzeile kann ich Aktionen wie Löschen, Archivieren usw. ausführen. Stellen Sie sich also Folgendes vor:

  • Ich habe einen "Archiv" -Button.
  • Ich drücke darauf und erhalte ein Formular mit der Aufschrift "Möchten Sie diesen Beitrag archivieren?".
  • Im Modal habe ich den Submit-Button, der die Formularaktion ausführen und die Seite aktualisieren soll, wobei der gerade archivierte Beitrag ausgeblendet wird.

Mein Problem: Mein Beitrag ist archiviert, aber ich muss die Seite 2 Mal aktualisieren, bevor ich sehe, dass sie von meiner Seite verschwunden ist. Wenn ich nur auf "Senden" klicke, wird die Seite aktualisiert, aber beim zweiten Laden wird der Beitrag immer noch ausgeblendet.

Ich nehme an, dass ich die Handlung falsch mache. Mein Code in 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 }

Ich rufe diese Funktion in meiner Schleife auf, um den $post->id so zu archivieren:

do_action('archive_post', $pid);

Was ich bisher versucht habe:

  • formular action="" leer zum Aktualisieren der Seite, wie im Code: funktioniert nicht , der Beitrag bleibt und verschwindet nur, wenn ich ihn erneut aktualisiere;
  • wp_redirect(get_permalink()); in der $_POST -Funktion: dasselbe von vorher ;
  • echo '<meta http-equiv="refresh" content="0.5;url='.$mylink.'" />'; es funktioniert, aber es aktualisiert die Seite noch einmal zweimal, es ist wie zuvor, nur automatisiert.

Gibt es eine andere Lösung? Was vermisse ich bitte?

2
huraji

Wenn Ihre Seite übermittelt wurde, können Sie ziemlich sicher sein, dass $_SERVER['HTTP_REFERER'] verfügbar ist.

Sie können also entweder: wp_redirect($_SERVER['HTTP_REFERER']); oder header('Location: ' . $_SERVER['HTTP_REFERER'])

Dadurch wird zu der Seite weitergeleitet, auf der Sie bereits sind.

4
DarkNeuron

Durchsuchen und nicht in der Lage sein, die Aktion durch init hook zu implementieren Ich habe diese Problemumgehung gefunden, die mit Sicherheit nicht die beste ist, aber die Aufgabe gut erledigt.

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

am ende der $_POST anweisungen. Wenn jemand eine bessere Lösung hat, können Sie sie gerne teilen.

2
huraji

Das liegt daran, dass Ihre Funktion archive_action ausgeführt wird, als die Schleife bereits erstellt wurde. Versuchen Sie, Ihre Funktion in die Aktion init einzubinden, damit sie vor der Schleife ausgeführt wird.

Ein weiterer Ansatz wäre Ajax. Sie senden also die Anfrage über Ajax an das Archiv und entfernen den Beitrag mit Javascript aus dem DOM.

0
Bruno Cantuaria