آشنایی با نوع پست سفارشی وردپرس

نوشته شده توسط ۱۰ سال پیش

وردپرس دارای نوع پستهای پیشفرضی هست که برای مطالب (Post)، برگه‌های ثابت (Page)، پیوستها (Attachment)، مطالب بازبینی (Revision)، فهرستها (Nav Menu) استفاده می‌شود. اما اگر بخواهیم نوع خاصی که کاربرد خاصی دارد برای نمونه رویدادها، پادکست یا هر مطلبی که محتوای به خصوصی دارد ایجاد کنیم راه حل چیست؟

 

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

می‌توانید با افزونه‌هایی مانند Custom Post Type UI یا ابزارهای آنلاینی مانند تولید کننده کد GenerateWP نوع پست سفارشی خود را ایجاد و به وردپرس اضافه کنید.

 

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

برای افزودن دستی نوع پست جدید کدها را می‌توانید در افزونه یا فایل functions.php پوسته استفاده کنید.

برای شروع می‌خواهیم کد ساده‌ای را بررسی کنیم:

function wpp_custom_post_type() {
    register_post_type( 'movies',
        array(
            'labels' => array(
                'name' => 'فیلم'
            ),
            'public' => true,
            'has_archive' => true,
        )
    );
}
add_action( 'init', 'wpp_custom_post_type' );

در کد بالا تابع wpp_custom_post_type را به اکشن init برای ثبت نوع پست سفارشی جدید در ابتدای شروع برنامه نسبت داده‌ایم. تابع register_post_type که برای ثبت نوع پست سفارشی استفاده میشود دارای پارامترهای گوناگونی است که به بررسی آن می‌پردازیم.

نمونه کاملتری نسب به کد قبلی:

function wpp_custom_post_type() {

    $labels = array(
        'name'                => __( 'Post Types', 'text_domain' ),
        'singular_name'       => __( 'Post Type', 'text_domain' ),
        'menu_name'           => __( 'Post Type', 'text_domain' ),
        'parent_item_colon'   => __( 'Parent Item:', 'text_domain' ),
        'all_items'           => __( 'All Items', 'text_domain' ),
        'view_item'           => __( 'View Item', 'text_domain' ),
        'add_new_item'        => __( 'Add New Item', 'text_domain' ),
        'add_new'             => __( 'Add New', 'text_domain' ),
        'edit_item'           => __( 'Edit Item', 'text_domain' ),
        'update_item'         => __( 'Update Item', 'text_domain' ),
        'search_items'        => __( 'Search Item', 'text_domain' ),
        'not_found'           => __( 'Not found', 'text_domain' ),
        'not_found_in_trash'  => __( 'Not found in Trash', 'text_domain' ),
    );
    $args = array(
        'label'               => __( 'post_type', 'text_domain' ),
        'description'         => __( 'Post Type Description', 'text_domain' ),
        'labels'              => $labels,
        'supports'            => array( ),
        'taxonomies'          => array( 'category', 'post_tag' ),
        'hierarchical'        => false,
        'public'              => true,
        'show_ui'             => true,
        'show_in_menu'        => true,
        'show_in_nav_menus'   => true,
        'show_in_admin_bar'   => true,
        'menu_position'       => 5,
        'can_export'          => true,
        'has_archive'         => true,
        'exclude_from_search' => false,
        'publicly_queryable'  => true,
        'capability_type'     => 'post',
    );
    register_post_type( 'post_type', $args );

}

add_action( 'init', 'wpp_custom_post_type', 0 );

نمونه کد قبلی دارای تنظیمات پیشفرض برای پارامترهای خاصی است، شما میتوانید سفارشی‌سازی بیشتری داشته باشید:

function wpp_custom_post_type() {

    $labels = array(
        'name'                => __( 'Post Types', 'text_domain' ),
        'singular_name'       => __( 'Post Type', 'text_domain' ),
        'menu_name'           => __( 'Post Type', 'text_domain' ),
        'parent_item_colon'   => __( 'Parent Item:', 'text_domain' ),
        'all_items'           => __( 'All Items', 'text_domain' ),
        'view_item'           => __( 'View Item', 'text_domain' ),
        'add_new_item'        => __( 'Add New Item', 'text_domain' ),
        'add_new'             => __( 'Add New', 'text_domain' ),
        'edit_item'           => __( 'Edit Item', 'text_domain' ),
        'update_item'         => __( 'Update Item', 'text_domain' ),
        'search_items'        => __( 'Search Item', 'text_domain' ),
        'not_found'           => __( 'Not found', 'text_domain' ),
        'not_found_in_trash'  => __( 'Not found in Trash', 'text_domain' ),
    );
    $rewrite = array(
        'slug'                => 'post_type',
        'with_front'          => true,
        'pages'               => true,
        'feeds'               => true,
    );
    $capabilities = array(
        'edit_post'           => 'edit_post',
        'read_post'           => 'read_post',
        'delete_post'         => 'delete_post',
        'edit_posts'          => 'edit_posts',
        'edit_others_posts'   => 'edit_others_posts',
        'publish_posts'       => 'publish_posts',
        'read_private_posts'  => 'read_private_posts',
    );
    $args = array(
        'label'               => __( 'post_type', 'text_domain' ),
        'description'         => __( 'Post Type Description', 'text_domain' ),
        'labels'              => $labels,
        'supports'            => array( 'title', 'editor', 'excerpt', 'author', 'thumbnail', 'comments', 'trackbacks', 'revisions', 'custom-fields', 'page-attributes', 'post-formats', ),
        'taxonomies'          => array( 'category', 'post_tag' ),
        'hierarchical'        => false,
        'public'              => true,
        'show_ui'             => true,
        'show_in_menu'        => true,
        'show_in_nav_menus'   => true,
        'show_in_admin_bar'   => true,
        'menu_position'       => 5,
        'menu_icon'           => 'dashicons-welcome-learn-more',
        'can_export'          => true,
        'has_archive'         => true,
        'exclude_from_search' => false,
        'publicly_queryable'  => true,
        'query_var'           => 'post_type',
        'rewrite'             => $rewrite,
        'capabilities'        => $capabilities,
    );
    register_post_type( 'post_type', $args );

}

add_action( 'init', 'wpp_custom_post_type', 0 );

 

تابع register_post_type دارای دو پارامتر است که پارامتر اول نام نوع پست سفارشی و پارامتر دوم آرایه‌ای از خصوصیت‌هایی است که برای این Post Type تعریف کرده‌ایم. بررسی پارامتر دوم تابع:

  • label : نام نمایش پست سفارشی
  • description : توضیح درباره نوع پست سفارشی
  • labels : آرایه‌ای از عنوانهای استفاده شده در صفحات مربوط به نوع پست سفارشی، شامل:
    • name : عنوان نوع پست سفارشی
    • singular_name : عنوان برای تک پست
    • menu_name : عنوان در منوی مدیریت
    • parent_item_colon : عنوان برای استفاده در حالتی که نوع پست سفارشی قابلیت سلسله‌ای را داشته باشد
    • all_items : عنوان تمام آیتمها
    • view_item : نمایش آیتم/پست
    • add_new_item : افزودن آیتم جدید
    • add_new : افزودن پست جدید
    • edit_item : ویرایش
    • update_item : بروزرسانی
    • search_items : جستجو
    • not_found : عنوان در صورت پیدا نشدن پست در صفحه مدیریت پست سفارشی
    • not_found_in_trash : پیدا نشدن پست در بخش بازیافت
  • supports : لیست آرایه‌ای از امکاناتی که پیشفرض وردپرس داراست و میتوانید استفاده کنید، شامل:
    • title : امکان تعیین عناون برای نوع پست سفارشی
    • editor : ویرایشگر متن
    • excerpt : خلاصه متن
    • author : تعیین نویسنده
    • thumbnail : پشتیبانی از تصویر شاخص
    • comments : قابلیت ارسال نظر برای نوع سفارشی
    • trackbacks : بازخورد
    • revisions : مطالب بازبینی شده
    • custom-fields : زمینه دلخواه
    • page-attributes : تعیین صفت برا پست
    • post-formats : انواع فرمتهای پست مانند : صدا، ویدیو، نقل قول و …
  • taxonomies : در صورتی که تاکسونامی جدیدی ثبت کرده‌اید یا میخواهید از نوع‌های پیشفرض مانند category و post_tag استفاده کنید در این پارامتر نام تاکسونامی را به صورت آرایه قرار دهید.
  • hierarchical : پشتیبانی از حالت سلسله‌ای برای پستها (نوع برگه دارای چنین خصوصیتی هست)
  • public : وضعیت نمایش برای نویسنده‌ها (show_in_nav_menus, show_ui)  و خوانندگان (exclude_from_search, publicly_queryable). مقدار پیشفرض برابر false است
  • show_ui : وضعیت نمایش در مدیریت
  • show_in_menu : کنترل نمایش در منوی مدیریت
  • show_in_nav_menus : امکان استفاده/نمایش در فهرستها
  • show_in_admin_bar : نمایش در منوی ابزار مدیریت
  • menu_position : موقعیت نمایش منو در منوی مدیریت، میتوانید مقداری را با توجه موقعیتهای زیر قرار دهید (در صورت تعیین نشدن در انتهای منوی مدیریت نمایش داده می‌شود):
    • 5 – زیر منوی نوشته‌ها
    • 10 – زیر منوی رسانه
    • 15 – زیر منوی لینکها
    • 20 – زیر منوی برگه‌ها
    • 25 – زیر منوی دیدگاه‌ها
    • 60 – زیر منوی نمایش
    • 65 – زیر منوی افزونه‌ها
    • 70 – زیر منوی کاربران
    • 75 – زیر منوی ابزارها
    • 80 – زیر منوی تنظیمات
    • 100 – زیر دومین جدا کننده منو
  • menu_icon : نام آیکن منو، برای تعیین میتوانید از dashicons استفاده کنید
  • can_export : امکان برون‌بری و درون‌ریزی
  • has_archive : تعیین قابلیت بایگانی برای پست سفارشی
  • exclude_from_search : وضعیت نادیده گرفتن در جستجو
  • publicly_queryable : امکان کویری و نمایش پست سفارشی، در صورتی که مقدار false را تنظیم کنید بایگانی پست سفارشی نمایش داده نمیشود.
  • query_var : مقداری که در کویری پیشفرض وردپرس تنظیم میشود برای کویری گرفتن از نوع پست سفارشی
  • rewrite : در صورتی که بخواهید نامک نوع پست سفارشی را تغییر دهید میتوانید از این امکان استفاده کنید در غیر این صورت برابر با نامی هست که برای نوع پست تعیین میکنید. به صورت آرایه‌ای تعیین میشود (اختیاری)
    • slug : تعیین نامک نوع پست سفارشی
    • with_front : تعیین استفاده در آدرس‌دهی پستها
    • pages : تعیین استفاده در صفحه‌بندی
    • feeds : تعیین استفاده در فید/خوراک
  • capability_type : شما میتوانید از قابلیتهای پیشفرض نوع post و page برای نویسنده نوع پست سفارشی جدید استفاده کنید یا با استفاده از پارامتر capabilities برای هر قابلیت وضعیتی تعیین کنید. مقدارهای قابل تعیین برای این پارامتر : page یا post
  • capabilities : لیست آرایه‌ای تعیین قابلیتهای نویسنده/کاربر برای تغییر در نوع پست سفارشی
    • edit_post : قابلیت نویسنده برای ویرایش پست، مقدار پیشفرض edit_post
    • read_post : قابلیت نویسنده برای خواندن پست، مقدار پیشفرض read_post
    • delete_post : قابلیت نویسنده برای حذف پست، مقدار پیشفرض delete_post
    • edit_posts : قابلیت نویسنده برای ویرایش پستها، مقدار پیشفرض edit_posts
    • edit_others_posts : قابلیت نویسنده برای ویرایش پستهای دیگر نویسنده‌ها، مقدار پیشفرض edit_others_posts
    • publish_posts : قابلیت نویسنده برای انتشار پست، مقدار پیشفرض publish_posts
    • read_private_posts : قابلیت نویسنده برای خواندن پستهای خصوصی، مقدار پیشفرض read_private_posts

 

نمایش مطالب نوع پست سفارشی

بعد از ثبت به “تنظیمات » پیوند یکتا” بروید و یک بار تنظیمات را ذخیره کنید

بایگانی نوع پست سفارشی در صورتی که ساختار پیوند یکتا برروی پیشفرض باشد به صورت زیر است

http://example.com/?post_type=movies

در غیر این صورت:

http://example.com/movies

movies در اینجا نام یا در صورت تعیین نامک، نامک نوع پست سفارشی است.

 

قالب نمایشی نوع پست سفارشی

برای نمایش بایگانی پیشفرض از فایل archive.php استفاده خواهد شد، در صورتی که می‌خواهید فایل دیگری تعیین کنید از نام archive-movies.php استفاده کنید.

برای نمایش پست مانند حالت قبل پیشفرض از single.php و برای تعیین میتوانید از نام فایل single-movies.php استفاده کنید.

movies در اینجا نام نوع پست سفارشی است.

 

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

پارسا کافی


ارسال دیدگاه شما

دیدگاه های ارسال شده برای این مطلب
  1. alireza8200 گفت:

    سلام ، ممنون از آموزشتون…..یه سوال داشتم…. چجوری به پست تایپمون صفحه بندی یا همون pagination اضافه کنیم؟؟