رفتن به مطلب

نحوه ذخیره کردن مقدار یک متغیر در پایگاه داده


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

با سلام خدمت دوستان گرامی.

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


/*****
* Show WP-PostRatings Total For Each Author
***/
function author_rating_total() {
global $wpdb;
global $ratings_sum;
$user_id = get_the_author_meta( 'ID' );
$query = array (
'author' => $user_id,
'suppress_filters' => 'true',
'posts_per_page' => -1
);
$queryObject = new WP_Query($query); while($queryObject->have_posts()) : $queryObject->the_post();

$post_ratings_data = get_post_custom(get_the_id());
$post_ratings_score = intval($post_ratings_data['ratings_score'][0]);

$ratings_array[] = $post_ratings_score;

endwhile;

$ratings_sum = array_sum($ratings_array);

if ($ratings_sum > 0) {
$ratings_sum = $ratings_sum;
}
echo $ratings_sum;

wp_reset_query();
}

من میخوام مقدار متغیر $ratings_sum رو توی پایگاه داده ذخیره کنم.

توی جدول wp-users ،البته من یه فیلد جدید به نام user_rate به این جدول اضافه کردم و میخوام مقدار توی این فیلد ذخیره بشه.

این کد رو هم امتحان کردم مثل اینکه ایراد داره و جواب نمیده:


$wpdb->update('wp_users', array( 'user_rate' => '$ratings_sum'), array( 'ID' => $user_id ) );

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

لینک به ارسال

برای ذخیره اطلاعات در دیتابیس و برای کاربران از تابع های

add_user_meta() 

و

update_user_meta()

استفاده کنید

لینک به ارسال

این می تونه یک نمونه خیلی ساده شده اش باشه


<?php
$user_ID = get_the_author_meta( 'id');
if(get_the_author_meta( 'rating', $user_ID )) {
$rat = get_the_author_meta( 'rating', $user_ID );
}
else {
$rat = 0;
add_user_meta( $user_ID, 'rating',$rat);
}

if(isset($_GET['rat'])) {
$rat = $_GET['rat'];
update_user_meta( $user_ID, 'rating',$rat);
}
$ratup = $rat+1;
$ratdown = $rat-1;
?>
<a href="<?php the_permalink();?>/?rat=<?php echo $ratup;?>">+</a>
<a href="<?php the_permalink();?>/?rat=<?php echo $ratdown;?>">-</a>
<?php echo $rat;?>

لینک به ارسال

آقا ایمان ممنون.

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

اصلا مقداری به متا ها توی user meta اضافه نمیشه حتی فیلدش هم ساخته نمیشه همون فیلد rating.

ببینید من میخوام اون متغیر $ratings_sum قبل از اکو کردن توی پایگاه داده ذخیره بشه.اگه میتونید همینو بهم کمک کنید که انجام بده ممنون میشم.

لینک به ارسال

کار شما که درست نیست

چرا از user meta استفاده نکردید؟

http://davidwalsh.name/add-profile-fields

لینک به ارسال

کار شما که درست نیست

چرا از user meta استفاده نکردید؟

http://davidwalsh.na...-profile-fields

ممنونم آقا کسرا بهم کمک کرد.

این شکلی دارم استفاده میکنم ولی اصلا چیزی ذخیره نمیشه.


function author_rating_total() {
$user_id = get_the_author_meta( 'ID' );
if(get_the_author_meta( 'rating', $user_ID )) {
$rat = get_the_author_meta( 'rating', $user_ID );
}
else {
$query = array (
'author' => $user_id,
'suppress_filters' => 'true',
'posts_per_page' => -1
);
$queryObject = new WP_Query($query); while($queryObject->have_posts()) : $queryObject->the_post();

$post_ratings_data = get_post_custom(get_the_id());
$post_ratings_score = intval($post_ratings_data['ratings_score'][0]);

$ratings_array[] = $post_ratings_score;
endwhile;
$ratings_sum = array_sum($ratings_array);

if ($ratings_sum > 0) {
$rat = $ratings_sum;
}
add_user_meta($user_ID,'rating', $rat);

}
if(isset($_GET['rat'])) {
$rat = $_GET['rat'];
update_user_meta( $user_ID, 'rating', $rat);
}
wp_reset_query();
$rate = get_the_author_meta( 'rating');
echo $rate;
}

حتی خودم دستی مقدار به این متای جدید هم که ساختم مقدار دادم مقدار رو نشون میده اما وقتی اون مقدار رو پاک میکنم مقدار این متغیر رو ذخیره نمیکنه.

موندم توش که چیکار کنم!!!!

در ضمن مجبورم از این کوئری توش استفاده کنم چون مقدار امتیاز های داده شده به پست ها رو برمیگردونه.

لینک به ارسال

کدی که عرض کردم هم سالمه و هم راه درست کاریه که می خواهید بکنید

تصویر نمونه اش

post-336-0-98330100-1387340232_thumb.jpg

نشانی

http://wpu.ir/ubet1

البته نمونه کاملا ساده شده فقط برای درک کار با تابع

این هم کل کدش


<?php
$user_ID = get_the_author_meta( 'id');
if(get_the_author_meta( 'rating', $user_ID )) {
$rat = get_the_author_meta( 'rating', $user_ID );
}
else {
$rat = 0;
add_user_meta( $user_ID, 'rating',$rat);
}

if(isset($_GET['rat'])) {
$rat = $_GET['rat'];
update_user_meta( $user_ID, 'rating',$rat);
}
$ratup = $rat+1;
$ratdown = $rat-1;
?>
<div id="authorRatingBlock">
<a href="?rat=<?php echo $ratup;?>">+</a>
<a href="?rat=<?php echo $ratdown;?>">-</a>
<span id="authorRatingInner">
<span id="authorRating">
<?php echo $rat;?>
</span>
</span>
<div>

البته شما باید از متد post استفاده کنید و برای آی دی مطلب و یا آی دی و آی پی امتیاز دهنده هم فیلد hidden بگذارید که خودش اطلاعات رو بگیره و ذخیره کنه

این کار باعث می شه بتونید انواع کوئری ها رو هم برای گزارش بگیرید و الا با رکورد کردن کوئری تازه مشکلات فراخوانی و تداخل و ارورهای جور واجورش شروع می شه

لینک به ارسال

اگر منظورتون از اینکه فیلدش نمی آد اینه که در صفحه پروفایل کاربر فیلد نداره که نباید داشته باشه ولی اگر می خواهید فیلد براش اضافه کنید از کدی شبیه کد زیر در فایل functions.php استفاده کنید


function custom_user_contact_methods( $user_contact_method ) {
$user_contact_method['rating'] = __( 'User Rating Text', 'kubrick' );

return $user_contact_method; ;
}
// Hook into the 'user_contactmethods' filter
add_filter( 'user_contactmethods', 'custom_user_contact_methods' );

لینک به ارسال

البته شما باید از متد post استفاده کنید و برای آی دی مطلب و یا آی دی و آی پی امتیاز دهنده هم فیلد hidden بگذارید که خودش اطلاعات رو بگیره و ذخیره کنه

این کار باعث می شه بتونید انواع کوئری ها رو هم برای گزارش بگیرید و الا با رکورد کردن کوئری تازه مشکلات فراخوانی و تداخل و ارورهای جور واجورش شروع می شه

آقا ایمان خوب من این کوئری که قرار دادم همه کارا رو خودش انجام میده و مقدار نهایی رو توی متغیر rating_sum ذخیره میکنه.

خوب الان من میخوام که این مقدار درون یه فیلد ذخیره بشه با راهنمایی آقا پارسا یه فیلد هم درست کردم مثل اینی که شما در زیر گفتین

اگر منظورتون از اینکه فیلدش نمی آد اینه که در صفحه پروفایل کاربر فیلد نداره که نباید داشته باشه ولی اگر می خواهید فیلد براش اضافه کنید از کدی شبیه کد زیر در فایل functions.php استفاده کنید


function custom_user_contact_methods( $user_contact_method ) {
$user_contact_method['rating'] = __( 'User Rating Text', 'kubrick' );

return $user_contact_method; ;
}
// Hook into the 'user_contactmethods' filter
add_filter( 'user_contactmethods', 'custom_user_contact_methods' );

اما هیچ تغییری نمیکنه فیلد ساخته شده اما متغیر درونش ریخته نمیشه.

اگه میشه کد رو طوری تغییر بدین که مقدار متغیر رو دریافت کنه ممنون میشم.

تمام کد ها هم توی پست بالا موجوده.

لینک به ارسال

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

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

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

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

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

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

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

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

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