توابع پرس و جو WP – از چه چیزی استفاده کنید و چه زمانی

توابع و کلاسهای اصلی وردپرس به طور کلی از نظر عملکرد و امنیت بسیار عالی هستند.
وقتی نوبت به بازیابی داده ها از پایگاه داده می رسد ، WP_Query
کلاس و روشهای آن ، شیوه ای ایمن و کارآمد برای انجام آن را برای ما فراهم می کند و از نمایش داده های پیچیده SQL جلوگیری می کند. برخی از بسته های اضافی از WP_Query
، مانند query_posts()
وت get_posts()
بشر
query_posts
کدکس وردپرس صریحاً می گوید “رویکرد بیش از حد شبیه سازی آن برای اصلاح پرس و جو اصلی می تواند مشکل ساز باشد و باید اجتناب شود هر کجا ممکن است“
این بسته بندی پرس و جو ناکارآمد است (مجدداً نمایش داده شد SQL) و در برخی شرایط به ویژه در هنگام برخورد با صفحه بندی پست ها شکست خواهد خورد. این یک شیء جدید wp_query را فوراً می کند و آن را به global wp_query
، شکستن پرس و جو اصلی که بسیاری از افزونه ها ، مضامین و اسکریپت های سفارشی به آن اعتماد دارند. برای نمایش داده های ثانویه (حلقه های سفارشی) WP_QUERY خود را فوری کنید.
استفاده کردن new WP_Query
یا get_posts()
که تقریباً قابل تعویض هستند (دوم بسته بندی نازک برای سابق است). اگر می خواهید پرس و جو اصلی را تغییر دهید ، از آن استفاده کنید pre_get_posts
قلاب $query->is_main_query()
بررسی کنید pre_get_posts
فیلتر برای تغییر هر پرس و جو است و بیشتر از آن برای تغییر “پرس و جو اصلی” استفاده می شود. این تراک در مورد استهلاک است query_posts
بشر
بنابراین:
شما باید هرگز استفاده کردن
query_posts()
بشر
get_posts
این در واقع یک بسته بندی برای یک نمونه جداگانه از a است WP_Query
شیء. این یک “حلقه” نیست ، بلکه به سادگی مجموعه ای از اشیاء پست را برمی گرداند.
این همان آرگومان های WP_QUERY را می پذیرد ، متغیرهای جهانی را تغییر نمی دهد و از هر جایی برای استفاده بی خطر است. عبور می کند 'no_found_rows' => true
به طور پیش فرض ، بنابراین فقط برای پرس و جوهای غیر صفحه ای استفاده می شود. این پست های چسبنده را نادیده می گیرد ، فقط برای نمایش ویژگی $ post نیاز به یک حلقه پیشانی دارد و به setup_postdata( $post )
برای تهیه برچسب های الگو. WP_Query
از حلقه های حلقه استفاده می شود و برچسب های الگو به طور پیش فرض در دسترس هستند.
استفاده کردن
get_posts()
برای برخی از داده های سریع ، غیر صفحه بندی ، داده می شود.
WP_QUERY
WP_Query
کلاس پشت هر دو کارکرد فوق است. قدرت WP_Query
از امکان ایجاد و کار با نمونه خود در مورد آن ناشی می شود. این یک ابزار کلی با هدف کلی است ، شبیه به نوشتن مستقیم MySQL ، برای یک اسکریپت پرس و جو دقیق سفارشی.
کمی پیچیده تر با محدودیت های کمتری ، بنابراین در حالی که از استفاده در هر نقطه ایمن تر است ، قدرتمندتر می شود.
استفاده از a
new WP_Query
برای یک اسکریپت پرس و جو عمیق و انعطاف پذیر.
تنظیم مجدد/پاکسازی
- استفاده کردن
wp_reset_query()
اگر استفاده کرده ایدquery_posts()
یا جهانی تغییر یافته$wp_query
به طور مستقیم – امیدوارم که هرگز نیازی به آن نخواهید داشت. - استفاده کردن
wp_reset_postdata()
اگر استفاده کرده ایدthe_post()
یاsetup_postdata()
برای بازگرداندن وضعیت اولیه پست جهانی $.
عمل
همه نمایش داده ها سرانجام بسته بندی می شوند WP_Query
، و در حالی که برخی از آنها بهتر از دیگری هستند (هرگز استفاده نکنید query_posts
) ، تفاوت عملکرد get_posts
در مقابل WP_Query
ناچیز هستند در WP_Query
سریعتر از get_posts
با یک حاشیه بسیار کوچک.
با این حال پارامترهای ارائه شده توسط WP_Query
کلاس به طور خاص می تواند نمایش داده های SQL را بهینه کند ، زمان اجرای و مصرف منابع را کاهش دهد. (Ref. 1 | 2)
- وقتی نیازی به صفحه بندی نداریم ، باید تنظیم کنیم
no_found_rows
بهtrue
، ساخت پرس و جو به طرز چشمگیری سریعتر اجرا می شود. - هنگامی که زمینه های خاص لازم نیست ، قسمت های برگشتی را به IDS محدود کنید:
'fields' => 'ids'