ساخت سبد خرید مشابه ووکامرس برای پست تایپ اختصاصی

تاریخ: 06 آبان 1400

ووکامرس به صورت پیشفرض پست تایپ product را ایجاد می کند و بواسطه آن بخش هایی مانند سبد خرید، تصفیه حساب، محصول، سفارشات، کدهای تخفیف و … را اجرا می کند.

ولی اگر بخواهیم ووکامرس را برای یک پست تایپ اختصاصی قرار دهیم، کار یک مقدار دشوار می شود (البته شدنی است).

در این مقاله قصد داریم سبد خرید و فرآیند های افزودن، نمایش، بروزرسانی و … مشابه ووکامرس را برای یک پست تایپ اختصاصی بازنویسی کنیم.

قدم اول: ساختن بیس افزونه با wppb

wppb یک boilerplate استاندارد oop برای توسعه پلاگین می باشد که می تواند پروژه های ساده تا متوسط را ساپورت کند.

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

ساختن بیس افزونه با wppb

ساختن بیس افزونه با wppb

ما برای این پروژه از پیشوند cfc برای نامگذاری استفاده می کنیم. لذا در همه جای مقاله از آن استفاده می شود.

 

قدم دوم: ایجاد پست تایپ اختصاصی خودرو با نامک car

برای ساختن پست تایپ اختصاصی باید از هوک init و متد register_post_type استفاده کنید.

ما پست تایپ خودرو با نامک car را برای این مقاله در نظر گرفته ایم.

به کلاس Cfc در فولدر Includes افزونه بروید و هوک init را در متد define_admin_hooks فعال کنید.


private function define_admin_hooks() {

  $plugin_admin = new Cfc_Admin( $this->get_plugin_name(), $this->get_version() );

  $this->loader->add_action( 'admin_enqueue_scripts', $plugin_admin, 'enqueue_styles' );
  $this->loader->add_action( 'admin_enqueue_scripts', $plugin_admin, 'enqueue_scripts' );

  $this->loader->add_action( 'init', $plugin_admin, 'init' );
}

 

اکنون به کلاس Cfc_Admin در فولدر admin بروید و متد init را ایجاد نمایید و دستورات ساخت پست تایپ را وارد نمایید.

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


$labels = array(
  'name' => _x( 'Car', 'Post Type General Name', 'text_domain' ),
  'singular_name' => _x( 'Car', 'Post Type Singular Name', 'text_domain' ),
  'menu_name' => __( 'Cars', 'text_domain' ),
  'name_admin_bar' => __( 'Car', 'text_domain' ),
  'archives' => __( 'Item Archives', 'text_domain' ),
  'attributes' => __( 'Item Attributes', 'text_domain' ),
  'parent_item_colon' => __( 'Parent Item:', 'text_domain' ),
  'all_items' => __( 'All Items', 'text_domain' ),
  'add_new_item' => __( 'Add New Item', 'text_domain' ),
  'add_new' => __( 'Add New', 'text_domain' ),
  'new_item' => __( 'New Item', 'text_domain' ),
  'edit_item' => __( 'Edit Item', 'text_domain' ),
  'update_item' => __( 'Update Item', 'text_domain' ),
  'view_item' => __( 'View Item', 'text_domain' ),
  'view_items' => __( 'View Items', 'text_domain' ),
  'search_items' => __( 'Search Item', 'text_domain' ),
  'not_found' => __( 'Not found', 'text_domain' ),
  'not_found_in_trash' => __( 'Not found in Trash', 'text_domain' ),
  'featured_image' => __( 'Featured Image', 'text_domain' ),
  'set_featured_image' => __( 'Set featured image', 'text_domain' ),
  'remove_featured_image' => __( 'Remove featured image', 'text_domain' ),
  'use_featured_image' => __( 'Use as featured image', 'text_domain' ),
  'insert_into_item' => __( 'Insert into item', 'text_domain' ),
  'uploaded_to_this_item' => __( 'Uploaded to this item', 'text_domain' ),
  'items_list' => __( 'Items list', 'text_domain' ),
  'items_list_navigation' => __( 'Items list navigation', 'text_domain' ),
  'filter_items_list' => __( 'Filter items list', 'text_domain' ),
);
$args = array(
  'label' => __( 'Car', 'text_domain' ),
  'description' => __( 'Car Description', 'text_domain' ),
  'labels' => $labels,
  'supports' => array('title', 'editor', 'thumbnail', 'custom-fields'),
  'taxonomies' => array( 'category', 'post_tag' ),
  'hierarchical' => false,
  'public' => true,
  'show_ui' => true,
  'show_in_menu' => true,
  'menu_position' => 5,
  'show_in_admin_bar' => true,
  'show_in_nav_menus' => true,
  'can_export' => true,
  'has_archive' => true,
  'exclude_from_search' => false,
  'publicly_queryable' => true,
  'capability_type' => 'page',
);
register_post_type( 'car', $args );

 

اکنون اگر وارد پنل مدیریت خود شوید، مشاهده می کنید که پست تایپ car ایجاد شده است.

دریافت فایل افزونه تا انتهای قدم دوم

 

قدم سوم: ایجاد متای قیمت خودرو برای پست تایپ car

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

به همین دلیل باید یک متا دیتای قیمت برای خودرو در نظر بگیریم.

ما از متاباکس custom-fields دیفالت وردپرس استفاده می کنیم.

برای ایجاد کلید پیشفرض قیمت از فیلتر postmeta_form_keys استفاده می کنیم.

این فیلتر را در کلاس Cfc و بخش هوک های ادمین فعال می کنیم


private function define_admin_hooks() {

$plugin_admin = new Cfc_Admin( $this->get_plugin_name(), $this->get_version() );

   $this->loader->add_action( 'admin_enqueue_scripts', $plugin_admin, 'enqueue_styles' );
   $this->loader->add_action( 'admin_enqueue_scripts', $plugin_admin, 'enqueue_scripts' );

   $this->loader->add_action( 'init', $plugin_admin, 'init' );
   $this->loader->add_filter( 'postmeta_form_keys', $plugin_admin, 'postmeta_form_keys', 10, 2 );
}

 

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


public function postmeta_form_keys($keys, $post)
{
   if($post->post_type == 'car') {
      $keys[] = 'regular_price';
   }
   return $keys;
}

 

در این متد گفتیم که اگر پست تایپ ما car بود، یک کلید متا با نام regular_price به سلکت باکس اضافه کن تا قابل انتخاب باشد و مقدار قیمت را برای آن ست کنیم.

پس بوسیله این دستورات می توانیم قیمت را برای خودرو خود در نظر بگیریم.

 

قدم چهارم: افزودن یک خودرو جدید با توضیحات و قیمت

اکنون به منوی cars رفته و یک خودروی جدید وارد می کنیم.

عنوان آن را BMW i8 میگذاریم. یک توضیح کوتاه برای آن قرار می دهیم و سپس از قسمت custom-fields، متای regular price را ایجاد می کنیم و قیمت فرضی 90 هزار را در آن قرار می دهیم.

افزودن یک خودرو جدید با توضیحات و قیمت

افزودن یک خودرو جدید با توضیحات و قیمت

اکنون این خودرو را منتشر می کنیم و با استفاده از لینک ایجاد شده، به صفحه آن می رویم.

 

دیدگاهتان را بنویسید

طراحی افزونه وردپرس