I work on this plugin for Wordpress to delete users with a subscriber role and 30 days since joining us; users are active or not.
I cannot correct this error after activating.
if ( !defined('ABSPATH') )
define('ABSPATH', dirname(__FILE__) . '/');
global $wpdb;
require_once(ABSPATH.'/wp-admin/includes/user.php');
$role = "subscriber"; // The role to kill
$reassign = 1; // The user that all posts will fall back to, other wise they will be deleted
$days = 30; // Calculated in days, how old a user should be in order to get deleted
$this_role = "[[:<:]]".$role."[[:>:]]";
$query = $wpdb->prepare("
SELECT user_id
FROM $wpdb->usermeta
WHERE meta_key = '{$wpdb->prefix}capabilities'
AND (SELECT user_id
FROM $wpdb->users
WHERE user_registered < NOW() - INTERVAL $days DAY
)
AND meta_value RLIKE %s", $this_role);
if ( $users_of_this_role = $wpdb->get_results( $query, ARRAY_N ) )
foreach( $users_of_this_role as $user_id )
wp_delete_user( $user_id[0], $reassign );
Error:
WordPress database error
Subquery returns more than 1 row for query
SELECT user_id
FROM wpi3_usermeta
WHERE meta_key = 'wpi3_capabilities'
AND (SELECT user_id
FROM wpi3_users
WHERE user_registered < NOW() - INTERVAL 30 DAY
)
AND meta_value RLIKE '[[:<:]]subscriber[[:>:]]' made by require_once('wp-load.php'), require_once('wp-config.php'), require_once('wp-settings.php'), include_once('/plugins/delete_users-1/delete_users.php')
I tried adding IN
to WHERE
but it shows a syntax error.
You should use `user_id in`
SELECT user_id
FROM wpi3_usermeta
WHERE meta_key = 'wpi3_capabilities'
AND user_id in (SELECT user_id
FROM wpi3_users
WHERE user_registered < NOW() - INTERVAL 30 DAY
)
DELETE FROM wpi3_users
WHERE user_registered < NOW() - INTERVAL 30 DAY
AND user_id IN (
SELECT user_id
FROM wpi3_usermeta
WHERE meta_key = 'wp_capabilities'
AND meta_value LIKE '%subscriber%'
);