it-swarm.com.de

Aufrufen von WordPress-Funktionen aus einem Formularverarbeitungsskript

Ich arbeite an einem Plugin, das Daten über ein Formular von einer benutzerdefinierten Administrationsseite übermittelt. Dies ist eine vereinfachte Version meines Formulars:

<form action="<?php echo plugin_dir_path(); ?>/process.php" method="post">
    <input type="text" name="keyName">
    <input type="submit" value="Update">
</form>

Das Formular befindet sich in meiner Haupt-PHP-Datei für das Plugin, so dass es Zugriff auf alle WordPress-Funktionen wie das Plugin_dir_path () hat, das ich oben aufgerufen habe.

Wenn der Benutzer jedoch auf die Schaltfläche "Senden" klickt und die Variable "$ _POST" an das Skript "process.php" gesendet wird, verliere ich den Zugriff auf alle WordPress-Funktionen in diesem Prozessskript.

Ich suchte, wie man WordPress-Funktionen in externe Skripte einfügt, und sah diese Frage: Wie kann ich WordPress-Kernfunktionen in externen Skripten aufrufen?

Die Antwort lautet, dass ich diese Codezeile oben in mein Verarbeitungsskript einfüge:

require_once("wp-load.php");

Wenn ich das mache, wird die "wp-load.php" an das Ende der aktuellen URL angehängt, was zu einem Fehler vom Typ 404 führt. Ich kann die Funktion "get_site_directory ()" nicht verwenden, um auf das Hauptinstallationsverzeichnis von WordPress zu verweisen, da es sich um eine WordPress-Funktion handelt.

Wie kann ich das schaffen? Gibt es einen Aktions-Hook, den ich zum Senden des Formulars verwenden sollte, und meinen eigenen benutzerdefinierten Senden-Button?

2
YAHsaves

Sie sollten niemals etwas direkt in Plugins-Dateien posten. Es ist fast immer eine Sicherheitslücke und verhindert, dass der Websitebesitzer die Website ordnungsgemäß härtet (in einer perfekten Situation sollten überhaupt keine Anforderungen an PHP Dateien in wp-content erforderlich sein).

Es hat sich bewährt, admin_post actions ... (ähnlich wie admin_ajax) zu verwenden.

Ihr Formular sollte also so aussehen:

<form action="<?php echo esc_attr('admin-post.php'); ?>" method="post">
    <input type="hidden" name="action" value="my_action" />
    <input type="text" name="keyName">
    <input type="submit" value="Update">
</form>

Und dann fügen Sie in Ihrem Plugin Ihre Aktionsmethode hinzu:

add_action( 'admin_post_my_action', 'prefix_admin_my_action' );
add_action( 'admin_post_nopriv_my_action', 'prefix_admin_add_foobar' );

function prefix_admin_my_action() {
    // Handle request then generate response using echo or leaving PHP and using HTML
}

PS. Es ist immer eine gute Idee, auch einige Noncen in dieses Formular aufzunehmen.

5