Uso de memoria al consultar usuarios
Tengo un pequeño problema con una de mis consultas. No puedo aumentar el límite de memoria de WordPress ya que HostGator lo establece en 64MB. No estoy seguro si es posible reducir la cantidad de memoria usada haciendo algunos cambios en mi código. Aquí está el código que estoy usando para consultar usuarios de un rol específico y mostrar su nombre, perfil y avatar:
<?php $users = get_users('role=s2member_level3'); ?>
<?php foreach ($users as $user) {
$avatar = get_avatar($user->ID, '96');
// Si no hay descripción y el avatar es de Gravatar, continuar con el siguiente usuario
if (get_the_author_meta('description', $user->ID) == "" && stristr($avatar,"gravatar.com/avatar")) { continue; }
?>
<div class="colaborador">
<div class="imagem-colaborador">
<?php if ($avatar == "") {
echo '<img src="http://1.gravatar.com/avatar/ad516503a11cd5ca435acc9bb6523536?s=96" alt="Avatar por defecto" title="Avatar de usuario" />';
} else {
echo $avatar;
} ?>
</div>
<div class="texto-colaborador">
<h2 class="nome-colaborador"><?php echo $user->display_name; ?></h2>
<p><?php the_author_meta('description', $user->ID); ?></p>
</div>
</div>
<?php } ?>

En tu ejemplo, estás obteniendo todos los campos en la llamada get_users, pero realmente solo estás usando los campos ID y display_name. Así que puedes ahorrar algo de memoria forzando a get_users a obtener solo los campos que necesitas.
$users = get_users(array(
'role'=>'s2member_level3',
'fields'=>array('ID', 'display_name'),
));
Eso ayudará a reducir tu huella de memoria.

También podrías ahorrar algo de memoria obteniendo el campo user_email y pasándolo directamente a la función get_avatar en lugar del ID de usuario.

Además, tu verificación de que $avatar esté vacío es inútil, ya que get_avatar siempre devolverá una URL de avatar válida. Así que tu llamada a stristr también es innecesaria y consume memoria sin motivo.

Hola Otto, acabo de darme cuenta y eliminé esta línea jeje, pero el problema de memoria sigue ahí. También intenté usar paginación pero sin éxito. Estoy pensando en cambiar la dirección del avatar predeterminado, para que cargue una imagen ubicada en mi localhost, ¿crees que hará alguna diferencia?

Llamar datos del autor
Podrías cambiar tus múltiples llamadas a get_the_author_meta()
por una sola llamada $author_data = get_userdata( $user_id );
. Luego simplemente extrae todo del objeto como $author_data->ID;
. Esto debería ahorrarte algo de memoria.
Avatar
Si omites el avatar también ahorrarás mucha memoria. Los avatares tardan mucho en cargar y consumen una gran cantidad de memoria.

¿Qué pasa con las funciones relacionadas con avatares que usan mucha memoria del servidor?..

Ayer revisé cómo el avatar usa memoria (a través de la barra de desarrollo de Chrome). Realmente no entiendo por qué, pero parecía que hay algo al respecto.

En realidad el avatar es lo principal de esta página, desafortunadamente. Pero probaré tu sugerencia Kaiser, no estoy muy seguro de que funcione, pero intentémoslo. ¡Gracias!

No entiendo. ¿Cómo muestra Chrome el uso de memoria de PHP? En una prueba rápida, la llamada a get_avatar()
aumenta el uso de memoria en 88 bytes.

¿Cómo lo probaste? Soy completamente nuevo en las herramientas de desarrollo de Chrome y no puedo repetir lo que intenté ayer. No tengo idea de cómo encontré esto...

@Vito Argos: Entonces mem_usage = ~88 bytes x XY usuarios
. ¿Cuántos usuarios tienes?

Los avatares no usan memoria real en el servidor. Eso es solo en el navegador. No te preocupes por eso.

Kaiser, tengo 61 usuarios, pero solo estoy mostrando aquellos que tienen avatares en sus perfiles (16), el número aumentará con el tiempo.
@Otto, entonces ¿qué podría estar usando la mayor parte de la memoria? Por cierto, cuando quito los avatares la página carga perfectamente, todos los usuarios se muestran.

Cuando desactivo mi plugin de boletines, este mensaje se muestra en la página de lista de usuarios: Error fatal: Memoria agotada (asignada 68943872) (intentó asignar 16000 bytes) en /home/organo/public_html/wp-includes/media.php en la línea 254
