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 ممنون بابت وقتی که گذاشتید و کد. اگه مطمئن شدم کد خودم درسته اینجا میذارمش نقل قول لینک به ارسال
پست های پیشنهاد شده
به گفتگو بپیوندید
هم اکنون می توانید مطلب خود را ارسال نمایید و بعداً ثبت نام کنید. اگر حساب کاربری دارید، برای ارسال با حساب کاربری خود اکنون وارد شوید .