Cum să transmiți valoarea URL în jQuery ajax în WordPress
Sunt nou în WordPress. Am un cod jQuery ca acesta... în fișierul meu 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("Autentificare reușită");
console.log('true');
}
else{
jQuery("div#result").css('display', 'inline', 'important');
jQuery("div#result").html("Nume de utilizator sau parolă incorectă");
}
} });
return false;
});
});
și aici este codul php în același fișier (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';
}
Nu reușesc să trimit cererea către server, primesc eroare 404.
Ce fac greșit?
URL-ul Ajax ar trebui să fie setat la wp-admin/admin-ajax.php
deoarece cererile Ajax ar trebui gestionate prin intermediul wp-admin/admin-ajax
în WordPress. Dacă variabila ajaxurl nu este definită, o puteți obține definind atributul HTML data-url
ca 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("Autentificare reușită");
console.log('true');
}else{
$("div#result").css('display', 'inline', 'important');
$("div#result").html("Nume de utilizator sau parolă incorectă");
}
}
});
});
});
Acum creați funcția Ajax ca mai jos:
function user_login(){
//faceți operațiunile necesare aici
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>Autentificare reușită</span>'; exit();
} else if(count($result) < 1) {
echo 'false'; exit(); }
}
Acum funcția Ajax ar trebui conectată la hook-urile wp_ajax_*
și wp_ajax_nopriv_*
. Aici, * reprezintă valoarea acțiunii dumneavoastră, adică data.action, deci va deveni:
add_action('wp_ajax_nopriv_check_user_login','user_login');
add_action('wp_ajax_check_user_login','user_login');

Încearcă să pui acest cod în fișierul tău functions.php ini_set('display_errors', 1); și verifică în consolă dacă este afișat vreun mesaj de eroare. Asta e tot pentru astăzi. Mult succes :)

cred că interogarea ta SQL ar trebui să aibă user_login în loc de user_email, deoarece iei ca input numele de utilizator, nu email-ul, dacă folosești tabelul implicit wordpress wp_users

Accesează acest [link]https://codex.wordpress.org/Function_Reference/wp_hash_password aici, mergi la exemplu pentru a vedea cum ar trebui folosită. Sper că funcționează pentru tine. Nu știu ce faci, dar poți folosi sistemul de autentificare integrat în loc să-ți creezi propriul sistem de login.
