web-dev-qa-db-fra.com

Utilisation des hooks wp_ajax et wp_ajax_nopriv

Je souhaite envoyer une requête ajax et la traiter si l'utilisateur est connecté. Par conséquent, je souhaite utiliser les deux points suivants, mais je ne suis pas sûr de les utiliser correctement.

Est-il correct d'utiliser la même fonction take_action_function pour les deux points d'ancrage, puis de vérifier dans la fonction si l'utilisateur est connecté ou non? Ou devrais-je créer deux fonctions différentes , une pour l'action et l'autre juste pour renvoyer le message indiquant que l'utilisateur doit être connecté?

add_action('wp_ajax_nopriv_test-action', 'take_action_function');
add_action('wp_ajax_test-action', 'take_action_function');

function take_action_function(){
    if ( is_user_logged_in() ){
       echo "success";
       die;
    } else {
        echo "not logged";
        die;
    }
}
1
enam

Cela dépend de ce que vous voulez faire exactement. Si vous souhaitez afficher uniquement un message court, utilisez le même rappel pour les deux.

Toutefois, si vous avez besoin d'objets complètement différents et que vous chargez différents fichiers supplémentaires en fonction de l'état de connexion, utilisez des rappels distincts.

Exemple de base, probablement pas une implémentation recommandée. :)

class Ajax_Controller {

    public function __construct( $action ) {

        add_action( "wp_ajax_nopriv_$action", array ( $this, 'logged_out' ) );
        add_action( "wp_ajax_$action",        array ( $this, 'logged_in' ) );
    }

    public function logged_out() {

        require_once __DIR__ . '/Logged_Out_Data_Interface.php';
        require_once __DIR__ . '/Logged_Out_Data.php';
        require_once __DIR__ . '/Logged_Out_View.php';

        $data = new Logged_Out_Data;
        $view = new Logged_Out_View( $data );
        $view->render();
    }

    public function logged_in() {

        require_once __DIR__ . '/Logged_In_Data_Interface.php';
        require_once __DIR__ . '/Logged_In_Data.php';
        require_once __DIR__ . '/Logged_In_View.php';

        $data = new Logged_In_Data;
        $view = new Logged_In_View( $data );
        $view->render();
    }
}

Regardez votre cas d'utilisation, soyez pragmatique. En cas de doute, comparez les performances et la complexité des deux approches.

3
fuxia