Utilizzo della memoria durante l'interrogazione degli utenti
Sto avendo un piccolo problema con una delle mie query. Non posso aumentare il limite di memoria di WordPress perché HostGator lo imposta a 64MB. Non sono sicuro se sia possibile ridurre la quantità di memoria utilizzata apportando alcune modifiche al mio codice. Ecco il codice che sto utilizzando per interrogare gli utenti di un ruolo specifico e visualizzare il loro nome, profilo e avatar:
<?php $users = get_users('role=s2member_level3'); ?>
<?php foreach ($users as $user) {
$avatar = get_avatar($user->ID, '96');
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 predefinito" title="Avatar utente" />';
} 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 } ?>

Nel tuo esempio, stai ottenendo tutti i campi nella chiamata get_users, ma in realtà stai utilizzando solo i campi ID e display_name. Quindi puoi risparmiare memoria forzando get_users a recuperare solo i campi necessari.
$users = get_users(array(
'role'=>'s2member_level3',
'fields'=>array('ID', 'display_name'),
));
Questo aiuterà a ridurre l'utilizzo della memoria.

Potresti anche risparmiare un po' di memoria ottenendo il campo user_email e passandolo direttamente nella funzione get_avatar invece dell'ID utente.

Inoltre, il tuo controllo per verificare se $avatar è vuoto è inutile, poiché get_avatar restituirà sempre un URL valido per l'avatar. Quindi anche la tua chiamata a stristr è superflua e consuma memoria senza motivo.

Ehi Otto, ho appena capito e ho rimosso questa riga hehe, ma il problema della memoria è ancora presente. Ho anche provato a usare la paginazione ma senza successo. Sto pensando di cambiare l'indirizzo dell'avatar predefinito, così caricherà un'immagine presente sul mio localhost, pensi che farà la differenza?

Recuperare i dati dell'autore
Puoi sostituire le tue multiple chiamate get_the_author_meta()
con una singola chiamata $author_data = get_userdata( $user_id );
. Successivamente puoi semplicemente estrarre tutto dall'oggetto come $author_data->ID;
. Questo dovrebbe farti risparmiare un po' di memoria.
Avatar
Se ometti l'avatar risparmierai anche molta memoria. Gli avatar impiegano molto tempo per caricarsi e utilizzano un'intera quantità di memoria.

E per quanto riguarda le funzioni relative agli avatar che utilizzano molta memoria del server?..

Ho appena dato un'occhiata a come l'avatar utilizza la memoria (tramite la barra di sviluppo di Chrome) ieri. Non capisco davvero perché, ma sembra che ci sia qualcosa al riguardo.

in realtà l'avatar è la cosa principale di questa pagina, purtroppo. Ma proverò il tuo suggerimento Kaiser, non sono veramente sicuro che funzionerà, ma proviamoci. Grazie!

Non capisco. Come fa Chrome a mostrare l'utilizzo della memoria PHP? Da un rapido test la chiamata get_avatar()
aumenta l'utilizzo della memoria di 88 byte.

Come hai testato? Sono completamente nuovo alle strumentazioni di sviluppo di Chrome e non riesco a ripetere ciò che ho provato ieri. Non ho idea di come l'abbia trovato...

@Vito Argos: Quindi mem_usage = ~88 byte x XY utenti
. Quanti utenti hai?

Gli avatar non utilizzano memoria reale sul server. Quella è solo nel browser. Non preoccupartene.

Kaiser, ho 61 utenti, ma sto visualizzando solo quelli che hanno avatar associati ai loro profili (16), il numero aumenterà con il tempo.
@Otto, quindi cosa potrebbe utilizzare la maggior parte della memoria? A proposito, quando rimuovo gli avatar la pagina si carica perfettamente, tutti gli utenti vengono visualizzati.

Quando disattivo il mio plugin per le newsletter, questo messaggio viene visualizzato nella pagina dell'elenco utenti: Errore fatale: Memoria esaurita (allocati 68943872) (tentativo di allocare 16000 byte) in /home/organo/public_html/wp-includes/media.php alla riga 254
