WP CLI πως να σβήσω χρήστες με συγκεκριμένο role
Πολλές φορές τυχαίνει να έχουμε ανάγκη να σβήσουμε μαζικά users. Αν μιλάμε για μερικές δεκάδες χρήστες αυτό δεν είναι ιδιαίτερο πρόβλημα, αφού και μέσα από το διαχειριστικό είναι εύκολη διαδικασία. Τι γίνεται όμως αν μιλάμε για κάποιες εκατοντάδες ή χιλιάδες χρήστες;
Ο λόγος μπορεί να είναι μία απλή εκαθάρριση ανενεργών χρηστών ή ακόμα και μαζικές spam εγγραφές σε κάποιο eshop. Αυτή η διαδικασία θα είναι αρκετά χρονοβόρα όσο και κοστοβόρα για τον server.
Εδώ έρχεται το μαγικό εργαλείο του WP CLI να μας σώσει. Η εντολή wp user delete του WordPress είναι αρκετά απλή καθώς προσφέρει αυτό που θέλουμε αλλά για τη διαγραφή ενός χρήστη τη φορά. Με κάποιες έξτρα Classes μπορούμε να φτάσουμε σοτ αποτέλεσμα που θέλουμε.
Διαγραφή όλων των χρηστών με ρόλο customer
<?php
// delete-customers.php
if ( ! class_exists( 'WP_CLI' ) ) {
return;
}
class Delete_Customers_Command {
/**
* Διαγραφή όλων των χρηστών με ρόλο 'customer'.
*/
public function __invoke( $args, $assoc_args ) {
$customers = get_users( array( 'role' => 'customer' ) );
// εάν δεν υπάρχουν χρήστες επιστρέφει το αντίστοιχο μήνυμα
if ( empty( $customers ) ) {
WP_CLI::success( 'No customers found to delete.' );
return;
}
// για κάθε χρήστη που βρέθηκε, τον διαγράφουμε
foreach ( $customers as $customer ) {
wp_delete_user( $customer->ID );
WP_CLI::log( "Deleted user with ID {$customer->ID}." );
}
// εάν ολοκληρωθεί επιτυχώς η διαδικασία επιστρέφουμε αντίστοιχο μήνυμα στο terminal
WP_CLI::success( 'All customers have been deleted.' );
}
}
// ορίζουμε το όνομα της εντολής και ποιο Class να εκτελεί
WP_CLI::add_command( 'user delete-customers', 'Delete_Customers_Command' );
Το μόνο που μένει είναι να πληκτρολογήσουμε στο terminal
wp user delete-customers
Διαγραφή χρηστών με βάση μέρος του email τους
Μπορεί να θέλουμε να σβήσουμε χρήστες με βάση κάποιο μέρος του email τους που έχουμε διαπιστώσει πχ οτι είναι spam accounts και τελειώνουν σε .ru.
<?php
// delete-gmail-customers.php
if ( ! class_exists( 'WP_CLI' ) ) {
return;
}
class Delete_Ru_Customers_Command {
/**
* Διαγραφή χρηστών με ρόλο 'customer'και email που περιέχει '.ru.
* χρησιμοποιούμε την built in παράμετρο search σε συνδυασμό με τη search_columns
* στη search μπορούμε να ψάξουμε και με wildcard (*)
*/
public function __invoke( $args, $assoc_args ) {
$customers = get_users(array(
'role' => 'customer',
'search' => '*.ru*',
'search_columns' => array('user_email')
));
if ( empty( $customers ) ) {
WP_CLI::success( 'No customers found to delete.' );
return;
}
foreach ( $customers as $customer ) {
if ( strpos( $customer->user_email, 'gmail.com' ) !== false ) {
wp_delete_user( $customer->ID );
WP_CLI::log( "Deleted user with ID {$customer->ID} and email {$customer->user_email}." );
}
}
WP_CLI::success( 'All customers with .ru email addresses have been deleted.' );
}
}
WP_CLI::add_command( 'user delete-ru-customers', 'Delete_Ru_Customers_Command' );
wp user delete-ru-customers