Skip to content

Instantly share code, notes, and snippets.

@madhvendras84
Created October 14, 2023 11:54
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save madhvendras84/d986a67b4db1107983b3ec1588b89ca5 to your computer and use it in GitHub Desktop.
Save madhvendras84/d986a67b4db1107983b3ec1588b89ca5 to your computer and use it in GitHub Desktop.
<?php
/**
* Template Name: Leaderboard
*/
get_header();
global $wpdb;
function get_current_user_rank(){
global $wpdb;
$user_id = get_current_user_id();
$i = 0;
$sql = "
SELECT * FROM ".$wpdb->prefix."usermeta WHERE meta_key = '_gamipress_points_points'
ORDER BY CAST(meta_value AS UNSIGNED) DESC
";
$results = $wpdb->get_results($sql);
foreach($results as $result){
$i++;
if($result->user_id == $user_id){
$user_rank["points"] = number_format($result->meta_value,0);
$user_rank["user_data"] = get_userdata($result->user_id);
$user_rank["position"] = $i;
$user_rank["level"] = gamipress_get_user_rank($result->user_id, "levels");
$user_rank["fullname"] = get_usermeta($result->user_id, "first_name", true)." ".get_usermeta($result->user_id, "last_name", true);
}
}
return $user_rank;
}
$user_id = get_current_user_id();
$belong_to_top = false;
$sql = "
SELECT * FROM ".$wpdb->prefix."usermeta WHERE meta_key = '_gamipress_points_points'
ORDER BY CAST(meta_value AS UNSIGNED) DESC
LIMIT 50
";
$results = $wpdb->get_results($sql);
$i = 0;
foreach($results as $result){
$i++;
$ranking[$i]["points"] = number_format($result->meta_value,0);
$ranking[$i]["user_data"] = get_userdata($result->user_id);
$ranking[$i]["fullname"] = get_usermeta($result->user_id, "first_name", true)." ".get_usermeta($result->user_id, "last_name", true);
$ranking[$i]["level"] = gamipress_get_user_rank($result->user_id, "levels");
if($result->user_id == $user_id){
$belong_to_top = true;
}
}
$user_rank = [];
if(!$belong_to_top){
$user_rank = get_current_user_rank();
}
?>
<main class="leaderboard">
<?php while ( have_posts() ) : the_post(); ?>
<?php the_content(); ?>
<?php endwhile; // end of the loop. ?>
<div class="leaderboard-inner">
<div class="leaderboard-content">
<div class="rankings">
<div class="rank-item header">
<div>RANK</div>
<div>
NAME
</div>
<div>
LEVEL
</div>
<div>POINTS</div>
</div>
<?php
foreach($ranking as $num=>$rank){
?>
<div class="rank-item <?=($rank["user_data"]->data->ID == get_current_user_id()) ? "active":""?>">
<div class="rank-number">
<h3>Rank:</h3>
<div>
<?php
switch($num){
case 1:
?><img src="<?=get_stylesheet_directory_uri();?>/assets/images/1.png" alt="gold"/><?php
break;
case 2:
?><img src="<?=get_stylesheet_directory_uri();?>/assets/images/2.png" alt="silver"/><?php
break;
case 3:
?><img src="<?=get_stylesheet_directory_uri();?>/assets/images/3.png" alt="bronze"/><?php
break;
default: break;
}
?>
<span><?=$num?></span>
</div>
</div>
<div class="user">
<h3>Name:</h3>
<div>
<img class="avatar" src="<?=get_avatar_url($rank["user_data"]->data->ID)?>" /> <span><?php echo $rank["fullname"];?></span>
</div>
</div>
<div class="level">
<h3>Level:</h3>
<div>
<?php
$badge_img = get_post_meta($rank["level"]->ID,"active",true);
if(!empty( $badge_img )){
echo "<img src='".wp_get_attachment_url($badge_img)."' class='level-img'/>";
}
echo '<span>'.$rank["level"]->post_title .'</span>';
?>
</div>
</div>
<div class="points">
<h3>Points:</h3>
<div>
<?=$rank["points"]?>
</div>
</div>
</div>
<?php
}
if(!empty($user_rank)){
#echo "<pre>";
#print_r($user_rank["user_data"]);
#echo "</pre>";
?>
<div class="rank-item active">
<div class="rank-number">
<h3>Rank:</h3>
<div>
<span><?=$user_rank["position"]?></span>
</div>
</div>
<div class="user">
<h3>Name:</h3>
<div>
<img class="avatar" src="<?=get_avatar_url($user_rank["user_data"]->data->ID)?>" /> <span><?php echo $user_rank["fullname"];?></span>
</div>
</div>
<div class="level">
<h3>Level:</h3>
<div>
<?php
$badge_img = get_post_meta($user_rank["level"]->ID,"active",true);
if(!empty( $badge_img )){
echo "<img src='".wp_get_attachment_url($badge_img)."' class='level-img'/>";
}
echo '<span>'.$user_rank["level"]->post_title.'</span>';
?>
</div>
</div>
<div class="points">
<h3>Points:</h3>
<div>
<?=$user_rank["points"]?>
</div>
</div>
</div>
<?php
}
?>
</div>
</div>
</div>
</main>
<?php get_footer(); ?>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment