آموزش ایجاد وضعیت سفارشی در وردپرس بدون نصب افزونه

افزودن وضعیت پست در وردپرس

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

وردپرس هم مشابه هر سیستم محتوای دیگری چه اختصاصی و چه منبع باز(Open Source) وضعیت های مختلفی(Post Status) ارائه می دهد:

  • پیش نویس(Draft) : نوشته هایی که هنوز کامل نشده اند.
  • منتشر شده(Published) : نوشته هایی که هم اکنون فعال هستند و بازدیدکنندگان می توانند آنها را مشاهده کنند.
  • زمانبندی شده(Scheduled) : نوشته هایی که برای انتشار در آینده برنامه ریزی شده اند.
  • در انتظار بررسی(Pending) : نوشته هایی که آماده ارسال هستند، اما باید توسط کاربری که مجوزهای لازم را دارد منتشر شود.
  • خصوصی(Private) : محتوایی که فقط توسط کاربران مدیریتی قابل مشاهده است.
  • زباله دان(Trash) : نوشته هایی که حذف منطقی شده اند.
  • پیش نویس خودکار(Auto-Draft) : نسخه هایی از یک نوشته که در هنگام ویرایش به صورت خودکار تولید می شوند.

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

انواع وضعیت های سفارشی در وردپرس

 

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

به عنوان مثال کوئری SQL زیر لیست مطالب منتشر شده را گزارش می دهد.

SELECT * FROM wp_posts WHERE post_type='post' and post_status='publish'

 

یا برای بدست آوردن تعداد نوشته های متعلق به هر وضعیت بدین صورت عمل می کنیم.

SELECT post_status ,Count(*) post_count FROM wp_posts 
                   WHERE post_type='post' 
                     GROUP BY post_status

 

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

$query = new WP_Query(
    array(
        'post_type' => 'post',
        'post_status' => 'draft',
        'posts_per_page' => 5
    )
);
while ( $query->have_posts() ) {
    $query->the_post();
    echo '<h1>' . get_the_title() . '</h1>';
}
wp_reset_postdata();

 

تا اینجای کار به بررسی مفاهیم پایه ای پرداختیم، چرا که آشنایی با اصول اولیه باعث درک بهتر سیستم خواهد شد. حالا وارد بحث اصلی خود می شویم و آن پاسخ به این سوال است که:

چگونه می توانیم یک وضعیت جدید به وضعیت های وردپرس اضافه کنیم؟

فرض کنید در حال توسعه افزونه ای هستید که یک سیستم گردش کار(Workflow) در اختیار مشتری قرار می دهد، از طرفی وضعیت های موجود پاسخگوی نیازتان نیست و می خواهید یک وضعیت جدید به نام “تایید نهایی” به این مجموعه اضافه کنید.

برای اینکار لازم است مراحل زیر را انجام دهید، همچنین کدهایی که در ادامه بررسی خواهیم کرد به فایل functions.php اضافه کنید.

گام ۱: ثبت وضعیت سفارشی

در ابتدا عنوان وضعیت سفارشی و پارامترهای موردنیاز تابع register_post_status را فراهم می کنیم.

function modiredev_register_custom_post_status()
{
    register_post_status(
        'final_approved',
        array(
            'label' => 'تایید نهایی',
            'label_count' => _n_noop( 'تایید نهایی<span class="count">(%s)</span>',
                'تایید نهایی<span class="count">(%s)</span>' ),
            'public' => true,
            'exclude_from_search' => false,
            'show_in_admin_all_list' => true,
            'show_in_admin_status_list' => true
        ));
}
add_action( 'init', 'modiredev_register_custom_post_status' );

 

گام ۲: افزودن وضعیت سفارشی به صفحه افزودن و ویرایش نوشته

در مرحله قبل یک وضعیت جدید تعریف کردیم اما این وضعیت در هیچ صفحه ای وجود ندارد، به همین دلیل آن را با جی کوئری به لیست وضعیت ها اضافه می کنیم.

function modiredev_add_status_in_post_page()
{
    global $post;
    if ($post->post_type == 'post' && $post->post_status == 'final_approved') {
        $selected = 'selected';
    }
    echo "<script>
        jQuery(document).ready( function() {
            jQuery( 'select[name=\"post_status\"]' ).append( '<option value=\"final_approved\" $selected>تایید نهایی</option>' );
        });
        </script>";
}

add_action( 'admin_footer-post.php', 'modiredev_add_status_in_post_page' );
add_action( 'admin_footer-post-new.php', 'modiredev_add_status_in_post_page' );

 

حالا امکان استفاده از وضعیت “تایید نهایی” در صفحه افزودن و ویرایش نوشته فراهم شده است.

افزودن وضعیت سفارشی به فرم افزودن و ویرایش نوشته

 

گام ۳: افزودن وضعیت سفارشی به صفحه ویرایش سریع

در این مرحله وضعیت سفارشی را به فرم ویرایش سریع اضافه می کنیم.

function modiredev_add_status_in_quick_edit()
{
    echo "<script>
        jQuery(document).ready( function() {
            jQuery( 'select[name=\"_status\"]' ).append( '<option value=\"final_approved\">تایید نهایی</option>' );
        });
        </script>";
}

add_action( 'admin_footer-edit.php', 'modiredev_add_status_in_quick_edit' );

 

خروجی کار بدین صورت خواهد بود.

افزودن وضعیت سفارشی به فرم ویرایش سریع وردپرس

 

گام ۴: افزودن وضعیت به لیست نوشته ها

در آخرین مرحله عنوان وضعیت سفارشی را به لیست نوشته های وردپرس اضافه می کنیم.

function modiredev_display_status_label( $statuses ) {
    global $post;
    if( get_query_var( 'post_status' ) != 'final_approved' ){
        if( $post->post_status == 'final_approved' ){
            return array('تایید نهایی');
        }
    }
    return $statuses;
}

add_filter( 'display_post_states', 'modiredev_display_status_label' );

 

نتیجه کدهای بالا بدین صورت خواهد بود.

نمایش وضعیت سفارشی در لیست نوشته های وردپرس

 

امیدواریم که این آموزش کوتاه برای شما مفید بوده باشد.

برچسب ها
سعید یاورنیا 118 نوشته 130 دیدگاه

توسعه دهنده PHP و Wordpress
توسعه وب سایت یکی از کارهایی است که تلاش می کنم تخصصم رو در اون بالا ببرم، یادگیری تکنولوژی های جدید یکی از چالش هایی است که به شدت به آن علاقمند هستم.

دیدگاهتان را بنویسید.

نشانی ایمیل شما منتشر نخواهد شد، بخش‌های موردنیاز با * مشخص شده‌اند.