تابع get_post_status در وردپرس
تابع 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 در صورت نیاز) میتوانید از این تابع به بهترین شکل بهره ببرید. همچنین به یاد داشته باشید که وضعیتهای سفارشی قابل ثبت هستند و تابع بهراحتی آنها را نیز برمیگرداند.
آیا این مطلب برای شما مفید بود ؟




