Inicio › Foros › Varios (seguridad, internet, ofimática, errores) › Problemas con avatar en WordPress con BuddyPress y bbPress › Respuesta a: Problemas con avatar en WordPress con BuddyPress y bbPress
Puedes usar este script en PHP, solo tienes que copiarlo a un fichero, llamarlo «avatar.php», subirlo por FTP a la carpeta raíz de tu sitio web, cambiar los usuarios, contraseñas y rutas por defecto por las
tuyas y luego subir el fichero y ejecutarlo escribiendo:
http://direccion_de_tu_web/avatar.php
Es MUY importante que sigas bien estos pasos:
0. Antes de nada, HACER COPIA DE SEGURIDAD de la web completa, tanto de la Base de Datos (el script solo lee y no toca la base de datos, pero siempre es recomendable hacer copia) y de los
ficheros de WordPress.
1. Copias el contenido siguiente a un fichero y lo llamas «avatar.php»:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 |
<?php //Cambiar datos de conexión al servidor de MySQL y a la base de datos $servidor = "localhost"; $usuario = "usuario_bd"; $contrasena = "contraseña_usuario_bd"; $baseDatos ="nombre_base_datos"; //Carpeta donde se encuentran los avatares de BuddyPress //Si no es esta cambiar el valor por la que sea $carpetaAvatar = "wp-content/uploads/avatars/"; //Cambiar esta URL por la del avatar que quieres que aparezca si //el usuario no tiene avatar en BuddyPress $urlAvatarSinAvatar = "http://xxx/wp-content/uploads/2017/04/no-avatar-150x93.jpg"; $link = conectarBD(); //Recorremos todos los usuarios y buscamos los posts con la URL del avatar de WP User Avatar en la BD $query = "select u.id from cb_users u;"; $result = mysqli_query($link, $query); while($row = mysqli_fetch_array($result)) { //Obtenemos la URL del avatar de WP User Avatar $query = "select p.guid from cb_posts p where p.id=( SELECT m.meta_value from cb_usermeta m where m.user_id=" . $row['id'] . " and m.meta_key='cb_user_avatar')"; $urlAvatar = ""; $result2 = mysqli_query($link, $query); while($row2 = mysqli_fetch_array($result2)) { $urlAvatar = $row2["guid"]; if ($row2["guid"] != "") { //Añadir avatar solo si no existe ya en BuddyPress if (!is_dir($carpetaAvatar . $row["id"])) { mkdir($carpetaAvatar . $row["id"]); echo $urlAvatar . " -- " . $carpetaAvatar . $row["id"] . "/" . $row["id"] . "-bpfull." . extensionFichero($urlAvatar) . "<br>"; copy($urlAvatar, $carpetaAvatar . $row["id"] . "/" . $row["id"] . "-bpfull." . extensionFichero($urlAvatar)); copy($urlAvatar, $carpetaAvatar . $row["id"] . "/" . $row["id"] . "-bpthumb." . extensionFichero($urlAvatar)); } } } mysqli_free_result($result2); //Creamos la carpeta vacía del usuario si no existe avatar antiguo (WP User Avatar) ni nuevo (BuddyPress) if (!is_dir($carpetaAvatar . $row["id"])) { mkdir($carpetaAvatar . $row["id"]); } } mysqli_free_result($result); //Cerramos la conexión a la base de datos mysqli_close($link); //Recorremos todas las carpetas de los avatares de Buddypress //en busca de carpetas vacías //Si están vacías añadiemos avatar de defecto //Si no tenía avatar en WP Avatar le asignamos el de defecto $urlAvatar = $urlAvatarSinAvatar; $carpetas = scandir($carpetaAvatar); foreach ($carpetas as $carpeta) { $ficheros = scandir($carpetaAvatar . $carpeta); if (count($ficheros) < 3) //si no hay ficheros (solo .. y .) { echo " -- sin avatar -- " . $carpetaAvatar . $carpeta . "<br>"; copy($urlAvatar, $carpetaAvatar . $carpeta . "/" . $carpeta . "-bpfull." . extensionFichero($urlAvatar)); copy($urlAvatar, $carpetaAvatar . $carpeta . "/" . $carpeta . "-bpthumb." . extensionFichero($urlAvatar)); } } echo "<br><br><b>Fin del script, cerrada conexión con BD.</b>"; //Conectar con el servidor MySQL y la base de datos function conectarBD() { global $servidor, $puerto, $usuario, $contrasena, $baseDatos, $tabla; if (!($link = mysqli_connect($servidor, $usuario, $contrasena))) { echo "Error al conectar con el servidor de base de datos.<br/>"; exit(); } else { echo "Conexión a la base de datos satisfactoria.<br/>"; } if (!mysqli_select_db($link, $baseDatos)) { echo "Error al conectar al servidor de BD, no existe la base de datos (catálogo).<br/>"; exit(); } else { echo "Conexión a la base de datos $baseDatos satisfactoria.<br/>"; } return $link; } //Obtener extensión de fichero function extensionFichero($ruta) { return end(explode(".", $ruta)); } ?> |
2. Una vez copiado el contenido anterior en un fichero hay que cambiar los valores de conexión a la base de datos (servidor, base de datos, usuario y contraseña).
3. También hay que cambiar (si no es el correcto) la ubicación de los avatares de BuddyPress y la URL del avatar que se establecerá por defecto para aquellos usuarios que no tengan avatar, ni en BuddyPress,
ni en WP User Avatar.
4. Revisar el código por si ha cambiado algo con respecto a nuevas versiones.
5. Intentar ejecutar primero en una réplica de la web y no en la web real, para evitar problemas.
6. Una vez hecho TODO lo anterior, podremos subir el script PHP (avatar.php) a la raíz de nuestra web y ejecutarlo con un:
El Script tardará unos minutos en función del número de usuarios de la web de WordPress, NO cierres la ventana, no mostrará progreso, solo mostrará un listado de lo realizado una vez finalizado el script.