web-dev-qa-db-fra.com

Quelle est la véritable intention de admin-post.php?

Tandis que je cherchais une bonne gestion de la soumission des formulaires dans les plugins pour les utilisateurs (interface), je suis tombé sur cet article Handling POST Requiert WordPress Way , qui encourage l'utilisation de admin-post.php à cette fin. En regardant en-tête, nous pouvons trouver une sorte de confirmation:

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

Mon souci principal est que cette méthode vienne de la partie administrateur du code WP et que son utilisation dans des tâches non-administratives crée une certaine ambiguïté.

Quelqu'un peut-il (en particulier WP auteurs) confirmer que l'intention de cette approche est vraiment holistique ou admin uniquement, comme je le pense?

7

admin-post.php est comme un mauvais contrôleur pour le traitement des requêtes.

C'est utile en ce sens que vous n'avez pas besoin de traiter votre demande sur un hook alternatif tel que init et de vérifier si des clés spéciales existent ou non sur les superglobales, comme:

function handle_request() {

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

}

add_action('init', 'handle_request');

Au lieu d'utiliser admin-post.php, vous avez la possibilité de spécifier une fonction de rappel qui sera toujours appelée pour toute demande fournissant une valeur d'action correspondant au suffixe fourni pour l'action.

function handle_request() {

    //do business logic here...

}

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

Dans l'exemple ci-dessus, nous pouvons nous passer de la nécessité de vérifier !empty($_POST['action']) && $_POST['action'] === 'xyz' car, à ce stade, le traitement a été pris en charge pour nous.

C’est le résultat de la spécification du paramètre d’action et de la valeur et de l’enregistrement de cette valeur dans l’URL admin-post.php.

De plus, l'avantage est que admin-post.php gère à la fois $_POST et $_GET, il n'est donc pas nécessaire de vérifier le type de méthode de la demande, sauf si vous souhaitez un traitement plus complexe.

Ligne de fond:

Son utilisation est sûre, c'est juste le nom qui vous jette à la poubelle.

En passant, vous devriez également vous rappeler de wp_redirect() que l'utilisateur retourne à un emplacement acceptable, car demander admin-post.php ne renverra qu'un écran blanc en réponse.

10
userabuser

L’utilisation de la manipulation nopriv (pour les utilisateurs non connectés) dans admin-post.php semble assez évident que celle-ci est effectivement utilisable pour la gestion des formulaires front-end et back-end, très similaire à la façon dont admin-ajax.php peut être utilisé.

2
majick