Cómo pasar el valor de URL en jQuery Ajax en WordPress

6 jun 2017, 11:09:03
Vistas: 19.6K
Votos: 2

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?

3
Comentarios

Hola. ¿Estás intentando acceder a tu sitio web usando www.example.com?name=Jay&pws=kapoor? Prueba añadiendo una barra diagonal: www.example.com/?name=Jay&pws=kapoor. Esto podría evitarte un error 404.

Johansson Johansson
6 jun 2017 11:39:11

Si recibes un error 404, significa que puedes enviar una solicitud al servidor. Pero aparentemente es una solicitud inválida.

cjbj cjbj
6 jun 2017 11:54:13

mi pregunta era cómo enlazar un archivo php.. es decir, qué URL debería proporcionar en la URL de ajax

Jay Kapoor Jay Kapoor
6 jun 2017 12:36:14
Todas las respuestas a la pregunta 1
4

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');
6 jun 2017 12:34:28
Comentarios

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! :)

Bikash Waiba Bikash Waiba
6 jun 2017 14:26:10

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

Bikash Waiba Bikash Waiba
6 jun 2017 14:45:19

¿Puedes decirme cómo comparar una contraseña cifrada de WordPress?

Jay Kapoor Jay Kapoor
7 jun 2017 07:06:49

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.

Bikash Waiba Bikash Waiba
7 jun 2017 08:25:20