تابع get_posts در وردپرس
تابع get_posts() یکی از توابع مهم و پرکاربرد در وردپرس است که برای دریافت مجموعهای از نوشتهها (پستها) بر اساس معیارهای مشخص مورد استفاده قرار میگیرد. این تابع انعطافپذیری بالایی دارد و توسعهدهندگان میتوانند از آن برای استخراج دادهها از نوع پستهای مختلف (مانند پست، صفحه، محصولات ووکامرس و…) استفاده کنند.
کاربرد اصلی تابع get_posts()
هدف این تابع، دریافت لیستی از پستها بدون نیاز به ایجاد یک Query پیچیده با WP_Query است. در واقع، get_posts() نسخه سادهتر و بهینهتری از WP_Query محسوب میشود که خروجی آن یک آرایه از اشیاء پستهاست.
ساختار کلی تابع get_posts()
get_posts( array $args = null ): WP_Post[]این تابع آرایهای از اشیاء نوع WP_Post بازمیگرداند که هر شیء نمایانگر یک پست در وردپرس است. شما میتوانید از ویژگیهای هر شیء مانند post_title، post_content یا post_date برای نمایش اطلاعات استفاده کنید.
پارامترهای مهم در get_posts()
تابع get_posts() یک آرایه از پارامترها را به عنوان ورودی دریافت میکند. در جدول زیر برخی از پرکاربردترین پارامترها معرفی شدهاند:
| پارامتر | توضیح | مقدار پیشفرض |
|---|---|---|
numberposts | تعداد پستهایی که باید بازیابی شود. | 5 |
category | شناسه (ID) دستهبندی مورد نظر برای فیلتر پستها. | 0 |
orderby | نحوه مرتبسازی پستها (مثلاً date، title، rand و …). | date |
order | ترتیب مرتبسازی، میتواند ASC (صعودی) یا DESC (نزولی) باشد. | DESC |
post_type | نوع پستها (post، page، product و غیره). | post |
post_status | وضعیت پستها (publish، draft، pending و …). | publish |
meta_query | شرطهای جستجو بر اساس متادیتاها. | — |
نمونه کد ساده برای استفاده از get_posts()
$args = array(
'numberposts' => 5,
'orderby' => 'date',
'order' => 'DESC',
'post_type' => 'post',
'post_status' => 'publish',
);
$recent_posts = get_posts( $args );
foreach ( $recent_posts as $post ) {
setup_postdata( $post );
echo '<h4>' . get_the_title( $post ) . '</h4>';
echo '<p>' . get_the_excerpt( $post ) . '</p>';
}
wp_reset_postdata();
در مثال بالا، تابع get_posts() پنج پست آخر منتشرشده را دریافت کرده و با استفاده از حلقه foreach عنوان و خلاصه هر پست را نمایش میدهد. در انتها، wp_reset_postdata() برای بازگرداندن کوئری به حالت اصلی استفاده میشود.
نکته مهم درباره wp_reset_postdata()
تابع setup_postdata() باعث میشود که توابع وردپرس مانند the_title() یا the_content() بتوانند دادههای هر پست را بهدرستی شناسایی کنند. بعد از اتمام حلقه، باید از wp_reset_postdata() استفاده کنید تا وضعیت حلقه اصلی وردپرس برگردد و اختلالی در سایر بخشهای صفحه ایجاد نشود.
فیلتر کردن پستها بر اساس دستهبندی
$args = array(
'numberposts' => 10,
'category' => 3
);
$posts = get_posts( $args );
در این نمونه، فقط پستهایی که در دستهبندی با شناسه ۳ قرار دارند بازیابی میشوند.
دریافت پستها بر اساس نوع پست سفارشی (Custom Post Type)
$args = array(
'post_type' => 'product',
'numberposts' => 8,
'orderby' => 'title',
'order' => 'ASC',
);
$products = get_posts( $args );
در این مثال، پستهایی از نوع product (مثلاً محصولات ووکامرس) بازیابی میشوند. شما میتوانید از این روش برای نمایش فهرستی از محصولات یا نمونهکارها در قالب خود استفاده کنید.
فیلتر کردن با meta_query
با استفاده از پارامتر meta_query میتوانید پستها را بر اساس مقدار فیلدهای سفارشی (Custom Fields) فیلتر کنید.
$args = array(
'post_type' => 'post',
'meta_query' => array(
array(
'key' => 'views',
'value' => 100,
'compare' => '>',
'type' => 'NUMERIC'
),
),
);
$popular_posts = get_posts( $args );
در این مثال، فقط پستهایی نمایش داده میشوند که مقدار فیلد سفارشی views آنها بیشتر از ۱۰۰ است. این روش برای ایجاد لیست پربازدیدترین مطالب بسیار مفید است.
تفاوت get_posts() با WP_Query
| ویژگی | get_posts() | WP_Query |
|---|---|---|
| خروجی | آرایهای از اشیاء WP_Post | شیء از کلاس WP_Query |
| کارایی | سبکتر و سریعتر | قویتر و قابل تنظیمتر |
| قابلیت حلقه وردپرس | نیاز به setup_postdata() | به صورت مستقیم کار میکند |
| موارد استفاده | لیست ساده از پستها | کوئریهای پیچیده یا سفارشی |
بهترین شیوههای استفاده از get_posts()
- در زمانی که نیاز به دریافت تعداد محدودی پست دارید از آن استفاده کنید.
- برای نمایش لیست ساده از پستها، بهجای
WP_Queryاستفاده از این تابع سبکتر است. - در صورت استفاده از
setup_postdata()حتماً بعد از حلقه ازwp_reset_postdata()استفاده کنید. - برای بهینهسازی، از
fields => 'ids'استفاده کنید اگر فقط شناسهها نیاز هستند.
نمونه بهینه برای دریافت فقط شناسه پستها
$args = array(
'post_type' => 'post',
'numberposts' => 5,
'fields' => 'ids'
);
$post_ids = get_posts( $args );
در این حالت، فقط شناسه (ID) پستها بازگردانده میشود و از بارگیری کامل دادهها جلوگیری میگردد؛ که برای افزایش سرعت در Queryهای سنگین مفید است.
خطاهای رایج در استفاده از get_posts()
- فراموش کردن
wp_reset_postdata()که ممکن است باعث اختلال در حلقه اصلی شود. - استفاده از
query_posts()بهجایget_posts()در قالبها، که کارایی پایینتری دارد. - عدم استفاده از پارامتر
post_statusکه ممکن است پستهای پیشنویس را نیز نمایش دهد.
جمعبندی
تابع get_posts() ابزاری ساده، سریع و کاربردی برای دریافت لیستی از پستها در وردپرس است. این تابع زمانی بهترین گزینه است که نیازی به ویژگیهای پیچیده WP_Query ندارید و میخواهید فقط دادهها را بهصورت آرایهای از اشیاء دریافت کنید. رعایت اصول بهینهسازی مانند محدود کردن تعداد پستها و استفاده از فیلترهای مناسب، کارایی سایت شما را بهطور محسوسی افزایش میدهد.
آیا این مطلب برای شما مفید بود ؟




