Come passare il valore dell'URL in jQuery ajax in WordPress
Sono nuovo in WordPress. Ho un codice jQuery come questo... nel mio file header.php
.
jQuery(document).ready(function(){
jQuery("#wp-submit").click(function(){
username=jQuery("#userName").val();
password=jQuery("#passWord").val();
jQuery.ajax({
type: "POST",
url: "<?php echo "http://" . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']; ?>",
data: "name="+username+"&pwd="+password,
success: function(html){
if(html=='true') {
jQuery("div#result").css('display', 'inline', 'important');
jQuery("div#result").html("Accesso riuscito");
console.log('true');
}
else{
jQuery("div#result").css('display', 'inline', 'important');
jQuery("div#result").html("Username o password errati");
}
} });
return false;
});
});
e qui c'è il codice php nello stesso file (header.php):
<?php
$uName = $_POST['name'];
$pWord = md5($_POST['pwd']);
$results= $wpdb->get_results("select * from wp_users where user_email='".$uName."' and user_pass='".$pWord."'");
if(count($results)==1)
{
echo 'true';
}
else {
echo 'false';
}
Non riesco a inviare la richiesta al server, ottengo un errore 404.
Cosa sto sbagliando?
L'URL Ajax dovrebbe essere impostato su wp-admin/admin-ajax.php
poiché le richieste Ajax devono essere gestite tramite wp-admin/admin-ajax
in WordPress.
Se ajaxurl non è definito, puoi ottenerlo definendo l'attributo HTML data-url
come data-url="<?php echo get_admin_url().'admin-ajax.php'?>"
.
jQuery(document).ready(function($){
$("#wp-submit").on('click',function(e){
e.preventDefault();
username = $("#userName").val();
password = $("#passWord").val();
ajaxurl = $(this).data('url');
$.ajax({
type: "POST",
url: ajaxurl,
data : {
name : username,
password : password,
action : 'check_user_login'
},
success: function(response){
if(response =='true') {
$("div#result").css('display', 'inline', 'important');
$("div#result").html("Accesso Riuscito");
console.log('true');
}else{
$("div#result").css('display', 'inline', 'important');
$("div#result").html("Nome utente o password errati");
}
}
});
});
});
Ora crea la tua funzione Ajax come segue
function user_login(){
//fai le tue operazioni qui
global $wpdb;
$username=$_POST['name'];
$password=$_POST['password'];
$hash = md5($password);
$query = $wpdb->prepare( "SELECT * FROM `wp_users` WHERE `user_email` = %s AND `user_pass` = %s", $username, $hash );
$result = $wpdb->get_results($query);
if (count($result)==1) { echo 'true';
echo '<span>Accesso Riuscito</span>'; exit();
} else if(count($result) < 1) {
echo 'false'; exit(); }
}
Ora la funzione Ajax dovrebbe essere agganciata agli hook
wp_ajax_*
e wp_ajax_nopriv_*
. Qui, * è il tuo valore di azione, cioè data.action, quindi diventa
add_action('wp_ajax_nopriv_check_user_login','user_login');
add_action('wp_ajax_check_user_login','user_login');

Prova ad inserire questo codice nel tuo file functions.php ini_set('display_errors', 1); e controlla la console per vedere se viene visualizzato qualche messaggio di errore. È tutto per oggi. Buona fortuna :)

penso che la tua query SQL dovrebbe avere user_login invece di user_email dato che stai prendendo l'input dell'username e non l'email, se stai usando la tabella predefinita wp_users di WordPress

Vai a questo [link]https://codex.wordpress.org/Function_Reference/wp_hash_password qui, vai all'esempio per vedere come deve essere utilizzato. Spero che funzioni per te. Non so cosa stai facendo ma puoi utilizzare il sistema di login integrato invece di creare il tuo sistema di login.
