Necesito agregar algunos datos a la meta del usuario en mi sitio web. Para hacerlo, uso ajax para llamar a un archivo PHP en mi servidor, sin embargo, cuando se ejecuta el código, simplemente devuelve nulo en lugar de la clase de usuario. Aquí está el código JS:
<script> jQuery.ajax({ type: "POST", url: 'https://mywebsite.com/wp-content/ajax/file.php', dataType: 'json', data: {}, success: function (obj, textstatus) { console.log(obj); } }); </script> Y los contenidos de file.php son:
<?php header('Content-Type: application/json'); global $current_user; ini_set('display_errors', 1); ini_set('display_startup_errors', 1); error_reporting(E_ALL); // 3 llines above are just to display the error if any get_currentuserinfo(); echo json_encode($current_user->ID); ?> Cuando ejecuto esto, el error dice que Uncaught Error: Call to undefined function get_currentuserinfo() in...
Cuando elimino esta línea, la salida es simplemente null . No sé si estoy haciendo todo correctamente, pero siéntete libre de sugerir diferentes soluciones. No necesito que se devuelva la ID, pero la variable $current_user no debe estar vacía.
No hay muchas razones para incluir un archivo .php completamente separado para manejar las solicitudes de AJAX.
Qué sucede : debido a que está incluyendo su propio archivo
.phppersonalizado, se incluye fuera del entorno de WordPress, por lo que no tiene acceso a las variables y funciones de WordPress.
Tienes dos opciones:
Use los métodos, acciones y controladores integrados de AJAX
"Incluir" WordPress en su archivo .php personalizado
Yo recomendaría el primer método. Es (casi) tan simple como usar elwp_ajax_{$action} y publicar la solicitud en admin-ajax.php en lugar de su archivo personalizado.
Tu JS se vería así:
jQuery.post( ajax_object.ajax_url, {action: 'my_action'}, function( response ){ alert( 'Here is the response: ' + response ); } ); Y luego dentro de su archivo functions.php (o similar), ponga en cola y localice el JS:
// Wherever you are enqueing this JS file, use `wp_localize_script` to pass variables to it wp_enqueue_script( 'your-script', $link_to_your_js, array('jquery') ); wp_localize_script( 'your-script', 'ajax_object', array( 'ajax_url' => admin_url( 'admin-ajax.php' ) ) ); y luego aún en su archivo functions.php o similar, maneje la solicitud:
add_action( 'wp_ajax_my_action', 'my_action_function' ); my_action_function(){ $user_info = get_currentuserinfo(); wp_send_json( $user_info ); } Alternativamente, usando el segundo método, puede incluir wp-load.php en su file.php , usando una de las muchas respuestas sobre cómo "incluir wp-load.php " en un archivo . Sin embargo, esto puede causar algunos problemas con la escalabilidad y el mantenimiento, por lo que para algo como esto, ¡recomiendo encarecidamente el primer método!
Una última nota rápida: usando wp_localize_script (como en el primer método) puede pasar la información del usuario actual (o cualquier cosa a la que WordPress tenga acceso, en realidad) directamente al script, por lo que ni siquiera necesita hacer una solicitud AJAX para eso:
wp_localize_script( 'your-script', 'ajax_object', array( 'ajax_url' => admin_url( 'admin-ajax.php' ), 'current_userinfo' => get_currentuserinfo() ); ¡Hacer eso permitirá que el archivo JS your-script tenga acceso a current_userinfo.ID y todas las demás variables disponibles directamente!