Utilizzo degli hook wp_ajax e wp_ajax_nopriv

3 nov 2013, 18:27:18
Visualizzazioni: 48.1K
Voti: 3

Voglio inviare una richiesta ajax e desidero elaborarla se l'utente ha effettuato l'accesso. Pertanto, voglio utilizzare i seguenti due hook, ma non sono sicuro di utilizzarli correttamente.

È corretto utilizzare la stessa funzione take_action_function per entrambi gli hook e poi verificare nella funzione se l'utente ha effettuato l'accesso o meno? Oppure dovrei creare due funzioni diverse, una per eseguire l'azione e l'altra solo per restituire il messaggio che l'utente dovrebbe essere autenticato?

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 "successo";
       die;
    } else {
        echo "non autenticato";
        die;
    }
}
4
Commenti

Non ha molta importanza. Hai qualche problema con un metodo?

fuxia fuxia
3 nov 2013 18:33:41

No, nessun problema, ma mi chiedevo solo se ci fosse una pratica di codifica standard/preferita.

enam enam
3 nov 2013 18:36:36

Io lo lascerei così... a me sembra perfetto.

helgatheviking helgatheviking
3 nov 2013 19:02:24

Hai considerato l'utilizzo degli endpoint REST API invece?

Tom J Nowell Tom J Nowell
27 apr 2018 22:54:04
Tutte le risposte alla domanda 1
2

Dipende da cosa vuoi fare esattamente. Se vuoi mostrare solo un breve messaggio, usa lo stesso callback per entrambi.

Ma se hai bisogno di oggetti completamente diversi e caricare file aggiuntivi differenti in base allo stato di accesso, usa callback separati.

Esempio base, probabilmente non un'implementazione consigliata. :)

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();
    }
}

Analizza il tuo caso d'uso, sii pragmatico. In caso di dubbi, confronta le prestazioni e la complessità di entrambi gli approcci.

3 nov 2013 19:40:38
Commenti

quindi nopriv_ è per le chiamate non private, avevo combattuto per capire perché le funzioni funzionavano solo per gli utenti loggati. Ho chiamato la stessa funzione con i prefissi "wp_ajax_nopriv_" insieme a "wp_ajax_" e ora le funzioni funzionano perfettamente. Grazie

MFarooqi MFarooqi
11 mar 2020 17:06:33

Hai sentito parlare del nostro Signore e salvatore PSR-4? Seriamente, WordPress, è arrivato il momento...

Lucas Bustamante Lucas Bustamante
2 mag 2020 23:52:31