ویژگی تصویر

تابع get_posts در وردپرس

  /  وردپرس   /  تابع get_posts در وردپرس
بنر تبلیغاتی الف
wp - wordpress - وردپرس

تابع 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 ندارید و می‌خواهید فقط داده‌ها را به‌صورت آرایه‌ای از اشیاء دریافت کنید. رعایت اصول بهینه‌سازی مانند محدود کردن تعداد پست‌ها و استفاده از فیلترهای مناسب، کارایی سایت شما را به‌طور محسوسی افزایش می‌دهد.

آیا این مطلب برای شما مفید بود ؟

خیر
بله
موضوعات شما در انجمن: