hosein71

کوئری بر اساس اطلاعات لحظه ای

7 پست در این موضوع قرار دارد

سلام.

برای نمایش مطالب نیاز به یک کوئری خاص داریم.

فرض کنید به هر پست امتیاز داده میشه، ما میخوایم نرخ رشد امتیاز پست ها رو محاسبه کنیم. مثلا اگه یه پست در طول 1 هفته 100 امتیاز داشت، از پستی که در طول 2 ماه 150 امتیاز داشت بالاتر قرار بگیره.

حالا با زیاد شدن تعداد امتیازها، ما نیاز داریم که این اطلاعات بر اساس ساعت یا حتی دقیقه (و نه هفته) محاسبه بشه.

سوالم اینجاست که چجوری پست ها رو بر اساس مقادیر محاسبه شده sort کنم؟

ذخیره کردن لحظه ای این نرخ رشد ها توی دیتابیس و خوندن اون در هر بار که صفحه بارگذاری میشه کار درستیه؟

0

به اشتراک گذاری این پست


لینک به پست

سلام٬ کار مشکلی هست.

شما اول باید تعداد روز گذشته از ارسال یه پست رو بگیرین (مثلا ۷ روز)

بعدش برید امتیاز رو بگیرین

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

براساس عدد دست اومده پست ها رو نمایش بدید

اینجوری یه پست با امتیاز ۵ بعد ۵ روز از یه پست با امتیاز ۵ در ۷ روز جلو تر نمایش داده میشه

موفق باشید

2

به اشتراک گذاری این پست


لینک به پست

علی جان این ها رو بلد بودم و انجام دادم ، مشکلم اینجاست که چجوری بر اساس عدد به دست اومده پست ها رو مرتب کنم؟

(این عدد لحظه ای محاسبه میشه و خب نمیشه هر سری صفحه رو لود میکنن اون رو یبار تو دیتابیس به عنوان متا ذخیره کنیم و بعد از روش بخونیم.)

اگه راهی به ذهنتون رسید بگید لطفا.

تشکر

0

به اشتراک گذاری این پست


لینک به پست

کسی از اینکه متا رو توی دیتابیس ذخیره کنین صحبت نکردم.

شما همواره روز ارسال پست رو توی دیتابیس دارین ، (این رو از دیتابیس میگیرین) و همینطور امتیازی که به پست هم دادن همیشه توی دیتابیس دارین (اینم از دیتابیس میگیرین) ، حالا با PHP این 2 تا عدد رو تقسیم بر هم میکنین (توجّه: نیازی به ذخیره اون در هیچ جا نیست! کاملاً با PHP روی هوا انجام میشه).

خب حالا مثلاً اگر پستی امتیازش 5 باشه و 5 روز گذشته باشه از گذاشتنش 5/5=1 ، درست؟

اگر یه پست دیگه همین امتیاز 5 رو داشته باشه و 7 روز گذشته باشه از گذاشتنش 5/7= 0.74... ، اینم درست؟

خب حالا باید اینا رو با وسیله تابع وردپرس get_posts بگیریشون و بکنیشون توی array ، حالا باید با foreach چاپشون کنین مثل زیر:


<?php global $post; // required
$args = array('category' => -9); // exclude category 9
$custom_posts = get_posts($args);
foreach($custom_posts as $post) : setup_postdata($post);
...
endforeach;
?>

منتهی قبل از اینکه به وسیله کد بالا چاپش کنین باید از طریق اون مقدار امتیاز بر اساس روز گذشته sortشون کنین

مثل:

http://php.net/manual/en/function.sort.php

باید PHP رو یاد داشته باشین تقریباً تا بتونین اینکار رو انجام بدین.

2

به اشتراک گذاری این پست


لینک به پست

مرسی، یه چیزی رو من یادم رفت بگم، اینه که میخوام از pre_get_posts استفاده کنم. فرض کنید یه کوئری نوشته شده، حالا بر اسا یه مقداری که از url میگیره، (مثلا &sort=avarage) بخوایم بدون نوشتن کوئری جدید، همون رو بگیم بر اساس این میانگین ها sort کنه. البته خودم یه راهی پیدا کردم امروز. این بود که اول آیدی پست ها رو بگیرم و مرتب کنم، بعد بدم به pre get posts. کار میکنه، اگه راه اصولی تر و بهتری پیدا کردید بگید.

0

به اشتراک گذاری این پست


لینک به پست
مرسی، یه چیزی رو من یادم رفت بگم، اینه که میخوام از pre_get_posts استفاده کنم. فرض کنید یه کوئری نوشته شده، حالا بر اسا یه مقداری که از url میگیره، (مثلا &sort=avarage) بخوایم بدون نوشتن کوئری جدید، همون رو بگیم بر اساس این میانگین ها sort کنه. البته خودم یه راهی پیدا کردم امروز. این بود که اول آیدی پست ها رو بگیرم و مرتب کنم، بعد بدم به pre get posts. کار میکنه، اگه راه اصولی تر و بهتری پیدا کردید بگید.

نه من راهی به ذهنم نمیرسه جز اونی که خودم گفتم...

1

به اشتراک گذاری این پست


لینک به پست

ممنون بابت وقتی که گذاشتید و کد. اگه مطمئن شدم کد خودم درسته اینجا میذارمش

0

به اشتراک گذاری این پست


لینک به پست

برای ارسال نظر یک حساب کاربری ایجاد کنید یا وارد حساب خود شوید

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

ایجاد یک حساب کاربری

برای حساب کاربری جدید در انجمن ما ثبت نام کنید. عضویت خیلی ساده است !


ثبت نام یک حساب کاربری جدید

ورود به حساب کاربری

دارای حساب کاربری هستید؟ از اینجا وارد شوید


ورود به حساب کاربری

  • مطالب مشابه

    • توسط unid_user
      سلام و درود
      دوستان گرامی ، به یه کوئری برای نمایش اخرین محصولات ووکامرس دارم. لطفا راهنمایی کنید.
      با تشکر و سپاس
    • توسط unid_user
      سلام و درود
      دوستان گرامی، یه کوئری برای نمایش دسته ای خاص از محصولات ووکامرس رو میخواستم.
      با تشکر و سپاس
    • توسط mehdi...
      سلام
      تو پی اچ پی مای ادمین کوئری هارا مانیتور میکنم و میخوام لاین اون کوئری را پیدا کنم تو قالب چطوری میتونم
      از ابزار هایی مثل کوئری مانیتور استفاده کردم ولی یک سری کوئری هارا نمیدونم تو چه صفحه ای صدا زده میشه اون کوئری هارا چیکار کنم ؟
    • توسط unid_user
      سلام دوستان
      برای نمایش پست ها در برگه خانه با WP_Query به مشکل خوردم و نمیدونم مشکلش کجاست.
      من یه برگه ساختم با اسم page-home.php و داخلش کد زیر را وارد کردم:
      <?php get_header(); ?> <?php $lastBlog = new WP_Query('type=post&posts_per_page=1'); if( $lastBlog->have_posts() ): while( $lastBlog->have_posts() ): $lastBlog->the_post(); ?> <?php get_template_part('content',get_post_format()); ?> <?php endwhile; endif; wp_reset_postdata(); ?> <?php if (have_posts()): while (have_posts()): the_post(); echo "فرمت این پست هست: " . get_post_format(); ?> <?php get_template_part('content',get_post_format()); ?> <?php endwhile; endif; ?> <?php get_sidebar(); ?> <?php get_footer(); ?> لطفا راهنمایی کنید. ممنون
    • توسط mehdi...
      با سلام
      یک کوئری دیفالت تو صفحه انجام میشه میخواستم بدونم چطوری میشه غیر فعالش کرد
      که ۲۰ مطلب اخر را دریافت میکنه
      تو کد های قالب نیست این کوئری و هسته وردپرس این کوئری را ران میکنه فکر میکنم بخاطر بعضی سایت های بلاگ که در صفحه اصلی اخرین مطالب را نمایش میدند و صفحه بندی دارند این کوئری اتو ران میشه میخواستم بدونم کجاست و چطوری میشه غیرفعالش کرد
      با تشکر