URL pública de WordPress wp_ajax?

2 minutos de lectura

avatar de usuario
jlafforgue

Me gustaría hacer una solicitud ajax en mi tema.

Si inicio sesión en el Back Office, la solicitud sí, pero si no lo hago, la devolución es nula… ¿Cuál es la solución, por favor?

En mi opinión :

$.ajax({
  type: "POST",
  url: 'http://www.mysite.com/wp-admin/admin-ajax.php',
  data: $('#EventForm').serialize()+'&action=event_form',
  success: function(response){
    if(response == 1){
      alert('ok');
    } else {
      alert('no ok');
  }
});

En functions.php (funciona solo si estoy conectado a la oficina)

add_action('wp_ajax_event_form', 'ajax_event_form');
function ajax_event_form(){
  global $wpdb; 
  ...
  echo true;
  die;
}

Desde el Códice: wp_ajax_nopriv_(action) se ejecuta para los usuarios que no han iniciado sesión. Por lo tanto, si desea que se active en el front-end tanto para los visitantes como para los usuarios que han iniciado sesión, puede hacer esto:

add_action('wp_ajax_my_action', 'my_action_callback');
add_action('wp_ajax_nopriv_my_action', 'my_action_callback');

La solicitud ajax en WordPress funciona clasificando al usuario en dos categorías

1) Usuario con privilegio de inicio de sesión. 2) Usuario sin privilegios de inicio de sesión.

Entonces, si ha iniciado sesión (incluso como suscriptor), su función ajax se activará, es decir

add_action('wp_ajax_event_form', 'ajax_event_form');

esto llamará a la función ‘ajax_event_form’.

Para que esto funcione para usuarios que no han iniciado sesión, deberá escribir esto debajo de su acción ajax

add_action('wp_ajax_nopriv_event_form', 'ajax_event_form');

Entonces tu código será como:

add_action('wp_ajax_event_form', 'ajax_event_form');
add_action('wp_ajax_nopriv_event_form', 'ajax_event_form');
function ajax_event_form(){
  global $wpdb; 
  ...
  echo true;
  die;
}

avatar de usuario
hithin chandran

Crea un complemento y agrega esto:

<?php
/*
 * Plugin Name:ajax
 */
function my_ajax_callback_function() {
    echo "hiii";
    print_r($_POST);
    exit();
}
add_action( 'wp_ajax_my_action_name', 'my_ajax_callback_function' );    
// If called from admin panel
add_action( 'wp_ajax_nopriv_my_action_name', 'my_ajax_callback_function' );

Crea un js y agrega esto:

(function($) {
    $(document).ready(function(e) {
        $.ajax({
            url: "<?php echo admin_url('admin-ajax.php'); ?>",
            type: 'POST',
            data: {
                action: "my_action_name","name":"hithin","age":"27"
            },
            success: function (data, textStatus, jqXHR) {
                console.log(data);
            }
        });
    }
})(jQuery);

  • también podrías hacer $(function(){ ... }) en lugar del doble envoltorio

    – m02ph3u5

    8 de diciembre de 2016 a las 15:29

  • ¿Cómo es que el archivo JS tiene esto?

    – Laurence Copé

    18 de febrero de 2019 a las 12:28

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad