گسترش پست ها در وردپرس: بخش اول

در وردپرس پست ها ارائه کننده محتوای سایت و محتوای سایت مهمترین جنبه داشتن یک وب سایت است. طبقه بندی ها (taxonomies) روشی برای دسته بندی پست ها و متادیتا اطلاعات اضافی مرتبط با هر پست می باشد. گردآوری مجموعه این ویژگی ها در کنار یکدیگر ایجاد هر نوع وب سایتی را قابل تصور می سازد.

وردپرس دارای چندین نوع پست از پیش تعریف شده می باشد که برای کاربران امکان ایجاد و مدیریت وب سایت را فراهم می آورد. مهم ترین نوع پست ها در وردپرس شامل موارد زیر است:

پست (post): مطالبی که به عنوان پست وبلاگ در نظر گرفته می شوند.

صفحه (page): انواع محتوای سطح بالا و سلسله مراتبی از این گونه اند. مانند صفحه درباره ما، تماس با ما.

ضمیمه (Attachment): رسانه ضمیمه شده به انواع پست مانند تصاویر و ویدیوها

نسخه اصلاحی (revision): نسخه ای از انواع پست که به عنوان پشتیبان از آن استفاده می شود.

آیتم منو (Nav Menu Item): آیتم هایی که به عنوان منو در بخش مدیریت منوهای وردپرس ایجاد می شوند.

همزمان با معرفی وردپرس3 امکان تعریف و استفاده از انواع پست های جدید فراهم گردید. کاربران می توانستند انواع متفاوتی از وب سایت را بر روی پلتفرم وردپرس راه اندازی نمایند.

تعریف نوع پست جدید

برای ثبت یک نوع پست جدید در وردپرس از تابع register_post_type استفاده می گردد. این تابع دو پارامتر ورودی می پذیرد: پارامتر اول عنوان نوع پست جدید و پارامتر دوم آرایه ای از آرگومان های تعریف نوع پست جدید. این تابع در صورت ثبت موفق نوع پست، شی از کلاس wp_post_type برمی گرداند و در صورت بروز خطا شی wp_error را برمی گرداند.

آرگومان های پارامتر دوم تابع به شرح زیر هستند:

Public: امکان نمایش نوع پست در سایت را مشخص می کند. مقدار پیش فرض false است.

Show_ui: امکان نمایش نوع پست در صفحات مدیریت وردپرس را تعیین می کند.

Publicy_queryable: تعیین می کند که آیا نوع پست باید در سایت قابل جستجو باشد.

Exclude_from_search: برای تعیین مستثنی سازی مطالب نوع پست از نتایج جستجو در سایت استفاده می شود.

Supports: آرایه ای از ویژگی های پشتیبانی شونده توسط نوع پست.

ویژگی های پیش فرض وردپرس: title، editor، author، thumbnail، except، comments، trackbacks، custom-fields، page-attributes و revisions.

Labels: آرایه ای از متن هایی که در مدیریت وردپرس برای این نوع پست نمایش داده می شود.

Capability_type: امکان افزودن مجموعه ای از قابلیت ها را برای نوع پست فراهم می آورد. مقدار پیش فرض: post

Capabilities: آرایه ای از قابلیت های مورد نیاز برای ویرایش، حذف، انتشار مطالب از این نوع.

Hierarchical: امکان سلسله مراتبی بودن یا نبودن نوع پست را تعیین می کند. مقدار true برای نوع سلسله مراتبی.

Has_archive: امکان ایجاد بخش آرشیو برای مطالب این نوع پست. مقدار پیش فرض: false

Query_var: عنوان متغیر پرس و جو برای این نوع پست.

Rewrite: این آرگومان برای ایجاد لینک های یکتا برای این نوع پست استفاده می شود. مقادیر معتبر برای این آرگومان true، false یا آرایه ای از پارامترهای ایجاد ساختار لینک ها است. در حالتی که مقدار true باشد لینک ها براساس آرگومان query_var و عنوان مطالب ایجاد می شود. اگر مقدار false باشد، ساختار لینک ایجاد نمی گردد. اما در حالتی که مقدار به صورت آرایه باشد می توان با کلیدهای زیر تنظیمات را انجام داد:

  • with_front: آیا ساختار لینک این نوع پست باید با ساختار موجود در سایت آغاز گردد.
  • slug: یک رشته یکتا برای استفاده پیش از عنوان مطلب در ساختار لینک
  • feeds: آیا این نوع پست باید فید برای مطالبش داشته باشد. به صورت پیش فرض مقدار آن برابر مقدار has_archive است.
  • pages: آیا صفحات این نوع پست باید صفحه بندی شوند. مقدار پیش فرض: true

Taxonomies: آرایه ای از طبقه بندی هایی که می توان به این نوع پست تخصیص داد.

Menu_position: تنظیم موقعیت نمایش این نوع پست در بین آیتم های منو مدیریت وردپرس.

Menu_icon: تصویر مرتبط با آیکن این نوع پست.

Show_in_nav_menus: امکان نمایش این نوع پست در منوهای وردپرس. مقدار پیش فرض برابر مقدار public است.

Can_export: امکان اکسپورت (برون سپاری) این نوع پست را مشخص می کند. مقدار پیش فرض true است.

Register_meta_box_cb: نام تابعی که متاباکس ها را برای فرم ویرایش مطالب این نوع پست ایجاد می کند.

سایر آرگومان های مربوط به ایجاد نوع پست را می توانید در آدرس زیر مشاهده کنید:

نکته ای که برای تعریف نوع پست جدید باید به آن توجه داشت این است که تابع ایجاد کننده نوع پست جدید باید در هوک اکشن init فراخوانده شود. در غیر این صورت عملیات ثبت نوع پست جدید به درستی به اجرا در نمی آید.

<?php
add_action( ‘init’, ‘bmpt_music_collection_register_post_types’ );
             
/* Registers post types. */
function bmpt_music_collection_register_post_types() {
             
    /* Set up the arguments for the ‘music_album’ post type. */
    $album_args = array(
        ‘public’ = >  true,
        ‘query_var’ = >  ‘music_album’,
        ‘rewrite’ = >  array(
            ‘slug’ = >  ‘music/albums’,
            ‘with_front’ = >  false,
        ),
        ‘supports’ = >  array(
            ‘title’,
            ‘thumbnail’
        ),
        ‘labels’ = >  array(
            ‘name’ = >  ‘Albums’,
            ‘singular_name’ = >  ‘Album’,
            ‘add_new’ = >  ‘Add New Album’,
            ‘add_new_item’ = >  ‘Add New Album’,
            ‘edit_item’ = >  ‘Edit Album’,
            ‘new_item’ = >  ‘New Album’,
            ‘view_item’ = >  ‘View Album’,
            ‘search_items’ = >  ‘Search Albums’,
            ‘not_found’ = >  ‘No Albums Found’,
            ‘not_found_in_trash’ = >  ‘No Albums Found In Trash’
        ),
    );
             
    /* Register the music album post type. */
    register_post_type( ‘music_album’, $album_args );
}
             
? > 

در کد فوق آرگومان labels شامل آرایه ای از پارامترهایی است که به عنوان متن بخش های مختلف صفحات پلاگین می تواند استفاده شوند:

Name:  عنوان نوع پست در حالت جمع

Singular_name: عنوان نوع پست در حالت مفرد

Add_new: برچسب افزودن مورد جدید در آیتم منو

Add_new_item: متن دکمه افزودن مطلب جدید در صفحه لیست مطالب

Edit_item: برچسب ویرایش مطلب

New_item: متن ایجاد مطلب جدید

View_item: متن برای نمایش مطلب

Search_items: متن برای جستجوی مطلب

Not_found: متن نمایشی برای حالت پیدا نشدن مطلب در جستجو

Not_found_in_trash: متن برای حالت پیدا نشدن مطلب در سطل زباله

Parent_item_colon: متنی که در مطالب سلسله مراتبی برای والد یک مطلب نمایش داده می شود.

قابلیت های نوع پست

دو آرگومان capability_type و capabilities در آرایه آرگومان های تابع register_post_type امکان تعریف قابلیت برای نوع پست را فراهم می آورند. Capability_type امکان کنترل سراسری روی قابلیت ها اما capabilities آرایه ای است که امکان کنترل بر روی تک تک قابلیت ها را مهیا می سازد. در حقیقت capability_type به صورت خودکار مقادیر مختلف آرایه capabilities را تنظیم می نماید. فرض کنید می خواهید مجموعه ای از قابلیت ها را برای نوع پست خاصی ایجاد نمایید.

< ?php
             
‘capability_type’ = >  ‘album’,
             
? >   

در این صورت، قابلیت های مربوط به ویرایش، خواندن، حذف و انتشار مطالبی از این نوع پست با عناوین زیر ایجاد می گردند:

Edit_album، edit_albums، edit_others_albums، publish_albums، read_album، read_private_albums و delete_album

در صورتی که بخواهیم از طریق آرایه capabilities قابلیت ها را مشخص نماییم از کد زیر استفاده می کنیم:

< ?php
             
‘capabilities’ = >  array(
    ‘edit_post’ = >  ‘edit_album’,
    ‘edit_posts’ = >  ‘edit_albums’,
    ‘edit_others_posts’ = >  ‘edit_others_albums’,
    ‘publish_posts’ = >  ‘publish_albums’,
    ‘read_post’ = >  ‘read_album’,
    ‘read_private_posts’ = >  ‘read_private_albums’,
    ‘delete_post’ = >  ‘delete_album’,
),
             
? >

هر قابلیت مجوز اجرای کار خاصی را برای مطالب نوع پست جدید فراهم می آورد:

Edit_post: مجوز ویرایش مطالب از نوع پست جدید

Edit_posts: قابلیت اعطای دسترسی برای ایجاد و ویرایش پست ها

Edit_other_posts: مجوز ویرایش پست های ایجاد شده توسط سایر کاربران

Publish_posts: مجوز انتشار پست های از نوع جدید

Read_post: قابلیت تعیین امکان خواندن یک پست توسط یک کاربر

Read_private_posts: امکان خواندن پست های خصوصی منتشر شده را فراهم می کند.

Delete_post: قابلیت حذف یک پست توسط یک کاربر

انضمام یک طبقه بندی به نوع پست جدید

طبقه بندی های تعریف شده در وردپرس به راحتی می توانند توسط نوع پست جدید مورد استفاده قرار گیرند. با تنظیم آرگومان taxonomies آرایه $arg در تابع register_post_type می توانید از این طبقه بندی ها برای نوع پست جدید استفاده نمایید.

مثال: افزودن تگ مطالب برای نوع پست جدید

< ?php
             
‘taxonomies’ = >  array( ‘post_tag’ ),
             
? >

بکارگیری نوع پست جدید

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

Wp-includes/post.php

Wp-includes/post-template.php

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

برای دریافت اطلاعات پست ها از دیتابیس شی جدیدی از کلاس WP_Query ایجاد می کنیم و سپس از طریق حلقه می توانیم به اطلاعات هر پست دسترسی داشته باشیم. معمولا در درون این حلقه ها با استفاده از توابع قالب بندی پست محتوای خروجی مورد نظر ایجاد می گردند. در مثال زیر شورت کد [music_albums] امکان نمایش لیستی از مطالب نوع music_album را فراهم می آورد.

< ?php
             
add_action( ‘init’, ‘bmpt_music_album_register_shortcodes’ );
             
function bmpt_music_album_register_shortcodes() {
             
    /* Register the [music_albums] shortcode. */
    add_shortcode( ‘music_albums’, ‘bmpt_music_albums_shortcode’ );
}
             
function bmpt_music_albums_shortcode() {
             
    /* Query albums from the database. */
    $loop = new WP_Query(
        array(
            ‘post_type’ = >  ‘music_album’,
            ‘orderby’ = >  ‘title’,
            ‘order’ = >  ‘ASC’,
            ‘posts_per_page’ = >  -1,
        )
    );
             
    /* Check if any albums were returned. */
    if ( $loop- > have_posts() ) {
             
        /* Open an unordered list. */
        $output = ‘ < ul class=”music-collection” > ’;
             
        /* Loop through the albums (The Loop). */
        while ( $loop- > have_posts() ) {
             
            $loop- > the_post();
             
            /* Display the album title. */
            $output .= the_title(
                ‘ < li >  < a href=”’ . get_permalink() . ‘” > ’,
                ‘ < /a >  < /li > ’,
                false
            );
             
        }
             
        /* Close the unordered list. */
        $output .= ‘ < /ul > ’;
    }
             
    /* If no albums were found. */ 
    else {
        $output = ‘ < p > No albums have been published.’;
    }
             
    /* Return the music albums list. */
    return $output;
}
             
? >

مهمترین بخش کد فوق آرگومان post_type در پارامتر ورودی شی WP_Query می باشد که باید براساس نام نوع پست (در اینجا music_album) مقداردهی شود تا جستجو در دیتابیس برای پست هایی از این نوع صورت پذیرد.

نتیجه حاصل از اجرای پرس و جو در متغیر $loop قرار می گیرد. تابع have_posts نتیجه حاصل از پرس و جو را مورد بررسی قرار می دهد و در صورت وجود پست مقدار true و در غیر این صورت مقدار false را بر می گرداند. تابع the_post سبب تکرار شاخص نتیجه پرس و جو در حلقه می گردد. همچنین از تابع the_title نیز برای استخراج عنوان پست در حلقه حاصل از پرس و جو استفاده می گردد.

توابع نمایش محتوای نوع پست ها در حلقه

تابع the_title

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

<?php
 /* Display the album title. */
  $output .= the_title(
                ‘ < li >  < a href=”’ . get_permalink() . ‘” > ’,
                ‘ < /a >  < /li > ’,
                false
            );
?>

تابع the_content

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

< ?php
the_content( $more_link_text, $stripteaser );
? >

تابع excerpt

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

تابع the_permalink

این تابع آدرس لینک پست را در حلقه به نمایش در می آورد. احتمالا از این لینک در ویژگی href لینک استفاده خواهید کرد.

بررسی وجود یا عدم وجود یک نوع پست

تابع post_type_exist وجود یا عدم وجود یک نوع پست در وردپرس را بررسی می کند و در صورتی که نوع پست ثبت شده باشد مقدار true و در غیر این صورت مقدار false را برمی گرداند. پارامتر ورودی این تابع نام نوع پست است.

مثال:

< ?php
             
/* If music_album post type is registered. */
if ( post_type_exists( ‘music_album’ ) ) {
             
    echo ‘The music_album post type has been registered.’;
}
             
/* If the music_album post type is not registered. */
else {
             
    echo ‘The music_album post type has not been registered.’;
}
             
? >      

متادیتای پست

همان طور که در بخش های قبلی هم اشاره شد، در وردپرس اطلاعات اضافی مرتبط با یک پست را  که به آن متادیتا پست می گویند، می توان در جدول postmeta دیتابیس ذخیره نمود. متادیتای پست در واقع مقادیر فیلدهای سفارشی هستند که به شکل متاباکس به صفحات ویرایش/ایجاد پست اضافه می شوند. برای تعریف متادیتا مورد نیاز نوع پست های جدیدی که قصد ایجاد آنها را دارید، باید مقادیر مورد نظر را در کلید custom-fields آرگومان supports تابع register_post_type وارد نمایید.

افزودن متادیتای پست

از تابع add_post_meta برای افزودن یک متادیتا جدید برای یک پست (افزودن یک سطر جدید به جدول postmeta) استفاده می شود. این تابع چهار پارامتر ورودی می پذیرد: پارامتر اول آیدی پست، پارامتر دوم نام (کلید) متادیتا، پارامتر سوم مقدار متادیتا و پارامتر چهارم مقدار بولین تعیین کننده امکان ذخیره چند مقداری برای کلید متا مورد نظر است. پارامتر چهارم این تابع به صورت پیش فرض false است که امکان ذخیره چندمقداری را فراهم می آورد.

< ?php
             
add_post_meta( 100, ‘favorite_song’, ‘If Code Could Talk’, true );
             
? >

با اجرای کد فوق، متادیتای پست 100 با کلید favorite_song و مقدار If Code Could Talk در جدول postmeta ذخیره می گردد.

دریافت متادیتای پست از دیتابیس

تابع get_post_meta امکان استخراج متادیتاهای ذخیره شده برای یک پست را برمی گرداند. این تابع سه پارامتر می پذیرد که تنها پارامتر اول آن اجباری است. پارامتر اول آیدی پست، پارامتر دوم کلید متادیتا که در صورت عدم تعیین تمامی متادیتاهای پست انتخاب می شود. پارامتر سوم تابع مقدار بولین تعیین کننده داده برگشتی برای متادیتاهای چند مقداری است. در صورتی که مقدار این پارامتر true باشد تنها مقدار اولین سطر از متادیتاهای دارای کلید یکسان برگشت داده می شود و در صورتی که مقدار پارامتر false باشد مقادیر متادیتاهای این کلید به صورت آرایه برگردانده می شود.

مثال: دریافت اطلاعات متادیتای تک مقداری

< ?php
             
/* Get a single favorite song by the favorite_song meta key. */
$favorite_song = get_post_meta( 100, ‘favorite_song’, true );
             
/* Display the meta value. */
echo ‘Favorite song from this album: ‘ . $favorite_song;
             
? >   

مثال: دریافت متادیتای چند مقداری

< ?php
             
/* Get all meta values for the favorite_song meta key. */
$favorite_songs = get_post_meta( 100, ‘favorite_song’, false );
             
/* Open an unordered list. */
echo ‘ < ul class=”favorite-songs” > ’;
             
/* Loop through each meta value. */
foreach ( $favorite_songs as $song ) {
             
    /* Display the individual meta value. */
    echo ‘ < li > ’ . $song . ‘ < /li > ’;
}
             
/* Close the unordered list. */
echo ‘ < /ul > ’;
             
? >    

بروزرسانی متادیتای پست

تابع update_post_meta می تواند هم برای بروزرسانی و هم برای ایجاد یک متادیتا مورد استفاده قرار گیرد. این تابع ابتدا به بررسی وجود کلیدمتا برای پست مورد نظر در جدول postmeta می پردازد. در صورت وجود کلیدمتا، مقدار آن را بروزرسانی می کند و در صورت عدم وجود متادیتا جدید در جدول ذخیره می گردد. این تابع چهار پارامتر ورودی می پذیرد: پارامتر اول آیدی پست، پارامتر دوم نام (کلید) متا، پارامتر سوم مقدار متادیتا و پارامتر چهارم مشخص کننده مقدار قبلی متادیتا در حالتی است که متادیتا به صورت چند مقداری باشد. این تابع برای حالتی که متادیتای جدید را ایجاد نماید آیدی متادیتای جدید و در صورت بروزرسانی موفق متادیتا مقدار true را بر می گرداند. در صورت بروز خطا نیز خروجی تابع false خواهد بود.

< ?php
             
update_post_meta( 100, ‘favorite_song’, ‘WP Blues’, ‘If Code Could Talk’ );
             
? >  

در مثال فوق از میان تمامی سطرهای جدول postmeta که آیدی پست آنها 100 و کلید متا favorite_song دارند تنها سطری که مقدار متادیتای آن برابر If Code Could Talk  است با مقدار متای جدید WP Blues بروزرسانی می گردد.

حذف متادیتای پست

از تابع delete_post_meta برای حذف متادیتای پست استفاده می شود. این تابع سه پارامتر ورودی می پذیرد: پارامتر اول آیدی پست، پارامتر دوم کلید متا و پارامتر سوم مقدار یک متادیتای برای حالت چند مقداری. در صورت حذف موفق متادیتا مقدار true و در غیر این صورت مقدار false برگردانده می شود.

< ?php
             
delete_post_meta( 100, ‘favorite_song’, ‘If Code Could Talk’ );
             
? >   

حذف متادیتای پست 100 با کلید favorite_song و مقدار متا برابر If Code Could Talk. برای حذف تمامی متادیتاهای یک کلید می توان پارامتر سوم را در تابع مقداردهی نکرد.

پست های مرتبط

Leave a Comment