No creo que ese sea el problema, la funcion shuffle solo revuelve el array para que quede un poco aleatorio, y eso de srand(etc) comienza el generador de numeros aleatorios para la funcion shuffle (que a partir de php 4.2 ya no es necesario inicializar)
Ese microtime()*1000000 solo obtiene el tiempo en microsegundos del sistema y lo multiplica para que quede de la forma 4 y no .000004, se llama la semilla, para generar tu numero aleatorio, pero de nuevo, a partir de php 4.2 no es necesario incluir una semilla)
Pero creo que he encontrado el problema, en la linea 116:
if ($setting_ad_order == 'random') { $theorder = 'RAND() LIMIT '.$setting_num_slots; } else { $theorder = 'slot ASC'; }
y luego en la 118:
$theads = $wpdb->get_results("SELECT * FROM $adtable_name WHERE status = '1' $exclude_sql ORDER BY $theorder", ARRAY_A);
Con esa $theorder lo que hace es una sentencia sql del tipo
SELECT * FROM * WHERE * ORDER BY RAND() LIMIT numerolimite....
Y ahi esta el problema, lo que hace esa consulta es seleccionar TODOS los registros de la tabla, despues ordena aleatoriamente TODOS los registros de la tabla, y al final te devuelve numerolimite registros de TODOS los que selecciono y ordeno
LUEEEEEGO, el codigo lo que hace es que obtiene cada uno de los registros que sacaste de la BD (numerolimite registros) "foreach ($theads as $thead){", verifica no se que "wp125_CheckAdDate($thead['end_date'], $thead['id']," y luego los acomoda en un arreglo "$adguidearray", el cual DESPUEEES vuelve a "randomizar", con las lineas de codigo que tu pusiste, randomiza el arreglo donde ya tiene registros aleatorios de la base
El problema del uso de CPU debe estar en el uso del ORDER BY RAND()
INTENTA eliminar la parte que dice RAND() y agregando el order by en la linea 116! Quedando:
if ($setting_ad_order == 'random') { $theorder = 'LIMIT '.$setting_num_slots; } else { $theorder = 'ORDER BY slot ASC'; }
y en la 118 quita el ORDER BY, que quede algo como:
$theads = $wpdb->get_results("SELECT * FROM $adtable_name WHERE status = '1' $exclude_sql $theorder", ARRAY_A);