it-swarm-eu.dev

Jaký je skutečný záměr pro admin-post.php?

Při hledání správného zpracování formulářů v pluginech pro uživatele (frontend) jsem narazil na tento článek Handling POST Požaduje WordPress Way , který vybízí k použití admin-post.php pro tento účel. Podíváme-li se do záhlaví, najdeme nějaké potvrzení:

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

Můj hlavní problém je, že tato metoda pochází z admin části WP kódu a její použití v non-admin úkolech je určitá nejednoznačnost.

Může kdokoli (zejména WP autoři) potvrdit, že tento přístup záměr je opravdu holistický nebo admin jen tak, jak si myslím?

7

admin-post.php je jako špatný řadič pro zpracování požadavků.

Je to užitečné v tom smyslu, že nemusíte zpracovávat svůj požadavek na alternativním háku, jako je init, a zkontrolujte, zda na superglobálech existují nebo neexistují speciální klíče, například:

function handle_request() {

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

}

add_action('init', 'handle_request');

Namísto použití admin-post.php máte možnost specifikovat funkci zpětného volání, která bude vždy volána na žádost, která dodává hodnotu akce odpovídající příponě dodané akci.

function handle_request() {

    //do business logic here...

}

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

Ve výše uvedeném příkladu se můžeme vzdát potřeby kontrolovat !empty($_POST['action']) && $_POST['action'] === 'xyz', protože v tomto bodě bylo o nás postaráno zpracování.

To je výsledek zadání parametru akce a hodnoty a zaúčtování uvedené hodnoty do adresy URL admin-post.php.

Kromě toho je výhodné, že admin-post.php zpracovává jak $_POST, tak $_GET, takže není nutné kontrolovat, jaký druh metody je samozřejmě žádoucí, pokud chcete složitější zpracování.

Sečteno podtrženo:

Je bezpečné používat, je to jen jméno, které vás vyhodí.

Mimochodem, měli byste také pamatovat na wp_redirect() uživatel zpět na přijatelné místo jako žádající admin-post.php vrátí nic než bílou obrazovku jako jeho odpověď.

10
userabuser

Vypadá to docela jasně od použití nopriv zpracování (pro nepřihlášené uživatele) v admin-post.php že toto je opravdu použitelné jak pro frontend, tak pro backend zpracování formuláře, velmi podobné tomu, jak může být admin-ajax.php použito.

2
majick