سایر بخش های سری آموزشی " ایجاد افزونه وردپرس "

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

 

اضافه کردن پست تایپ

برای ایجاد پست تایپ جدید می توانید از تابع register_post_type() استفاده کنید. به مثال زیر توجه کنید:

add_action( 'init', 'create_post_type' );
//Registers the Product's post type
function create_post_type() {
    register_post_type( 'acme_product',
        array(
            'labels' => array(
                'name' => __( 'محصولات' ),
                'singular_name' => __( 'محصول' )
            ),
        'public' => true,
        'has_archive' => true,
        )
    );
}

کدهای فوق یک پست تایپ جدید برای محصولات اضافه می کنند. آرگومان هایی که در اینجا برای این تابع استفاده شد:

  • labels – نام پست تایپ در حالت جمعی و تکی را مشخص می کند.
  • public – فعال کردن قابلیت نمایش پست تایپ در سایت و پیشخوان مدیریت وردپرس.
  • has_archive – مشخص می کند که محتوای پست تایپ می تواند آرشیو داشته باشد.

توجه: تابع register_post_type() را باید قبل از هوک های admin_menu و بعد از after_setup_theme استفاده کنید.

 

تمرین برای انتخاب نام

انتخاب نام برای پست تایپ ها بسیار مهم است. برای مثال در کدهای بالا ما از acme_product استفاده کردیم. کلمه acme پیشوندی است که باعث می شود تا امکان تداخل نامی به وجود نیاید. به عبارتی اگر بخواهید از کلمه عام مانند product استفاده کنید، آن موقع این احتمال وجود دارد که این نام به دلیل به کار گیری در افزونه های دیگر دچار مشکل تداخل شود.

چند نکته:

  • برای پیشوند از wp_ استفاده نکنید. ممکن است این نام در آینده توسط خود فایل های هسته وردپرس به کار گرفته شود.
  • تعداد کاراکترهای نام پست تایپ از ۲۰ بیشتر نشود.

 

آدرس URL

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

add_action( 'init', 'create_post_type' );
//Registers the Product's post type
function create_post_type() {
    register_post_type( 'acme_product',
        array(
            'labels' => array(
                'name' => __( 'محصولات' ),
                'singular_name' => __( 'محصول' )
            ),
        'public' => true,
        'has_archive' => true,
	'rewrite' => array('slug' => 'products'),
        )
    );
}

با بررسی کدها می توانید متوجه شود که تنها دستور زیر اضافه شده است:

‘rewrite’ => array(‘slug’ => ‘products’),

در نهایت نتیجه کار به حالت زیر درخواهد آمد:

https://example.com/products/%product_name%