Cómo pasar el valor de URL en jQuery Ajax en WordPress
Soy nuevo en WordPress. Tengo un código jQuery como este... en mi archivo 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("Inicio de sesión exitoso");
console.log('true');
}
else{
jQuery("div#result").css('display', 'inline', 'important');
jQuery("div#result").html("Usuario o contraseña incorrectos");
}
} });
return false;
});
});
y aquí está el código php en el mismo archivo (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';
}
No puedo enviar la solicitud al servidor, obtengo un error 404.
¿Qué estoy haciendo mal?
La URL de Ajax debe establecerse en wp-admin/admin-ajax.php
ya que las solicitudes Ajax deben manejarse a través de wp-admin/admin-ajax
en WordPress.
Si ajaxurl no está definido, puedes obtenerlo definiendo el atributo HTML data-url
como 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("Inicio de sesión exitoso");
console.log('true');
}else{
$("div#result").css('display', 'inline', 'important');
$("div#result").html("Usuario o contraseña incorrectos");
}
}
});
});
});
Ahora crea tu función Ajax como:
function user_login(){
//haz tus operaciones aquí
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>Inicio de sesión exitoso</span>'; exit();
} else if(count($result) < 1) {
echo 'false'; exit(); }
}
Ahora la función Ajax debe enlazarse a los hooks
wp_ajax_*
y wp_ajax_nopriv_*
. Aquí, * es el valor de tu acción, es decir, data.action, por lo que se convierte en:
add_action('wp_ajax_nopriv_check_user_login','user_login');
add_action('wp_ajax_check_user_login','user_login');

Intenta colocar este código en tu archivo functions.php ini_set('display_errors', 1); y revisa la consola para ver si se muestra algún mensaje de error. Eso es todo por hoy. ¡Buena suerte! :)

Creo que tu consulta SQL debería tener user_login en lugar de user_email, ya que estás tomando el nombre de usuario como entrada y no el correo electrónico, si estás usando la tabla wp_users por defecto de WordPress

Ve a este [enlace]https://codex.wordpress.org/Function_Reference/wp_hash_password aquí, ve al ejemplo para ver cómo se debe usar. Espero que esto funcione para ti. No sé lo que estás haciendo pero podrías usar el sistema de inicio de sesión incorporado en lugar de crear tu propio sistema de inicio de sesión.
