پست تایپ در وردپرس نوع محتوای منتشر شده در سایت را مشخص میکند. مثلاً نوشته، برگه و رسانه ۳ نوع post هستند که به طور پیشفرض با آنها سر و کار داریم. یا وقتی یک فروشگاه راهاندازی میکنیم، نوع محتوای محصول نیز به سایت اضافه میشود. در این آموزش یاد میگیریم چطور یک پست تایپ سفارشی را به وردپرس اضافه کنیم.
فرض کنید میخواهیم یک سایت محتوا محور گردشگری با وردپرس ایجاد کنیم. در نظر داریم روی این سایت، مکانهای دیدنی شهرهای مختلف را قرار دهیم. اولین راهحلی که به ذهنمان میرسد، استفاده از نوشته در وردپرس است.
به این صورت که هر مکان دیدنی را در یک نوشته ارسال میکنیم. سپس برای مدیریت و دستهبندی آنها، از دستهبندی و برچسبها کمک میگیریم. مثلاً استانها و شهرها را به عنوان دستهبندی و نوع مکان دیدنی (تاریخی، تفریحی و …) را با برچسبها مدیریت میکنیم.
اگر لازم باشد موضوعات دیگری هم در این سایت پوشش داده شود، مدیریت این محتواها سخت میشود. بهتر است به جای نوشتهها، یک پست تایپ سفارشی (Custom Post Type یا نوع پست سفارشی) در وردپرس ایجاد کرده و مکانهای دیدنی را به عنوان یک نوع نوشته متفاوت در نظر بگیریم.
فهرست محتوای آموزش
پست تایپ وردپرس
محتواهای اصلی در وردپرس به صورت Post و در جدول _posts
در دیتابیس ذخیره میشوند. معروفترین پست تایپهای پیشفرض وردپرس عبارتاند از:
- نوشتهها (post)
- برگهها (page)
- فایلهای رسانه (attachment)
- فهرستها (Nav Menu)
برخی موارد دیگر در وردپرس هم به صورت پست تایپ ذخیره میشوند. مثلاً رونوشتها (Revisions) که پیشنویسها هستند و cssهای اختصاصی در بخش سفارشی ساز، به صورت پست ذخیره میشوند.
وقتی افزونه جدیدی نصب میکنیم ممکن است پست تایپ جدیدی به سایت اضافه شود. در این صورت در بخش پیشخوان وردپرس یک منوی جدید برای افزودن محتوا در آن post type اضافه خواهد شد و اگر افزونه را غیر فعال کنیم، منوی آن نیز از پیشخوان برداشته میشود.
مثلاً وقتی ووکامرس را روی وردپرس نصب میکنیم، یک پست تایپ جدید به نام «محصول» (product) به سایت اضافه میشود.
ساختار ذخیرهسازی همه این محتواها شبیه به هم است. همه آنها دارای ویژگیهایی نظیر زمان ایجاد، تاریخ ویرایش، عنوان، آدرس (slug) و ID هستند. بسته به نیازمان میتوانیم ویژگیهای بیشتری به آنها اضافه کنیم.
در ادامه یاد میگیریم چطور یک پست تایپ سفارشی در وردپرس ایجاد کرده و تنظیمات مربوط به آن را انجام دهیم. تمام کدها را باید در فایل functions.php قالب اضافه کنیم.
ایجاد post type در وردپرس
برای ساخت پست تایپ جدید باید از تابع register_post_type()
استفاده کنیم. به طور معمول این تابع را درون یک تابع که به حلقه init در هسته وردپرس متصل شده است فراخوانی میشود. برای اینکه راحتتر متوجه شوید، ابتدا به قطعه کد زیر توجه کنید:
function sbzd_place_post_type() {
register_post_type( 'name', array() );
}
add_action( 'init', 'sbzd_place_post_type' );
من یک تابع به نام sbzd_place_post_type()
ایجاد کردم تا در آن تنظیمات پست تایپ جدید را تعریف کنم. سپس با add_action
به هسته وردپرس گفتم که در هنگام init کردن سایت، این تابع را فراخوانی کند.
اگر جمله بالا را متوجه نشدید، هیچ اشکالی ندارد. این توضیحات را برای کسانی دادم که برنامه نویس وردپرس هستند. اگر میخواهید فقط پست تایپ در وردپرس ایجاد کنید، بدون نگرانی، بقیه آموزش را دنبال کنید.
تابع register_post_type()
دو وردی میگیرد که هر دو تای آنها اجباری است. آرگومان اول یک رشته PHP است که نام پست تایپ ما را مشخص میکند. این اسم حتماً باید انگلیسی باشد.
آرگومان دوم یک آرایه PHP است که تنظیمات پست تایپ جدید را مشخص میکند. در ادامه مهمترین ویژگیهای درون آرایه را بررسی میکنیم.
محتواهای جدیدی که در این بخش مینویسیم، با اسمی که برای پست تایپ سفارشی خود تعریف میکنیم شناخته میشوند. یعنی اگر پس از ارسال چند محتوای جدید، آن را تغییر دهیم، به محتواهای قدیمی دسترسی نداریم. مثل اینکه در بخش برگهها، دنبال نوشتههای سایت بگردیم!
ویژگیهای پست تایپ سفارشی
ابتدا قطعه کد زیر را بررسی کنید. اگر در حال کد زدن هستید، آن را به functions.php
قالب خودتان اضافه کنید تا تغییرات را بهتر متوجه شوید.
function sbzd_place_post_type() {
$labels = array(
'name' => _x( 'مکانهای دیدنی', 'Post type general name', 'sbzd.ir' ),
'singular_name' => _x( 'مکان دیدنی', 'Post type singular name', 'sbzd.ir' ),
'menu_name' => __( 'مکانها' ),
'add_new' => __( 'افزودن' ),
'add_new_item' => __( 'افزودن مکان جدید' ),
'new_item' => __( 'مکان جدید' ),
'all_items' => __( 'همه مکانها' )
);
$args = array(
'labels' => $labels,
'label' => __( 'مکانها' ),
'description' => __( 'مکانهای دیدنی برای گردشگری' ),
);
register_post_type( 'place', $args );
}
add_action( 'init', 'sbzd_place_post_type' );
برای اینکه فهم ساختار کد بهتر شود، من از دو متغیر $labels
و $args
استفاده کردهایم؛ اما میتوانیم همه اینها را به صورت تودرتو هم بنویسیم. همه این آرایهها به صورت کلید – مقدار تعریف میشوند.
متغیر labels
کلیدهای مختلفی متناسب با نیازمان برای این آرایه میتوان تعریف کرد. در این جا 7 مورد مهم را آوردهام:
- name : نام پست تایپ سفارشی ما در وردپرس است.
- singular_name : نام مفرد نوع پست
- menu_name : نامی که در منوی پیشخوان نمایش داده میشود.
- add_new : اسم دکمه «افزودن» پست جدید
- add_new_item : اسم دکمه «افزودن پست»
- new_item
- all_items
ویژگیهای بیشتری هم میتوانیم تعریف کنیم، اما معمولاً به همین موارد بسنده میشود. سایر موارد (مثل پاک کردن، ویرایش، نمایش و …) اتوماتیک از متنهای پیشفرض وردپرس گرفته میشود که برایمان کافی است.
متغیر args
این متغیر را به عنوان ورودی دوم تابع ثبت پست تایپ جدید در وردپرس میدهیم. مقادیر این آرایه به دو بخش اصلی تقسیم میشود، مقادیری که مرتبط با تعیین ویژگیهای Post Type است و دیگری تنظیمات مخصوص پست تایپ.
در قطعه کدی که دیدید، من فقط بخش اول را تعریف کردهام:
- labels : خودش یک آرایه است که ویژگیهای پست تایپ سفارشی ما را مشخص میکند. چون این اطلاعات را در
$labels
مشخص کردهایم، همان متغیر را برای این کلید در نظر میگیریم. - label : نام کلی پست تایپ جدید ماست. وقتی افزونه یا بخش دیگری از سایت بخواهد به این post type اشاره کند، از این نام استفاده میکند.
- description : توضیحات کوتاه برای پست تایپ را مشخص میکند. تعریف این مقدار ضروری نیست اما حرفهایتر است که توضیحاتی برای آن بنویسیم.
در این کدها از توابع __()
و _x()
استفاده شده است. به زبان ساده، این توابع برای شناسایی متنها در قالب و افزونه استفاده میشود تا ترجمه آنها به راحتی انجام شود.
تنظیمات پست تایپ در وردپرس
در آرایه متغیر $args
میتوانیم تنظیمات به خصوصی را برای پست تایپ جدیدمان تعریف کنیم. در قطعه کد زیر ۸ مورد از پرکاربردترینها را استفاده کردهام:
<?php
$args = array(
'labels' => $labels,
'label' => __( 'مکانها' ),
'description' => __( 'مکانهای دیدنی برای گردشگری' ),
'supports' => array('title', 'editor', 'thumbnail', 'comment'),
'taxonomies' => array('tag'),
'public' => true,
'publicly_queryable' => true,
'show_ui' => true,
'show_in_menu' => true,
'has_archive' => true,
'hierarchical' => false,
);
کلید supports برای تعریف فیلدهایی است که این پست تایپ پشتیبانی میکند. در این مثال، فیلدهای عنوان، ویرایشگر متن، تصویر شاخص و دیدگاهها را فعال کردهام. اگر از سایت شما دارای فیلدهای سفارشی است، میتوانید از آنها در این جا استفاده کنید.
کلید taxonomies لیست تگزانومیهایی که این پست تایپ در وردپرس از آنها پشتیبانی میکند را مشخص میکند. به طور پیشفرض، این مقدار خالی است. یعنی پست تایپ جدید ما هیچ تگزانومی را پشتیبانی نمیکند. من در قطعه کد بالا، برچسبها را به پست تایپ خودمان اضافه کردهام. اگر سایتتان taxnomy سفارشی دارد، میتوانید از آنها هم استفاده کنید.
وظیفه سایر کلیدهایی که تعریف کردهام عبارتاند از:
ویژگی | مشخص میکند که |
---|---|
public | پست تایپ عمومی است یا نه؟ |
public_queryable | پست تایپ در نتایج کوئریهای نمایش پستها آورده شود یا نه؟ |
show_ui | پست تایپ در سمت کاربر (در پوسته سایت) قابل نمایش باشد یا نه؟ |
show_in_menu | در منوی پیشخوان نمایش داده شود یا نه؟ |
has_archive | post type دارای بایگانی است یا نه؟ |
hierarchical | آیا پست تایپ ساختار سلسله مراتبی دارد؟ (والد فرزندی) |
همانطور که گفتم، تنظیمات بسیار بیشتری را میتوانیم متناسب با نیاز خود برای پست تایپ جدید در وردپرس تعریف کنیم. برای دیدن همه تنظیمات به مستندات آن مراجعه کنید. همچنین برای اینکه یاد بگیرید چطور مطالب پست تایپهای مختلف را از دیتابیس فراخوانی کنید، آموزش کار با کوئری در وردپرس برایتان مفید خواهد بود.
امیدوارم با این آموزش توانسته باشید پست تایپ سفارشی خودتان را در وردپرس اضافه کنید. شما از پست تایپ برای افزودن چه بخشی به سایتتان کمک گرفتهاید؟ از بخش دیدگاهها با دیگران به اشتراک بگذارید.
این آموزش برای همیشه رایگانه! میتونید با اشتراکگذاری لینک این صفحه از ما حمایت کنید یا با خرید یه فنجون نوشیدنی بهمون انرژی بدید!
میخوام یه نوشیدنی مهمونتون کنم
ممنونم از پست مفیدتون استفاده کردم.
خوشحالیم براتون مفید بوده امیر عزیز
سلام وقتتون بخیر. لطفا راهنماییم کنید
من یه تایپ سفارشی ساختم با عنوان songs و در فایل آرشیو مربوطه ش دارم با wp_query ( در واقع در صفحه ای با آدرس songs/) پست های موردنظرم رو نمایش میدم. یک زیرصفحه با عنوان songs/today نیاز دارم که اونجا هم query موردنظرم رو برای پست ها کدنویسی کنم. چطور به این حالت برسم
سلام
اگر یک صفحه هست، احتمالاً ساختار آدرسدهی والد فرزندی در «برگهها» کمکتون کنه. کافیه یه قالب برای برگهها با کوئری موردنظرتون ایجاد کنید و برگهای که این قالب رو داره بهعنوان فرزند یه برگه با نامک songs باشه.
اگر میخواید این آدرس داینامیک باشه میتونید از روشهای rewrite rule وردپرس کمک بگیرید.
ممنوووووووووووووووووون 🙂
ممنون، آموزش خوبی بود.
سلامت باشی نوید عزیز. خوشحالیم که از این آموزش راضی بودید.
اموزشتون عالیه. مرسی از شما
خوشحالم که براتون کاربردی بوده و ممنون بابت انرژی خوبی که به ما میدید.