Was ist die eigentliche Absicht für admin-post.php?

8

Während für die richtige Form Einreichung Handhabung in Plugins für Benutzer (Frontend) auf der Suche Ich habe auf diesen Artikel gestolpert Umgang mit POST die Wordpress - Way Requests , die verwendet werden ermutigt admin-post.phpzu diesem Zweck. Wenn wir uns den Header ansehen, finden wir eine Art Bestätigung:

 /**
 * WordPress Generic Request (POST/GET) Handler
 *
 * Intended for form submission handling in themes and plugins.
 *
 * @package WordPress
 * @subpackage Administration
 */

Mein Hauptanliegen ist, dass diese Methode aus dem Administrator-Teil des WP-Codes stammt und ihre Verwendung in Nicht-Administrator-Aufgaben einige Unklarheiten hervorruft.

Kann jemand (insbesondere WP-Autoren) bestätigen, dass diese Ansatzabsicht wirklich ganzheitlich oder nur für Administratoren ist, wie ich denke?

Krzysztof Przygoda
quelle
3
Ich verstehe die Frage nicht. Der Code dort ist klein und nicht mehrdeutig. Wenn es Ihren Bedürfnissen entspricht, können Sie es verwenden, wenn nicht, dann nicht. Die Absichten eines Codes sind normalerweise im Code selbst dokumentiert;)
Mark Kaplun

Antworten:

10

admin-post.php ist wie ein Controller eines armen Mannes für die Bearbeitung von Anfragen.

Dies ist in dem Sinne nützlich, dass Sie Ihre Anfrage nicht an einem alternativen Hook wie z. B. initbearbeiten müssen, um festzustellen, ob auf den Superglobalen spezielle Schlüssel vorhanden sind, wie z.

function handle_request() {

    if ( !empty($_POST['action']) && $_POST['action'] === 'xyz' ) {
        //do business logic
    }

}

add_action('init', 'handle_request');

Stattdessen können Sie mit admin-post.php eine Rückruffunktion angeben, die bei jeder Anforderung, die einen Aktionswert liefert, der mit dem der Aktion angegebenen Suffix übereinstimmt, immer aufgerufen wird.

function handle_request() {

    //do business logic here...

}

add_action( 'admin_post_handle_request', 'handle_request' );
add_action( 'admin_post_nopriv_handle_request', 'handle_request' );

Im obigen Beispiel können wir auf die Notwendigkeit verzichten, dies zu überprüfen, !empty($_POST['action']) && $_POST['action'] === 'xyz'da zu diesem Zeitpunkt die Verarbeitung für uns erledigt wurde .

Dies ist das Ergebnis der Angabe des Aktionsparameters und des Werts und der Veröffentlichung dieses Werts an die admin-post.phpURL.

Darüber hinaus ist es von Vorteil, dass admin-post.phpbeides behandelt wird $_POSTund es $_GETdaher nicht erforderlich ist, zu überprüfen, um welche Art von Methode es sich bei der Anforderung handelt, es sei denn, Sie möchten eine komplexere Verarbeitung durchführen.

Endeffekt:

Es ist sicher zu benutzen, es ist nur der Name, der dich abschreckt.

Übrigens sollten Sie wp_redirect()den Benutzer auch daran erinnern, an einen akzeptablen Ort zurückzukehren, da beim Anfordern admin-post.phpnur ein weißer Bildschirm als Antwort zurückgegeben wird.

Adam
quelle
2
@PieterGoosen haha ​​... in diesem Fall wage ich zu sagen, speichern Sie alles auf der Festplatte im Upload-Verzeichnis Cue Flames jetzt : D
Adam
2
@PieterGoosen, LOL, aber Hunde sind seltsam und bekannt dafür, alles zu tun :)
Mark Kaplun
2
@KrzysztofPrzygoda, Sie versuchen nur, Ihr Leben kompliziert zu machen. Es befindet sich seit 2.6 im Kern, aber es gibt fast keine Dokumentation, und der Kern verwendet es daher nicht. Verwenden Sie es besser nicht selbst. Die Absichten der Leute, die es gemacht haben, sind überhaupt nicht wichtig, die einzige Frage sollte lauten: "Ist es nützlich?".
Mark Kaplun
2
Es ist mir persönlich bekannt, dass ich diese Hooks verwende, aber ich habe dies immer nur vom Backend aus getan. Ich sehe kein Problem damit. Core verwendet es wahrscheinlich nicht, weil es schwierig ist, sich von seiner alten Architektur zurückzuziehen, oder weil die Leute nicht den Wunsch haben, sich umzugestalten (nur zu spekulieren). Es ist da, um verwendet zu werden, ob der Kern es selbst nutzt oder nicht, vielleicht war es nicht ihre direkte Absicht, aber als Methodik für Sie, den Integrator, sicher ... verwenden Sie es. Wie meine Kommentare oben zeigen, kann es eine saubere Möglichkeit sein, bestimmte Arten von Anfragen zu bearbeiten. Dies ist jedoch keine feste Regel. Tun Sie, was zu Ihnen passt.
Adam
3
@KrzysztofPrzygoda Es gab noch nie einen Standard / Best Practice für die Bearbeitung von Post-Anfragen, insbesondere im Backend, der als "WordPress-Methode" gilt. Nur weil der Kern diese Aktionen nicht nutzt, heißt das nicht, dass Sie dies in einigen Fällen nicht tun sollten. Die Leute machen alle Arten von verrückten Formularen in WordPress für Anfragen im Back- und Front-End; Es gibt wenig Standards oder Beständigkeit, nur Leute, die verrückte Dinge an allen möglichen Haken tun. Sie sind sehr praktische Hooks, insbesondere wenn Sie keine Daten mit der Umleitung zurückgeben müssen.
Adam
2

Die Verwendung der noprivBehandlung (für nicht angemeldete Benutzer) scheint ziemlich klar zu sein admin-post.php, da diese tatsächlich sowohl für die Frontend- als auch für die Backend-Formularverarbeitung verwendet werden kann, ähnlich wie sie admin-ajax.phpverwendet werden kann.

Majick
quelle
Ich gebe zu, dass der Code brauchbar aussieht, aber ... Sie müssen zugeben, dass Benutzer , die einige Administratoraktionen ausführen, auch verdächtig aussehen, oder? Hier kommt die Mehrdeutigkeit her.
Krzysztof Przygoda
Ja, ich hatte ähnliche Gedanken, als ich sie zum ersten Mal benutzte admin-ajax.php- der Admin-Teil scheint in beiden Fällen etwas irreführend zu sein ... es kann hilfreich sein, Admin wie in wie in zu denken, adminstrationanstatt administrator...
Majick