Esto se ha preguntado antes, pero he intentado muchas cosas para que funcione, y no sé lo que me estoy perdiendo. Tengo un directorio de miembros para un sitio de WordPress que usa Ajax para llamar y mostrar perfiles de miembros. También te permite ordenarlos alfabéticamente por nombre. Ambos funcionan perfectamente cuando se inicia sesión, pero devuelven ‘0’ cuando se cierra la sesión. Lo he probado con varias cuentas con diferentes permisos, y siempre que uno esté conectado con cualquier cuenta, funciona bien.
tengo ambos
add_action('wp_ajax_nopriv_load-filter', 'load_members');
y
add_action('wp_ajax_load-members', 'load_members');
agregado, que he leído debería hacer que funcione tanto para los usuarios que iniciaron sesión como para los que no iniciaron sesión. Supongo que los usuarios que no han iniciado sesión no pueden acceder a algo esencial para el funcionamiento de Ajax, posiblemente el archivo ajax-admin.php sobre el que sigo leyendo, pero las correcciones que he intentado no hacen nada.
Intenté depurar en Chrome (F12, verificar la red en busca de errores, etc.) y no encontré información útil. También agregué líneas console.log() a varias partes de mi código para determinar si se estaba llamando, y todas se llamaron como se esperaba, iniciaron o cerraron sesión.
de todos modos, aquí está mi código de functions.php (sin incluir la parte add_action):
function load_members()
{
$letter = $_POST[ 'letter' ];
if($letter == "all") {
$args = array(
'role' => 'Subscriber', );
$user_query = new WP_User_Query($args);
ob_start();
global $user;
if (!empty($user_query->results)) {
foreach ($user_query->results as $user) {
get_template_part('template', 'directory');
}
} else {
echo '<div class="center" >No users found.</div>';}
$response = ob_get_contents();
ob_end_clean();
echo $response;
die(1);
Y aquí está la función de mi página de directorio:
function members_get(catID) {
jQuery("a.ajax").removeClass("current");
jQuery("#category-post-content").fadeOut();
$('.' + catID).addClass("current"); //adds class current to the menu item being displayed so you can style it with css
jQuery("#loading-animation").show();
var ajaxurl="<?php echo admin_url("admin-ajax.php'); //must echo it?>';
console.log(ajaxurl);
jQuery.ajax({
type: 'POST',
url: ajaxurl,
data: {"action": "load-members", letter: catID },
success: function(response) {
jQuery("#category-post-content").fadeIn();
jQuery("#category-post-content").html(response);
jQuery("#loading-animation").hide();
return false;
}
Disculpas por el formato en la sección functions.php; pegaba raro y traté de arreglarlo. ¿Alguien tiene alguna idea de lo que está pasando?