آموزش وردپرس

ساخت انواع سفارشی پست در وردپرس: ۲ روش آسان به صورت گام به گام

وحید بهنام13 دقیقه مطالعه1 بازدید0 دیدگاه

اگر تاکنون برای افزودن محتوای خاص به سایت وردپرس تان به دنبال راهی مؤثر بوده اید، درک می کنیم که یافتن روش مناسب می تواند دشوار باشد. در این مقاله، دو روش معتبر برای ایجاد نوع نویسی های سفارشی (Custom Post Types) را قدم به قدم بررسی می کنیم. هر روش با توضیح دقیق تنظیمات، کدهای مورد نیاز و نکات عملی همراه است تا بتوانید بدون سردرگمی پیش بروید.

به کارگیری این راهکارها به شما امکان می دهد تا ساختار محتوا را به صورت کاملاً منطبق بر نیازهای پروژه تان شکل دهید. در طول مسیر، نکات بهینه سازی و مشکلات رایجی که ممکن است با آن ها روبرو شوید، به صورت واضح بیان می شود. در پایان، با داشتن یک نوع نویسی سفارشی کامل، می توانید تجربه کاربری و مدیریت محتوا را به سطح بالاتری ارتقاء دهید.

فهرست مطالب

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

نوع نوشته های سفارشی (Custom Post Types) امکان افزودن ساختارهای محتوا متفاوت به وردپرس را می دهند؛ به عبارت دیگر، به جای محدود شدن به نوشته ها و برگه ها، می توانید «پروژه»، «پرسش وپاسخ»، «پورتفولیوی مشتری» یا هر نوع داده ای که به کسب وکار شما مربوط است، تعریف کنید. این کار نه تنها تجربه کاربری را بهبود می بخشد، بلکه قابلیت فیلتر کردن، مرتب سازی و نمایش داده ها را با تم ها و افزونه های مختلف به صورت بومی فراهم می کند.

برای ثبت یک نوع نوشته سفارشی، مهم ترین پارامترها عبارتند از:

  • labels: متن های نمایش‑دهنده در پنل مدیریت (مانند «افزودن محصول جدید»).
  • public: تعیین می کند آیا این نوع نوشته برای بازدیدکنندگان عمومی قابل دسترس باشد یا نه.
  • supports: ویژگی های پیش فرضی که برای هر آیتم فعال می شود (عنوان، ویرایشگر، تصویر شاخص و …).
  • hierarchical: مشابه برگه ها، امکان داشتن زیرمجموعه (پست‑پدر/پست‑فرزند) را می دهد.

درک این گزینه ها پیش نیاز استفاده صحیح از API وردپرس است؛ به خصوص وقتی می خواهید عملکردهای پیشرفته مثل فیلترهای سفارشی یا متادیتاهای خاص را اضافه کنید.

روشمزایامعایب
کدنویسی (functions.php یا پلاگین اختصاصی)انعطاف پذیری کامل؛ بدون بارگذاری افزونه اضافی؛ به روز رسانی آسان در گیت.نیاز به دانش PHP؛ ریسک خطا در صورت نوشتن نادرست کد.
افزونه (مثلاً Custom Post Type UI)رابط کاربری گرافیکی؛ مناسب برای کاربران غیر فنی؛ زمان راه اندازی سریع.وابستگی به افزونه؛ ممکن است گزینه های پیشرفته محدود باشد.

اگر تازه کار هستید، پیشنهاد می شود ابتدا با افزونه Custom Post Type UI یک نوع نوشته «پروژه» بسازید و ویژگی های دلخواه را تنظیم کنید؛ سپس، برای بهینه سازی یا افزودن قابلیت های خاص، همان تنظیمات را به کد زیر تبدیل کنید و در فایل functions.php یا یک پلاگین سفارشی قرار دهید:

CODE
function register_project_cpt() {
    $args = array(
        'label'         => 'پروژه ها',
        'public'        => true,
        'hierarchical'  => false,
        'supports'      => array( 'title', 'editor', 'thumbnail', 'excerpt' ),
        'has_archive'   => true,
        'rewrite'       => array( 'slug' => 'projects' ),
    );
    register_post_type( 'project', $args );
}
add_action( 'init', 'register_project_cpt' );

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

آماده سازی محیط توسعه وردپرس

برای شروع کار با نوع پست سفارشی، اولین گام نصب یک سرور محلی است. ابزارهای رایج شامل XAMPP (ویندوز/لینوکس)، MAMP (مک) یا Local by Flywheel می شوند. این برنامه ها Apache، MySQL و PHP را در یک بسته ساده فراهم می کنند؛ کافیست بسته را دانلود، نصب و سرویس ها را فعال کنید. سپس یک پوشهٔ جدید (مثلاً my‑project) در مسیر htdocs یا معادل آن ایجاد کنید تا به عنوان ریشهٔ وب سایت عمل کند.

پس از راه اندازی سرور، آخرین نسخهٔ وردپرس را از wordpress.org دریافت و در پوشهٔ پروژه استخراج کنید. فایل wp-config-sample.php را به wp-config.php تغییر نام داده و مقادیر DB_NAME، DB_USER و DB_PASSWORD را با داده های پایگاه دادهٔ محلی تان تنظیم کنید. اگر می خواهید خطاها را به صورت واضح ببینید، خط define('WP_DEBUG', false); را به true تغییر دهید؛ این کار باعث نمایش پیام های هشدار و خطا در مرورگر می شود.

یک ویرایشگر کد مناسب مثل Visual Studio Code یا PhpStorm به سرعت به شما کمک می کند تا فایل های قالب و افزونه را ویرایش کنید. نصب افزونهٔ Debug Bar یا Query Monitor می تواند در حین توسعه، کوئری های دیتابیس و زمان گیری عملکرد را به صورت زنده نمایش دهد. همچنین توصیه می شود یک مخزن Git برای پروژه راه اندازی کنید؛ این کار امکان بازگشت به نسخه های قبلی، کار گروهی و مستندسازی تغییرات را فراهم می کند.

ابزارنقشنکتهٔ کلیدی
Local by Flywheelسرور محلی سریعیک‑کلیک برای ایجاد سایت جدید
Visual Studio Codeویرایشگر کدپلاگین های PHP Intellisense و WordPress Snippets
Gitکنترل نسخهایجاد شاخه برای هر نوع پست سفارشی
Debug Barابزار دیباگنمایش خطاهای PHP و کوئری های SQL

در نهایت، برای اطمینان از اینکه محیط توسعه تان به روز است، افزونه های مهم (مانند Classic Editor یا هر افزونهٔ مرتبط با نوع پست سفارشی) را نصب و فعال کنید. یک بار دیگر WP_DEBUG را فعال بگذارید و به صورت مداوم لاگ های debug.log را بررسی کنید تا از بروز خطاهای ناخواسته جلوگیری شود. این تنظیمات پایه ای، بستر محکمی برای نوشتن کدهای ثبت نوع پست سفارشی فراهم می کند.

افزودن کد ثبت نوع نوشته

اولین گام برای ، انتخاب مکان مناسب است. ساده ترین روش قرار دادن کد در فایل functions.php قالب فعال است، اما اگر قصد دارید تغییرات تان در هنگام بروزرسانی قالب از بین نرود، بهتر است یک افزونه سفارشی (site‑specific plugin) بسازید و کد را در آن قرار دهید.

در هر دو حالت، برای تعریف نوع نوشته جدید از تابع اصلی register_post_type() استفاده می کنیم. این تابع دو آرگومان می گیرد: شناسهٔ داخلی (slug) که باید به صورت حروف کوچک و بدون فاصله باشد، و یک آرایهٔ تنظیمات که شامل برچسب ها، قابلیت نمایش و ویژگی های دیگر است. مهم ترین کلیدهای این آرایه عبارتند از label، public، has_archive و supports. هر یک از این کلیدها نقش خاصی در رفتار نوع نوشته در پنل مدیریت و در سمت کاربر دارد.

در ادامه یک مثال کامل می آوریم که یک نوع نوشتهٔ «کتاب» (book) را ثبت می کند. می توانید این کد را مستقیماً در functions.php یا داخل افزونهٔ خود قرار دهید:

CODE
function mytheme_register_book_cpt() {
    $args = array(
        'label'         => __('کتاب ها', 'textdomain'),
        'public'        => true,
        'has_archive'   => true,
        'rewrite'       => array('slug' => 'books'),
        'supports'      => array('title', 'editor', 'thumbnail', 'excerpt', 'custom-fields'),
        'show_in_rest'  => true, // برای سازگاری با Gutenberg
    );
    register_post_type('book', $args);
}
add_action('init', 'mytheme_register_book_cpt');

برای روشن شدن نقش هر کلید، جدول زیر خلاصه ای از مهم ترین پارامترها را ارائه می دهد:

پارامترشرح مختصرمقدار پیشنهادی
labelنام نمایشی در منوهای مدیریت«کتاب ها»
publicدسترس پذیری برای بازدیدکنندگان سایتtrue
has_archiveآیا آرشیو برای این نوع نوشته ایجاد شودtrue
supportsامکان استفاده از امکانات داخلی وردپرسtitle, editor, thumbnail

بعد از افزودن کد، حتماً یک بار بازنشانی قواعد بازنویسی (permalinks) را انجام دهید؛ برای این کار به Settings → Permalinks رفته و بدون تغییر تنظیمات، دکمهٔ «Save Changes» را بزنید. این کار اطمینان می دهد که URLهای جدید برای نوع نوشتهٔ شما به درستی کار می کند. اگر هنوز صفحهٔ آرشیو یا تک نوشته به درستی نمایش داده نشد، می توانید کش افزونه های کش یا سرویس های CDN را پاک سازی کنید.

استفاده از افزونه ساخت سریع

یکی از ساده ترین راه ها برای ایجاد انواع سفارشی پست در وردپرس، استفاده از افزونه های «ساخت سریع» است. این افزونه ها معمولاً رابط کاربری گرافیکی دارند که به جای نوشتن کد PHP، با پر کردن فرم های ساده می توانید نوع پست، فیلدهای متا و حتی الگوهای نمایش را تعریف کنید. برای کاربرانی که به تازگی وارد توسعهٔ وردپرس شده اند یا می خواهند بدون ریسک خطای کدنویسی، به سرعت یک نوع محتوا اضافه کنند، این روش بسیار مناسب است.

در میان افزونه های محبوب می توان به Custom Post Type UI (CPT UI) و Pods – Custom Content Types and Fields اشاره کرد. هر دو ابزار رایگان در مخزن وردپرس موجودند، اما در برخی جزئیات تفاوت دارند. CPT UI تمرکز اصلی بر تعریف انواع پست و دسته بندی ها دارد و رابط کاربری اش برای مبتدیان کاملاً واضح است؛ در حالی که Pods علاوه بر تعریف نوع پست، امکان ساخت فیلدهای سفارشی پیچیده (مانند رابطه ٔ چندبه چند) و نوشتن منطق شرطی را نیز فراهم می کند.

ویژگیCPT UIPods
ساخت نوع پستبلهبله
فیلدهای سفارشی پیشرفتهخیربله
پشتیبانی از روابط (relational)خیربله
مستندات و ویدئوهای آموزشیمتوسطقوی

برای شروع کار با هر یک از این افزونه ها، مراحل زیر را دنبال کنید:

  1. از پیشخوان وردپرس به افزونه ها → افزودن افزونه بروید و نام افزونه را جستجو کنید.
  2. دکمهٔ «نصب» و سپس «فعال سازی» را بزنید.
  3. در منوی جدیدی که افزونه اضافه می کند (مثلاً «CPT UI» یا «Pods»)، گزینهٔ «Add New» یا «Create New Type» را انتخاب کنید.
  4. نام نوع پست (مثلاً book) و برچسب های نمایشی (مانند «کتاب ها») را وارد کنید، سپس تنظیمات مورد نیاز مثل پشتیبانی از ویرایشگر گوتنبرگ یا تصویر شاخص را فعال کنید.
  5. در صورتی که به فیلدهای متا نیاز دارید، در قسمت «Fields» یک فیلد جدید اضافه کنید؛ برای مثال فیلد «نویسنده» را به صورت متن ساده یا فیلد «سال انتشار» را به صورت عددی تعریف کنید.

نکتهٔ مهم این است که پس از ایجاد نوع پست جدید، باید قالب های نمایش (template) مربوط به آن را یا در قالب فعلی خود یا با استفاده از قالب ساز (مانند Elementor) تنظیم کنید؛ در غیر این صورت وردپرس از قالب پیش فرض برای نمایش محتوا استفاده می کند. اگر می خواهید برای مثال صفحهٔ تک کتاب یک طرح اختصاصی داشته باشید، می توانید فایلی به نام single-book.php در پوشهٔ قالب بسازید و از توابع the_title()، the_content() و get_post_meta() برای نمایش فیلدهای سفارشی استفاده کنید.

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

بهینه سازی نمایش و مدیریت محتوا

وقتی یک نوع پست سفارشی (CPT) می سازید، هدف نهایی این است که هم برای بازدیدکنندگان و هم برای مدیران سایت نمایش بهینه ای داشته باشد. برای این کار، اولین قدم تنظیم پارامترهای register_post_type است؛ به ویژه گزینه های has_archive (ساخت آرشیو عمومی)، rewrite (ساخت URL خوانا) و show_in_rest (فعال سازی REST API برای ادیتر گوتنبرگ). این تنظیمات پایه ای، مسیر درست برای قالب های سفارشی و ابزارهای مدیریت محتوا را باز می کنند.

برای نمایش در بخش عمومی، دو قالب اصلی نیاز است: archive‑{post_type}.php و single‑{post_type}.php. در قالب آرشیو می توانید از حلقهٔ WP_Query با پارامتر post_type استفاده کنید و فیلدهای متا (مانند قیمت یا تاریخ برگزاری) را با get_post_meta() استخراج کنید. در قالب تک پست، از توابع شرطی مثل is_singular() برای بارگذاری اسکریپت ها یا استایل های خاص استفاده کنید؛ به عنوان مثال، برای یک CPT محصول، می توانید قیمت را داخل یک برجسته کنید:

قیمت: ۲۵۰,۰۰۰ تومان

در بخش مدیریت، افزودن ستون های سفارشی به جدول لیست پست ها تجربهٔ ویرایش را به طور چشمگیری بهبود می بخشد. می توانید با هوک های manage_{post_type}_posts_columns و manage_{post_type}_posts_custom_column یک ستون «قیمت» یا «وضعیت انتشار» اضافه کنید و حتی قابلیت Quick Edit را فعال کنید. برای فیلدهای پیشرفته تر، استفاده از add_meta_box() یا register_meta_box_cb اجازه می دهد فرم های ورود دادهٔ مخصوص را در صفحهٔ ویرایش پست نمایش دهید. یک مثال کوتاه:

  1. در functions.php، هوک add_meta_boxes را اضافه کنید.
  2. در تابع متاباکس، فیلدهای قیمت و موجودی را با input type="text" رندر کنید.
  3. در save_post، مقادیر را با sanitize_text_field() پاک سازی و ذخیره کنید.

برای حفظ سرعت سایت، سعی کنید کوئری های سنگین را با transients کش کنید و از meta_query های پیچیده خودداری کنید. در جدول زیر، دو تنظیم مهم برای مقایسه شده اند:

بخشتنظیم پیشنهادیتأثیر
قالب سازیاستفاده از archive‑{post_type}.php و single‑{post_type}.phpقابلیت کنترل کامل نمایش در سایت
پنل مدیریتستون های سفارشی + Quick Editسرعت و دقت ویرایش محتوا
عملکردکش کردن نتایج با set_transient()کاهش بار سرور و زمان بارگذاری

سوالات متداول

چگونه می توانم یک Custom Post Type جدید بدون افزونه بسازم؟

ابتدا در فایل functions.php قالب یا افزونهٔ سفارشی خود، تابع register_post_type را فراخوانی کنید. سپس آرایه ای از پارامترهای ضروری مانند label، public و supports را تنظیم کنید. پس از افزودن کد، برای فعال شدن ساختار لینک ها به بخش Settings > Permalinks رفته و تنظیمات را ذخیره کنید.

آیا می توانم فیلدهای متا برای CPT را به صورت خودکار اضافه کنم؟

برای افزودن فیلدهای متا می توانید از تابع register_meta استفاده کنید تا داده ها به صورت امن ذخیره شوند. اگر می خواهید رابط کاربری داشته باشید، با add_meta_box یک جعبهٔ سفارشی در صفحه ویرایش CPT اضافه کنید. در هر دو حالت، داده ها را با استفاده از sanitize_text_field قبل از ذخیره سازی پاک سازی کنید.

چطور CPT را در منوی مدیریت به صورت درختی نمایش دهم؟

در آرایهٔ پارامترهای register_post_type گزینه hierarchical را بر روی true تنظیم کنید. سپس با استفاده از show_in_menu مسیر منو را تعیین کنید؛ می توانید یک منوی والد سفارشی ایجاد کنید و CPT را به عنوان زیرمجموعهٔ آن اضافه کنید. این کار باعث می شود ساختار منو شبیه به صفحات سلسله مراتبی باشد.

آیا می توانم یک CPT را فقط برای کاربران خاص قابل دسترسی کنم؟

برای محدود کردن دسترسی، capability_type را به یک نقش سفارشی تغییر دهید و در بخش map_meta_cap قابلیت های مورد نیاز را تعریف کنید. سپس با افزودن نقش جدید به کاربران هدف، فقط آن ها می توانند CPT را ببینند یا ویرایش کنند. می توانید این نقش را با تابع add_role یا افزونهٔ کاربران مدیریت کنید.

چک لیست سریع

  • مفهوم نوع نوشته سفارشی را به خوبی درک کنید.
  • محیط توسعه وردپرس را به صورت محلی یا staging آماده کنید.
  • کد ثبت نوع نوشته را در فایل functions.php یا افزونه اختصاصی اضافه کنید.
  • از افزونه های ساخت سریع برای تست و تولید سریع استفاده کنید.
  • قالب و متادیتاهای نمایش را برای سئو و کاربری بهینه سازی کنید.
  • سطوح دسترسی و قابلیت های مدیریت محتوا را تنظیم کنید.
  • پس از ایجاد، عملکرد در پیش نمایش و پنل ادمین را بررسی کنید.

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


نوشته‌شده و بازبینی‌شده توسط

متخصص سئو، وردپرس و تولید محتوا

اولین نفری باش که نظر می‌ده!

فقط نام لازم است، ایمیل اختیاریه و منتشر نمی‌شه.