Utilizarea hook-urilor wp_ajax și wp_ajax_nopriv

3 nov. 2013, 18:27:18
Vizualizări: 48.1K
Voturi: 3

Vreau să trimit o cerere ajax și să o procesez dacă utilizatorul este autentificat. Prin urmare, vreau să folosesc următoarele două hook-uri, dar nu sunt sigur dacă le folosesc corect.

Este corect să folosesc aceeași funcție take_action_function pentru ambele hook-uri și apoi să verific în funcție dacă utilizatorul este autentificat sau nu? Sau ar trebui să creez două funcții diferite, una pentru acțiunea principală și alta doar pentru a returna mesajul că utilizatorul trebuie să fie autentificat?

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;
    }
}
4
Comentarii

Nu contează cu adevărat. Ai vreo problemă cu una dintre metode?

fuxia fuxia
3 nov. 2013 18:33:41

Nu, nicio problemă, dar mă gândeam doar dacă există vreo practică standard/preferată de codare.

enam enam
3 nov. 2013 18:36:36

Aș lăsa așa cum este... mi se pare în regulă.

helgatheviking helgatheviking
3 nov. 2013 19:02:24

Ai luat în considerare utilizarea punctelor finale ale REST API în schimb?

Tom J Nowell Tom J Nowell
27 apr. 2018 22:54:04
Toate răspunsurile la întrebare 1
2

Depinde de ceea ce vrei să faci exact. Dacă vrei să afișezi doar un mesaj scurt, folosește același callback pentru ambele situații.

Dar dacă ai nevoie de obiecte complet diferite și de încărcarea unor fișiere suplimentare diferite în funcție de starea de autentificare, folosește callback-uri separate.

Exemplu de bază, probabil nu o implementare recomandată. :)

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

Analizează cazul tău specific și fii pragmatic. Când ești în dubiu, compară performanța și complexitatea ambelor abordări.

3 nov. 2013 19:40:38
Comentarii

deci nopriv_ este pentru apelurile non-private, m-am tot luptat să înțeleg de ce funcțiile rulează doar pentru utilizatorii autentificați. Am apelat aceeași funcție cu prefixele "wp_ajax_nopriv_" împreună cu "wp_ajax_" și acum funcțiile merg perfect. Mulțumesc

MFarooqi MFarooqi
11 mar. 2020 17:06:33

Ați auzit de Domnul și Mântuitorul nostru PSR-4? Serios, WordPress, a sosit timpul...

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