Utilizarea hook-urilor wp_ajax și wp_ajax_nopriv
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;
}
}

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.

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
