hosein71 75 ارسال شده در مرداد 94 گزارش بازنشر ارسال شده در مرداد 94 سلام.برای نمایش مطالب نیاز به یک کوئری خاص داریم. فرض کنید به هر پست امتیاز داده میشه، ما میخوایم نرخ رشد امتیاز پست ها رو محاسبه کنیم. مثلا اگه یه پست در طول 1 هفته 100 امتیاز داشت، از پستی که در طول 2 ماه 150 امتیاز داشت بالاتر قرار بگیره.حالا با زیاد شدن تعداد امتیازها، ما نیاز داریم که این اطلاعات بر اساس ساعت یا حتی دقیقه (و نه هفته) محاسبه بشه. سوالم اینجاست که چجوری پست ها رو بر اساس مقادیر محاسبه شده sort کنم؟ذخیره کردن لحظه ای این نرخ رشد ها توی دیتابیس و خوندن اون در هر بار که صفحه بارگذاری میشه کار درستیه؟ لینک به ارسال
علی زینلی 2114 ارسال شده در مرداد 94 گزارش بازنشر ارسال شده در مرداد 94 سلام٬ کار مشکلی هست.شما اول باید تعداد روز گذشته از ارسال یه پست رو بگیرین (مثلا ۷ روز)بعدش برید امتیاز رو بگیرینحالا هر امتیاز رو تقسیم بر تعداد روز گذشته کنینبراساس عدد دست اومده پست ها رو نمایش بدیداینجوری یه پست با امتیاز ۵ بعد ۵ روز از یه پست با امتیاز ۵ در ۷ روز جلو تر نمایش داده میشهموفق باشید 2 لینک به ارسال
hosein71 75 ارسال شده در مرداد 94 مالک گزارش بازنشر ارسال شده در مرداد 94 علی جان این ها رو بلد بودم و انجام دادم ، مشکلم اینجاست که چجوری بر اساس عدد به دست اومده پست ها رو مرتب کنم؟(این عدد لحظه ای محاسبه میشه و خب نمیشه هر سری صفحه رو لود میکنن اون رو یبار تو دیتابیس به عنوان متا ذخیره کنیم و بعد از روش بخونیم.)اگه راهی به ذهنتون رسید بگید لطفا.تشکر لینک به ارسال
علی زینلی 2114 ارسال شده در مرداد 94 گزارش بازنشر ارسال شده در مرداد 94 کسی از اینکه متا رو توی دیتابیس ذخیره کنین صحبت نکردم.شما همواره روز ارسال پست رو توی دیتابیس دارین ، (این رو از دیتابیس میگیرین) و همینطور امتیازی که به پست هم دادن همیشه توی دیتابیس دارین (اینم از دیتابیس میگیرین) ، حالا با 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 لینک به ارسال
hosein71 75 ارسال شده در مرداد 94 مالک گزارش بازنشر ارسال شده در مرداد 94 مرسی، یه چیزی رو من یادم رفت بگم، اینه که میخوام از pre_get_posts استفاده کنم. فرض کنید یه کوئری نوشته شده، حالا بر اسا یه مقداری که از url میگیره، (مثلا &sort=avarage) بخوایم بدون نوشتن کوئری جدید، همون رو بگیم بر اساس این میانگین ها sort کنه. البته خودم یه راهی پیدا کردم امروز. این بود که اول آیدی پست ها رو بگیرم و مرتب کنم، بعد بدم به pre get posts. کار میکنه، اگه راه اصولی تر و بهتری پیدا کردید بگید. لینک به ارسال
علی زینلی 2114 ارسال شده در مرداد 94 گزارش بازنشر ارسال شده در مرداد 94 مرسی، یه چیزی رو من یادم رفت بگم، اینه که میخوام از pre_get_posts استفاده کنم. فرض کنید یه کوئری نوشته شده، حالا بر اسا یه مقداری که از url میگیره، (مثلا &sort=avarage) بخوایم بدون نوشتن کوئری جدید، همون رو بگیم بر اساس این میانگین ها sort کنه. البته خودم یه راهی پیدا کردم امروز. این بود که اول آیدی پست ها رو بگیرم و مرتب کنم، بعد بدم به pre get posts. کار میکنه، اگه راه اصولی تر و بهتری پیدا کردید بگید. نه من راهی به ذهنم نمیرسه جز اونی که خودم گفتم... 1 لینک به ارسال
hosein71 75 ارسال شده در مرداد 94 مالک گزارش بازنشر ارسال شده در مرداد 94 ممنون بابت وقتی که گذاشتید و کد. اگه مطمئن شدم کد خودم درسته اینجا میذارمش لینک به ارسال
پست های پیشنهاد شده
لطفا برای ارسال دیدگاه وارد شوید
شما بعد از اینکه وارد حساب کاربری خود شدید می توانید دیدگاهی ارسال کنید
ورود به حساب کاربری