Se si dispone di un numero elevato di utenti da eliminare, è possibile utilizzare il comando wp delete wp-cli per evitare il timeout degli script.
Ecco un esempio di una query SQL per eliminare tutti gli utenti senza post di qualsiasi tipo e stato .
Puoi quindi provare questo one-liner non testato :
wp user delete $(wp db query "SELECT ID FROM wp_users WHERE ID NOT IN (SELECT DISTINCT post_author FROM wp_posts ) AND ID NOT IN (1,2,3)" | tail -n +2 ) --reassign=1
o in forma espansa:
wp user delete $(wp db query
"SELECT ID
FROM wp_users
WHERE ID NOT IN (
SELECT DISTINCT post_author FROM wp_posts
) AND ID NOT IN (1,2,3)" | tail -n +2
) --reassign=1
Tieni presente che abbiamo aggiunto una AND ID NOT IN (1,2,3)
restrizione aggiuntiva per assicurarci che questi utenti non vengano eliminati (ad es. Utenti admin). Dovrai adattarlo alle tue esigenze e anche al prefisso della tabella wp_
.
Quando l'ho provato brevemente per un paio di utenti, ho notato che dovevo aggiungere la tail -n +2
parte per evitare le prime 3 righe nell'intestazione e il bordo della tabella wp db query
dell'output.
Qui riassegniamo tutti i post all'utente 1, per evitare la notifica:
--reassign parameter not passed. All associated posts will be deleted. Proceed? [y/n]
Spero che tu possa adattarlo ulteriormente alle tue esigenze, come rilassare le condizioni di eliminazione dell'utente aggiungendo WHERE post_status = 'publish'
.
Nota: ricordarsi di eseguire il backup prima del test!