Tengo 10 mil usuarios, aproximadamente el 98% de estos usuarios nunca publicaron una publicación (es decir, no publicaron comentarios).
Necesito una forma de eliminar en masa a los usuarios con 0 publicaciones.
El método debe contar todas las publicaciones incluidas, los tipos de publicaciones personalizadas y tiene que usar la función adecuada de WordPress para eliminar a un usuario como si se hubieran eliminado manualmente en el tablero y no solo soltar una tabla / fila en mysql, ya que eso podría causar resultados inesperados.
Hay un antiguo complemento que hace esto pero no considera todos los tipos de publicaciones, por lo que realmente no se puede usar.
Cualquier ayuda apreciada.
Respuestas:
Si tiene que eliminar una gran cantidad de usuarios, puede utilizar el comando wp user delete wp-cli para evitar tiempos de espera de script.
Aquí hay un ejemplo de una consulta SQL para eliminar a todos los usuarios sin publicaciones de ningún tipo y estado .
Por lo tanto, puede probar este one-liner
no probado:o en forma expandida:
Tenga en cuenta que agregamos una
AND ID NOT IN (1,2,3)
restricción adicional para asegurarnos de que estos usuarios no se eliminen (por ejemplo, usuarios administradores). Deberá ajustarlo a sus necesidades y también al prefijo de la tablawp_
.Cuando probé brevemente esto para un par de usuarios, noté que tenía que agregar la
tail -n +2
parte para evitar las 3 líneas superiores en el encabezado y el borde de la tabla de lawp db query
salida.Aquí reasignamos todas las publicaciones al usuario 1, para evitar el aviso:
Espero que pueda ajustarlo aún más a sus necesidades, como relajar las condiciones de eliminación del usuario agregando
WHERE post_status = 'publish'
.Nota: ¡ Recuerde hacer una copia de seguridad antes de probar!
fuente
Y
o usar--yes
para todos. Si modifica el sql para eliminar solo los usuarios que publicaron publicaciones, entonces podría necesitarlo para evitar eliminar, por ejemplo, borradores. Tenga en cuenta que mencionó en la pregunta a los usuarios que nunca han publicado una publicación . Eso significa estrictamente que pueden tener borradores. Supuse que no tenía eso en mente ;-) Sea muy específico en la pregunta de lo que desea eliminar para evitar las conjeturas. @MichaelRogersAquí hay una manera de hacerlo en PHP. Puede ser lento y / o de tiempo de espera, pero como es una cosa de una sola vez, no debería importar demasiado. Coloque temporalmente dentro de sus functions.php o cárguelo como un nuevo complemento.
fuente
A juzgar por el código fuente del antiguo complemento que mencionó, los tipos de publicación que no considera son adjuntos y revisión . Creo que puede solucionarlo fácilmente eliminando esto del código fuente del archivo de complemento no-posts-user-delete.php
fuente