есть такой mysql код:
SELECT wp_users.ID, wp_users.user_login
FROM wp_users
LEFT JOIN wp_posts ON wp_users.ID = wp_posts.post_author
LEFT JOIN wp_comments ON wp_users.ID = wp_comments.user_id
LEFT JOIN wp_usermeta ON wp_users.ID = wp_usermeta.user_id
WHERE wp_posts.post_author is NULL
AND wp_comments.user_id is NULL
AND wp_usermeta.meta_key = 'wp_capabilities'
AND LOCATE('administrator', wp_usermeta.meta_value) = 0
AND LOCATE('editor', wp_usermeta.meta_value) = 0
AND LOCATE('author', wp_usermeta.meta_value) = 0
AND LOCATE('contributor', wp_usermeta.meta_value) = 0
он выбирает из базы всех юзеров-неавторов, у которых нет постов и комментариев.
выбрать то он выбирает, но как их автоматом при этом удалить? вручную чекать не слишком хочется.
сам код взят из плагина Clean Up Users, который почему-то работает у меня на localhost, но отказывается
работать у хостера. может кто объяснит причину?
или дайте ссылку на любой плагин, способный удалить неактивных зарегистрированных юзеров – как ни странно
я такого плагина найти не смог ((
<?php
/*
Plugin Name: Clean Up Users
Plugin URI: http://www.dagondesign.com/articles/clean-up-users-plugin-for-wordpress/
Description: Removes registered users that have no posts or comments
Author: Dagon Design
Version: 1.0
Author URI: http://www.dagondesign.com/
*/
$ddcuu_version = '1.0';
function ddcuu_add_options_pages() {
if (function_exists('add_options_page')) {
add_options_page("Clean Up Users", 'DDCleanUpUsers', 8, __FILE__, 'ddcuu_options_page');
}
}
function ddcuu_options_page() {
// user roles
$skip_admins = TRUE;
$skip_editors = TRUE;
$skip_authors = TRUE;
$skip_contributors = TRUE;
global $wpdb, $dddu_version;
$tp = $wpdb->prefix;
$result = "";
if (isset($_POST['info_update'])) {
// start processing
?><div id="message" class="updated fade"><p><strong><?php
echo "Action Complete - View Results Below";
?></strong></p></div><?php
$result = '';
$dddu_confirm = (bool)$_POST['dddu_confirm'];
if ($dddu_confirm) {
$skip_check = '';
if ($skip_admins) $skip_check .= " AND LOCATE('administrator', {$tp}usermeta.meta_value) = 0 ";
if ($skip_editors) $skip_check .= " AND LOCATE('editor', {$tp}usermeta.meta_value) = 0 ";
if ($skip_authors) $skip_check .= " AND LOCATE('author', {$tp}usermeta.meta_value) = 0 ";
if ($skip_contributors) $skip_check .= " AND LOCATE('contributor', {$tp}usermeta.meta_value) = 0 ";
// list of users with no posts and no comments
$userlist = (array)$wpdb->get_results("
SELECT {$tp}users.ID, {$tp}users.user_login
FROM {$tp}users
LEFT JOIN {$tp}posts ON {$tp}users.ID = {$tp}posts.post_author
LEFT JOIN {$tp}comments ON {$tp}users.ID = {$tp}comments.user_id
LEFT JOIN {$tp}usermeta ON {$tp}users.ID = {$tp}usermeta.user_id
WHERE {$tp}posts.post_author is NULL
AND {$tp}comments.user_id is NULL
AND {$tp}usermeta.meta_key = 'wp_capabilities'
{$skip_check}
");
foreach ($userlist as $u) {
wp_delete_user($u->ID);
}
$result = 'Users deleted: ' . count($userlist);
} else {
$result = 'No option selected!';
}
// end processing
} ?>
<div class=wrap>
<h2>Clean Up Users v<?php echo $dddu_version; ?></h2>
<p>For information and updates, please visit:<br />
<a href="http://www.dagondesign.com/articles/clean-up-users-plugin-for-wordpress/">http://www.dagondesign.com/articles/clean-up-users-plugin-for-wordpress/</a></p>
<?php
if ($result != "") {
echo '<div style="border: 1px solid #888888; padding: 5px;">';
echo '<strong>Results</strong>:<br /> ' . trim($result) . '</div>';
}
?>
<form enctype="multipart/form-data" method="post" action="<?php echo $_SERVER["REQUEST_URI"]; ?>" >
<input type="hidden" name="info_update" id="info_update" value="true" />
<div style="padding: 0 0 15px 12px;">
<?php print $formatinfo; ?>
<h3>Options</h3>
<input type="checkbox" name="dddu_confirm" id="dddu_confirm" />
Delete users with no comments or posts
</div>
<div class="submit">
<input type="submit" name="info_update" value="Submit" />
</div>
</form>
</div><?php
}
add_action('admin_menu', 'ddcuu_add_options_pages');
?>
Как-то так, наверно:
DELETE FROM wp_users WHERE ID in (SELECT wp_users.ID FROM wp_users и дальше куча джойнов и условий условий выборки)
Подробности ищите по ключевым словам "вложенные запросы MySQL"
Только ж еще придется проводить зачистку метаданных.
ругается на ошибку, ну да ладно, поковыряю справочники, спасибо за подсказку.
а какие метаданные еще? вроде в запросе указывается, что мета должны быть пустыми, собственно
насколько я понимаю именно пустые мета указывают на отсутствие постов или комментариев или
я ошибаюсь?
похимичил с плагинов, вроде вот такой код должен корректно прибить юзеров:
Та дофигища в wp_usermeta всякого разного для каждого юзера: nickname, rich_editing, admin_color, wp_capabilities, wp_user_level, etc.
Я бы советовал разобраться с плагином.
спасибо Юрий, ваша подсказка помогла мне найти решение с плагином ))
оказывается слишком большой результат у запроса получается, а у хостера mysql настроен так, что по умолчанию не дает выполнить такой запрос.
надо было поставить SET SESSION SQL_BIG_SELECTS=1 перед ним.