رفتن به مطلب

مشکل نمایش لیست کاربران بر اساس امتیاز


پست های پیشنهاد شده

با سلام خدمت کاربران و اساتید محترم انجمن

به مشکلی بر خوردم

من از کد زیر برای نمایش لیست 5 کاربر برتر سایت بر اساس امتیاز آنها استفاده میکنم


<?php foreach ( get_users('&orderby=user_point &number=5') as $user ) : ?>
<li><a><?php echo $user->display_name; ?>   امتیاز : (<?php $get_user_point = get_user_point($user->ID);?><?php echo $get_user_point; ?>)</a></li>

<?php endforeach; ?>

اما کد به درستی عمل نمیکند و کاربران را مرتب نشان نمیدهد به این صورت که کاربری که امتیاز بیشتر را دارد در اول لیست قرار نمیگیرد و در هر صورت مدیر سایت در اول لیست قرار میگیرد با اینکه امتیاز کمتری دارد به شکل زیر :

2j8kk6wdo7ulq58wur6k.png

ممنون میشم راهمنایی کنید چطور این مشکل رو حل کنم.

با تشکر

ویرایش شده توسط graphicno
لینک به ارسال

خوب برای اینکه نمی تونید به این ترتیب سورت بگیرید

برای سورت گرفتن اول باید مقدار user_point را در یک متای کاربری ذخیره کنید و بعد ضمن اینکه نام متا را در کوئری بیارید مقدار orderby را هم meta_value بگذارید

امتیاز دهیتون بر اساس آموزش همین سایته؟

نحوه ی امتیاز دهی را بفرمایید تا بشه بهتر راهنمایی کرد

لینک به ارسال

این کد را تست کنید :


<?php
global $user_ID;
$get_user_point = get_user_point($user->ID);
if(is_user_logged_in() and $get_user_point>0) {
remove_user_meta($user_ID, 'user_point');
add_user_meta($user_ID, 'user_point', $get_user_point, false);
//1
$user_point = get_user_meta($user_ID, 'user_point', true);
//echo $user_point;
//2
}
?>
<?php foreach ( get_users('meta_name=user_point&orderby=meta_value&number=5') as $user ) : ?>
<li><a><?php echo $user->display_name; ?>   امتیاز : (<?php echo $user_point; ?>)</a></li>
<?php endforeach; ?>

لینک به ارسال

بله استاد به صورت آموزشی هست که توسط خود شما در انجمن قرار گرفته

کد را تست کردم از این لاین اشکال گرفت و قالب به درستی بارگذاری نشد:

remove_user_meta($user_ID, 'user_point');

به این صورت هست ارور:

<b>Fatal error</b>: Call to undefined function remove_user_meta() in <b>

ویرایش شده توسط graphicno
لینک به ارسال

خوب پس این مراحل را انجام بدید

1. یک قالب برگه با کدهای زیر بسازید



<?php
/*
template name: points
*/?>
<!DOCTYPE html>
<html dir="rtl">

<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" >
<title></title>
</head>

<body>
<?php
$args = array (
'order' => 'DESC',
'orderby' => 'post_count',
);

$user_query = new WP_User_Query( $args );

if ( ! empty( $user_query->results ) ) {
echo '<ul>';
foreach ( $user_query->results as $user ) {
$point = get_user_point($user->ID);
if(get_user_meta($user->ID, 'user_point')) {
update_user_meta($user->ID, 'user_point', $point);
}
else {
add_user_meta($user->ID, 'user_point', $point);
}
?>
<li><a href="<?php echo home_url('/?author='.$user->ID);?>"><?php echo $user->display_name; ?>  <small> امتیاز : (<?php echo get_user_meta($user->ID, 'user_point', true); ?>)</small></a></li>
<?php
}
echo '</ul>';
echo 'ok';
}
else {
echo 'Not found';
}

$args = array (
'number' => '5',
'order' => 'DESC',
'meta_key' => 'user_point',
'meta_type' => 'NUMERIC',
'orderby' => 'meta_value',
);

// The User Query
$user_query = new WP_User_Query( $args );

// The User Loop
if ( ! empty( $user_query->results ) ) {
echo '<ol>';
foreach ( $user_query->results as $user ) { ?>
<li><a href="<?php echo home_url('/?author='.$user->ID);?>"><?php echo $user->display_name; ?>   امتیاز : (<?php echo get_user_meta($user->ID, 'user_point', true); ?>)</a></li>
<?php }
echo '</ol>';
}
?>
<style type="text/css">
body {
counter-reset:olli;
}
ul,ol,li {
padding:0;
margin:0;
}

li {
display:inline-block;
width:30%;
}
ol li {
counter-increment:olli;
}
ol li:before {
content:counter(olli)'.';
}
</style>
</body>

</html>

و از طریق پیشخوان برگه ها برگه جدید یک برگه با این قالب درست کنید و برگه را یکبار باز کنید تا برای کاربران قبلی متا ساخته بشه

برای اینکه توی مصرف منابع به مشکل نخورید پیشنهاد می کنم هر چند روز یکبار مثلا ده روز یکبار همین برگه را یکبار لود کنید تا امتیاز ها به روز شود و الا این کد را هم به header.php اضافه کنید


<?php
global $user_ID;
if(is_user_logged_in()) :
$point = get_user_point($user_ID);
if(get_user_meta($user_ID, 'user_point')) {
update_user_meta($user_ID, 'user_point', $point);
}
else {
add_user_meta($user_ID, 'user_point', $point);
}
endif;
?>

و این کوئری را هم در محل نمایش


<?php
$args = array (
'number' => '5',
'order' => 'DESC',
'meta_key' => 'user_point',
'meta_type' => 'NUMERIC',
'orderby' => 'meta_value',
);
$user_query = new WP_User_Query( $args );
if ( ! empty( $user_query->results ) ) {
echo '<ul>';
foreach ( $user_query->results as $user ) { ?>
<li><a href="<?php echo home_url('/?author='.$user->ID);?>"><?php echo $user->display_name; ?>   امتیاز : (<?php echo get_user_meta($user->ID, 'user_point', true); ?>)</a></li>
<?php }
echo '</ul>';
}
?>

لینک به ارسال

خیلی خیلی ممنونم استاد, مشکل حل شد.امیدوارم تو تمام مراحل زندگی موفق و پیروز باشید.

فقط یک مورد:

همانطور که شما عرض کردید برای اینکه اطلاعات بروز بشه باید برگه رو لود کنم در غیر اینصورت اون کد رو به فایل

header.php اضافه کنم.

من اون کد رو به فایل

header.php اضافه کردم تا نیازی به لود برگه نباشه ولی عمل نمیکنه و باز هم باید برگه رو لود کنم تا اطلاعات بروز بشه

مشکل مهم و خاصی نیست ولی اگر امکان بروز رسانی اطلاعات به صورت خودکار بود خیلی بهتر میشد

ولی

باز هم از شما تشکر میکنم بایت وقتی که برای حل مشکل بنده گذاشتید.

براتون آروزی موفقیت دارم

ویرایش شده توسط graphicno
لینک به ارسال

اون کد در صورتی عمل میب کنه که کاربر وارد سایت بشه

وقتی یکبار برگه را لود کنید اطلاعات همه به روز می شه مسلما امتیاز بعدی را کاربر وقتی می گیره که دوباره وارد سایت بشه مطلبی بگذاره یا نظری بده که در این صورت هم با هدر به روز می شه و الا که امتیازش تغییری نکرده و امتیاز قبلی براش باید اعمال بشه که می شه

لینک به ارسال

به گفتگو بپیوندید

هم اکنون می توانید مطلب خود را ارسال نمایید و بعداً ثبت نام کنید. اگر حساب کاربری دارید، برای ارسال با حساب کاربری خود اکنون وارد شوید .

مهمان
ارسال پاسخ به این موضوع ...

×   شما در حال چسباندن محتوایی با قالب بندی هستید.   حذف قالب بندی

  تنها استفاده از 75 اموجی مجاز می باشد.

×   لینک شما به صورت اتوماتیک جای گذاری شد.   نمایش به صورت لینک

×   محتوای قبلی شما بازگردانی شد.   پاک کردن محتوای ویرایشگر

×   شما مستقیما نمی توانید تصویر خود را قرار دهید. یا آن را اینجا بارگذاری کنید یا از یک URL قرار دهید.

×
×
  • اضافه کردن...