4ответ(ов) в теме
на форуме уже было предложено готовое решение. Чтобы не искать, выкладываю здесь код, добавив котрый в файл functions.php плагина или вашего шаблона становиться возможным использование нового шорткода [online-sort-user], который будет выполнять сортировку пользователей именно по их последней активности на сайте:
add_shortcode('online-sort-user','short_online_users_list');
function short_online_users_list($atts, $content = null){
global $post;
global $wpdb;
//определение текущей страницы
if($_GET['navi']) $navi = $_GET['navi'];
else $navi=1;
//режим поиска пользователей по имени или логину
if($_POST['search-user']){
if($_POST['orderuser']==1){ //по имени
$args = array(
'meta_query' => array(
'relation' => 'OR',
array(
'key' => 'first_name',
'value' => $_POST['search-user'],
'compare' => 'LIKE',
),
array(
'key' => 'last_name',
'value' => $_POST['search-user'],
'compare' => 'LIKE',
)
)
);
}
else{ //по логину
$args = array( 'search'=>'*'.$_POST['search-user'].'*');
}
//параметр шорткода на запрет отображения пользователя
extract(shortcode_atts(array(
'exclude' => 0
),
$atts));
//получение найденных ID
$users = get_users($args);
foreach($users as $user){
if(++$a>1)$userslst .= ',';
$userslst .= $user->ID;
}
//подсчет разрешенных для отображения пользователей
$count_user = $wpdb->get_var("SELECT COUNT(user) FROM ".RCL_PREF."user_action WHERE (user IN ($userslst)) AND (user NOT IN ($exclude))");
//получение списка найденных ID по посещаемости
$rcl_action_users = $wpdb->get_results("SELECT user,time_action FROM ".RCL_PREF."user_action WHERE (user IN ($userslst)) AND (user NOT IN ($exclude)) ORDER BY time_action DESC");
}
//режим default
else{
//параметры шорткода по умолчанию
extract(shortcode_atts(array(
'inpage' => 10,
'exclude' => 0
),
$atts));
//подсчет разрешенных для отображения пользователей
$count_user = $wpdb->get_var("SELECT COUNT(user) FROM ".RCL_PREF."user_action WHERE user NOT IN ($exclude)");
//определение смещения для страничного вывода
$start = ($navi-1)*$inpage;
$num_page = ceil($count_user/$inpage);
//получение списка ID сортированных по посещаемости
$rcl_action_users = $wpdb->get_results("SELECT user,time_action FROM ".RCL_PREF."user_action WHERE user NOT IN ($exclude) ORDER BY time_action DESC LIMIT $start,$inpage");
}
//Форма поиска
$userlist .='
<form method="post" action="">
<p align="right">Поиск пользователей: <input type="text" name="search-user" value="'.$_POST['search-user'].'">
<select name="orderuser">
<option '.selected($_POST['orderuser'],1,false).' value="1">по имени</option>
<option '.selected($_POST['orderuser'],2,false).' value="2">по логину</option>
</select>
<input type="submit" class="recall-button" value="Найти"><br>
</p>
</form>
<h3>Всего пользователей: '.$count_user.'</h3>
<table class="userlist">';
$names = get_names_array_rcl($rcl_action_users,'user');
//Вывод списка пользователей
foreach((array)$rcl_action_users as $user){
$last_action = last_user_action_recall($user->time_action);
if(!$last_action)
$action = '<div class="status_author_mess" style="background:url('.get_bloginfo('wpurl').'/wp-content/plugins/recall/img/minionline.gif) no-repeat;"></div>';
else
$action = '<div>не в сети '.$last_action.'</div>';
$userlist .='<tr class="user-single list-list">';
$userlist .='<td class="thumb-user" width="90">'.get_avatar($user->user,70).'</td>';
$userlist .='<td><a href="'.get_author_posts_url($user->user).'"><h3 class="title-prod">'.$names[$user->user].'</h3></a>';
$desc = apply_filters('rcl_description_user',$desc,$user->user);
$userlist .= $desc;
$userlist .='<p class="desc-prod">'.get_the_author_meta('description', $user->user).'</p></td>';
$userlist .='<td class="action-user">'.$action.'</td>';
$userlist .='</tr>';
$desc = '';
}
$userlist .='</table>';
//вывод постраничной навигации
if(!$_POST['search-user']){
$userlist .= navi_rcl($inpage,$count_user,$num_page);
}
return $userlist;
} //конец шорткода userlist
Тема закрыта. Публикация новых сообщений запрещена.