بهترین شیوه های WP_Query را مرور کنید.
یکی از ابزارهای مهم در جعبه ابزار وردپرس است WP_Query
. این کلاس توسعه دهندگان را قادر می سازد تا پست ها یا صفحات را از پایگاه داده وردپرس بر اساس معیارهای خاص بازیابی کنند.
با استفاده از WP_Query
توسعهدهندگان میتوانند قالبهای سفارشی ایجاد کنند، پستها را به ترتیب خاصی نمایش دهند، یا حتی درخواستهای سفارشی برای استفاده در ویجتها یا افزونهها ایجاد کنند.
چیست WP_Query
، و چرا باید از آن استفاده کنید؟
«WP_Query» کلاسی در وردپرس برای بازیابی پست ها یا صفحات از پایگاه داده بر اساس معیارهای خاص است. این یک ابزار قدرتمند است که توسعه دهندگان را قادر می سازد:
- حلقه وردپرس را سفارشی کنید و نمایش پست ها بر اساس ویژگی های انتخاب شده.
- پرس و جوهای سفارشی ایجاد کنید برای نمایش پست ها بر اساس شرایط پیچیده که در غیر این صورت با استفاده از پرس و جوهای استاندارد وردپرس قابل دستیابی نیست.
- نمایش پست های مرتبط بر اساس دسته ها یا برچسب های رایج، که باعث افزایش تعامل در وب سایت شما می شود.
- ویجت های سفارشی ایجاد کنید که پست ها را بر اساس نیاز شما نمایش می دهد.
به طور کلی، WP_Query
توسعه دهندگان را قادر می سازد تا پست ها را به شیوه ای بسیار سفارشی نمایش دهند و آن را به ابزاری ضروری برای سایت های وردپرس تبدیل می کند.
مشکلات رایج با WP_Query
با اينكه WP_Query
یک ابزار قدرتمند برای سفارشی کردن بازیابی پست است، مسائل بالقوه ای وجود دارد که توسعه دهندگان باید قبل از پیاده سازی در ذهن داشته باشند.
- کارایی: استفاده نادرست،
WP_Query
می تواند بر عملکرد وب سایت تأثیر منفی بگذارد. به عنوان مثال، بازیابی تعداد زیادی پست با پرس و جوهای پیچیده می تواند زمان پاسخگویی را کاهش دهد.
- تضادهای پرس و جو:
WP_Query
می تواند با سایر پرس و جوهای وب سایت شما تضاد داشته باشد، به خصوص اگر از افزونه ها یا تم هایی استفاده می کنید که از پرس و جوهای سفارشی نیز استفاده می کنند.
- امنیت:
WP_Query
می تواند در برخی موارد خطرات امنیتی ایجاد کند. به عنوان مثال، اگر به کاربران اجازه دهید تا پست های وب سایت شما را با استفاده از جستجو جستجو کنندWP_Query
، ورودی کاربر را برای جلوگیری از حملات تزریق SQL ضد عفونی کنید.
- سازگاری:
WP_Query
بخشی از هسته وردپرس است. بهروزرسانیها میتوانند باعث مشکلات سازگاری با افزونهها یا تمهایی شوند که به درخواست متکی هستند.
برای جلوگیری از این مشکلات، بهترین روش ها را هنگام استفاده دنبال کنید WP_Query
از جمله بهینه سازی پرس و جوها برای عملکرد، پاکسازی ورودی کاربر، و نظارت بر مشکلات سازگاری هنگام به روز رسانی وردپرس، افزونه ها و تم ها.
نحوه بهبود WP_Query
کارایی
بهتر کردن WP_Query
عملکرد با بهینه سازی پرس و جوهای شما و کاهش بار سرور. در زیر برخی از بهترین شیوههای متداول وجود دارد که میتوانید از آنها برای بهبود وضعیت خود استفاده کنید WP_Query
کارایی.
1. fields
پارامتر
با استفاده از fields
پارامتری برای محدود کردن اطلاعات بازیابی شده از پایگاه داده می تواند به بهبود عملکرد شما کمک کند WP_Query
. به عنوان مثال، اگر فقط به شناسه پست نیاز دارید، استفاده کنید fields
=> ids
.
توجه: این پارامتر محدود به فیلدهای ID و ID=>والد است. برای مثالی از نحوه استفاده از این پارامتر، مهندس VIP وردپرس خود، Derrick Tennant، بینشهایی را در مورد حافظه پنهان در وردپرس به اشتراک میگذارد.
2. no_found_rows
پارامتر
در حین صفحهبندی، اگر نیازی به دانستن تعداد کل پستهایی که با درخواست شما مطابقت دارند را نداشته باشید، این پارامتر مفید است. no_found_rows
=> درست است. با این کار از SQL_CALC_FOUND_ROWS
، که می تواند تأثیر قابل توجهی بر عملکرد پرس و جو داشته باشد.
3. update_post_meta_cache
و update_post_term_cache
اگر بهروزرسانیهای حافظه پنهان پست و متا را در جستجوی خود نیاز ندارید، با تنظیم، غیرفعال کنید update_post_meta_cache
=> false
و update_post_term_cache
=> false
. این می تواند تعداد پرس و جوهای اضافی انجام شده را کاهش دهد.
4. cache_results
پارامتر
اگر از کش کردن اشیاء استفاده می کنید (مثلاً Memcached یا Redis)، می توانید کش داخلی وردپرس را با تنظیم غیرفعال کنید. cache_results
=> نادرست با این حال، اگر مکانیزمهای کش خارجی ندارید، توصیه نمیشود.
5. post__in
و post__not_in
استفاده از این پارامترها می تواند به فیلتر کردن نتایج بر اساس شناسه های پست خاص کمک کند. با این حال، از استفاده بیش از حد از آنها یا با تعداد زیادی شناسه خودداری کنید، زیرا می تواند منجر به مشکلات عملکرد شود.
این پارامترها فقط باید برای سایت های کوچکتر استفاده شوند. در مقیاس سازمانی، ما به هیچ وجه استفاده از «post__not_in» را توصیه نمیکنیم.
6. post_type
و post_status
نوع پست و وضعیت پست خود را مشخص کنید تا از بازیابی اطلاعات غیر ضروری جلوگیری کنید. به عنوان مثال، اگر فقط به پست های منتشر شده نیاز دارید، تنظیم کنید post_status
=> publish
.
تضمین می کند post_status
تنظیم شده است به کاربران (وارد شده یا خارج شده) اجازه می دهد تا از همان پرس و جوهای (کش شده) استفاده کنند. تنظیم کردن post_status
همچنین نرخ ضربه را افزایش می دهد.
7. date_query
استفاده کنید date_query
پارامتر برای فیلتر کردن پست ها بر اساس محدوده تاریخ به جای استفاده از فیلدهای متا سفارشی برای ذخیره تاریخ. این کارآمدتر است زیرا وردپرس برای کار با پرس و جوهای مربوط به تاریخ بهینه شده است.
8. صفحه بندی و posts_per_page
محدود کردن تعداد نتایج در هر صفحه با posts_per_page
پارامتر. مراقب باشید که آن را خیلی بالا قرار ندهید (مثلاً `-1`)، زیرا می تواند باعث مشکلات عملکرد قابل توجهی شود.
9. از API ذخیره شی دائمی استفاده کنید:
نتایج پرس و جوهای خود را با استفاده از API ذخیره سازی اشیاء پایدار ذخیره کنید که با جدا کردن کش ها به گروه ها، جزئیات را ارائه می دهد. بدون پلاگین کشویی ذخیره شی، پایگاه داده شما ممکن است مملو از داده های حافظه پنهان گذرا باشد، که اگر وارد کردن SQL انجام دهید، در نهایت به تولید باز می گردد.
توجه داشته باشید: اگر از راهاندازی برنامهنویسی «محلی» سفارشی استفاده میکنید، مطمئن شوید که برای جلوگیری از مشکلات، کش کردن شی را تنظیم کردهاید.
10. از pre_get_posts
فیلتر کنید
پرس و جو اصلی را با استفاده از pre_get_posts
برای جلوگیری از ایجاد پرس و جوهای اضافی فیلتر کنید. این می تواند یک رویکرد کارآمدتر در مقایسه با استفاده باشد WP_Query
مستقیما در قالب های شما
11. بارگذاری در جستجوی سازمانی
بارگیری در جستجوی سازمانی یکی دیگر از راه های سریع و آسان برای افزایش سرعت کند است WP_Query
. وقتی که VIP_ENABLE_VIP_SEARCH_QUERY_INTEGRATION
ثابت تنظیم شده است true
، تمام عبارات جستجوی استاندارد جلویی با s
استدلال (مثلا /?s=
) به طور خودکار به Elasticsearch ارسال می شوند.
توجه داشته باشید: همه پرس و جوها نباید در Enterprise Search بارگذاری شوند—پرس و جوهایی که شواهدی از مشکلات عملکرد را نشان نمی دهند، می توانند توسط MySQL مدیریت شوند.
مثال از WP_Query
با پارامترهای مشترک
function my_main_query_filter( $query ) {
// always check these in a pre_get_posts filter or you could cause unwanted changes to other queries
if ( is_admin() || ! $query->is_main_query() ) {
return;
}
// limit category queries to the main category, do not include children
if ( is_category() ) {
$query->set( 'include_children', false );
}
// default, when logged in, the post_status list might include 'private'
$query->set( 'post_status', 'publish' );
// when not paginating (e.g., a widget displaying just 5 posts)
$query->set( 'no_found_rows', true );
// "sticky posts" add complexity
$query->set( 'ignore_sticky_posts', true );
// not typically needed when serving archive pages
$query->set( 'update_meta_cache', false );
}
add_action( 'pre_get_posts', 'my_main_query_filter' );
بهبودها یک اندازه نیستند
به یاد داشته باشید که قبل از اجرای هر یک از این توصیهها، نیازهای خاص خود را ارزیابی کنید، زیرا ممکن است در هر موقعیتی کاربرد نداشته باشند. تست و نظارت بر عملکرد سایت شما قبل و بعد از ایجاد تغییرات برای اطمینان از نتایج بهینه بسیار مهم است.
سوالی دارید؟
سایت محتوا مارکتینگ
برای دیدن مطالب آموزشی بیشتر در زمینه سخت افزار و نرم افزار اینجا کلیک کنید!