ویژگی تصویر

آموزش تابع get_post_status() در وردپرس و کاربرد آن

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

تابع get_post_status() یکی از توابع پرکاربرد وردپرس برای به‌دست آوردن وضعیت (status) یک پست یا custom post type است. این تابع براحتی وضعیت فعلی یک نوشته مانند publish، draft، pending و غیره را برمی‌گرداند و به شما امکان می‌دهد رفتار قالب یا منطق پلاگین را بر اساس این وضعیت کنترل کنید.

ساختار و سینتکس

سینتکس پایه‌ای تابع به شکل زیر است:

get_post_status( int|WP_Post|null $post = null ) : string|false

اگر پارامتر $post ارسال نشود، تابع تلاش می‌کند وضعیت پست فعلی در لوپ را بازگرداند. در صورت عدم وجود پست معتبر، مقدار false برمی‌گردد.

مقدار بازگشتی و رفتارها

  • برگشت یک رشته: مانند “publish” یا “draft”.
  • برگشت false: در صورت نامعتبر بودن شناسه/آبجکت پست یا نبودن پست فعلی.
  • پشتیبانی از وضعیت‌های سفارشی: در صورتی که وضعیت دلخواه ثبت شده باشد (register_post_status)، مقدار آن نیز ممکن است بازگردانده شود.

وضعیت‌های رایج پست

وضعیتتوضیح
publishپست عمومی و منتشر شده
draftپست در حالت پیش‌نویس
pendingمنتظر بررسی (برای نقش‌های با قابلیت‌های خاص)
futureزمان‌بندی‌شده برای انتشار در آینده
privateقابل مشاهده فقط برای کاربران با سطح دسترسی مناسب
trashدر سطل زباله

مثال‌های عملی

1) نمایش یا مخفی کردن بخش در قالب بر اساس وضعیت

<?php
$status = get_post_status( get_the_ID() );
if ( 'publish' === $status ) {
    echo '<p>این مطلب منتشر شده است.</p>';
} else {
    echo '<p>این مطلب هنوز منتشر نشده.</p>';
}
?>

در این مثال، ابتدا وضعیت پست جاری گرفته می‌شود و با مقایسه رشته‌ای (===) بررسی می‌کنیم آیا منتشر شده است یا خیر. استفاده از مقایسه سخت‌گیرانه پیشنهاد می‌شود تا از خطاهای نوع داده جلوگیری شود.

2) استفاده در داخل لوپ وردپرس

<?php if ( have_posts() ) : while ( have_posts() ) : the_post();
    $status = get_post_status();
    if ( 'future' === $status ) {
        echo '<div class="scheduled">این مطلب زمان‌بندی شده است.</div>';
    }
endwhile; endif; ?>

اگر پارامتر به تابع ارسال نشود و تابع داخل لوپ قرار داشته باشد، وضعیت همان پست جاری را بازمی‌گرداند که برای قالب‌نویسی مفید است.

3) به‌روزرسانی وضعیت و بررسی با hook

<?php
add_action( 'transition_post_status', 'my_status_change_handler', 10, 3 );
function my_status_change_handler( $new_status, $old_status, $post ) {
    if ( 'draft' === $old_status && 'publish' === $new_status ) {
        // کاری که بعد از انتشار انجام می‌دهید
    }
}
?>

این کد یک اکشن به hook انتقال وضعیت اضافه می‌کند و هنگام تغییر وضعیت پست می‌توانید منطق دلخواه خود را اجرا کنید. پارامتر $post یک شیء WP_Post است.

4) ثبت و استفاده از وضعیت‌های سفارشی

<?php
register_post_status( 'review', array(
  'label'                     => _x( 'Under Review', 'post' ),
  'public'                    => false,
  'show_in_admin_all_list'    => true,
  'show_in_admin_status_list' => true,
) );
?>

پس از ثبت وضعیت سفارشی ‘review’، get_post_status مقدار ‘review’ را برای پست‌هایی که این وضعیت دارند برمی‌گرداند. این امکان برای گردش کار (workflow) و سفارشی‌سازی پنل مدیریت کاربردی است.

نکات حرفه‌ای و بهترین روش‌ها

  • همیشه از مقایسه نوع‌سخت (===) استفاده کنید تا با مقادیر غیرمنتظره اشتباه نشود.
  • برای کارایی، اگر تنها نیاز به وضعیت دارید و شناسه پست را دارید، می‌توانید از get_post_field(‘post_status’, $post_id) استفاده کنید تا از بارگذاری کامل شیء WP_Post جلوگیری شود:
$status = get_post_field( 'post_status', $post_id );

این روش معمولاً کوئری ساده‌تری اجرا می‌کند و برای اسکریپت‌های حساس به کارایی مفید است. توجه داشته باشید که خروجی مشابه get_post_status خواهد بود.

  • هنگام کار با وضعیت‌های خصوصی یا زمان‌بندی‌شده، سطح دسترسی کاربر (capabilities) را نیز بررسی کنید تا اطلاعات حساس نمایش داده نشود.
  • برای مدیریت جریان تغییر وضعیت، از hookهایی مانند transition_post_status و save_post استفاده کنید.
  • برای نمایش وضعیت‌ها در پنل مدیریت، می‌توانید از فیلترها و register_post_status بهره ببرید تا گزینه‌های اضافی دیده شوند.

مثال کاربردی: فیلتر کردن آرایه پست‌ها براساس وضعیت

<?php
$posts = get_posts( array(
    'post_type'   => 'post',
    'post_status' => array( 'publish', 'future' ),
    'numberposts' => 10,
) );

foreach ( $posts as $p ) {
    echo $p->post_title . ' - ' . get_post_status( $p );
}
?>

در این مثال از get_posts با آرگومان post_status برای گرفتن پست‌های با وضعیت مشخص استفاده شده و سپس با get_post_status برای هر پست، وضعیت چاپ می‌شود. این الگو برای گزارش‌گیری یا داشبوردهای سفارشی کاربردی است.

جمع‌بندی

تابع get_post_status() یک ابزار ساده اما قدرتمند برای فهمیدن وضعیت فعلی یک پست در وردپرس است. از آن در قالب‌ها، پلاگین‌ها و منطق گردش کار استفاده کنید. با رعایت نکات امنیتی و کارایی (مقایسه سخت، استفاده از get_post_field در صورت نیاز) می‌توانید از این تابع به بهترین شکل بهره ببرید. همچنین به یاد داشته باشید که وضعیت‌های سفارشی قابل ثبت هستند و تابع به‌راحتی آن‌ها را نیز برمی‌گرداند.

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

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