تعداد بازدید: 1719

Product Type در ووکامرس

در ووکامرس مفهومی با هویت Taxonomy با نام product_type داریم که term های متفاوتی را دارا می باشد به طور مثال simple , grouped , external , variable که term های پیش فرض به ازای taxonomy با نام product_type می باشند.

taxonomy از نوع product_type برای post type با نام product فعال می باشد. که به صورت پیش فرض نه در منوی وردپرس نمایش داده می شود و نه قالبی در وبسایت دارد (show_ui = false).

در ووکامرس ما یک سری product type پیش فرض داریم که به ازای هر یک از آن ها یک سری تنظیمات را خواهیم داشت :

  • Simple Product : محصول ساده یا پیش فرض
    • Virtual Product : این نوع همراه با محصول ساده می باشد که نیاز به حمل و نقل ندارد.
    • Downloadable Product : برای محصولات ساده فعال می باشد و قابلیت افزودن فایل را اضافه می کند.
  • Grouped Product : محصول گروهی
  • External Product : محصول خارجی
  • Variable Product : محصول متغیر (با استفاده از ویژگی های محصول)

همچنین ما می توانیم custom product type خود را اضافه کنیم و یه سری تنظیمات خاص هم براش در نظر بگیریم. ویژگی های دانلودی و مجازی هم می توانند برای custome product type ما فعال باشند.

در سمت Front End نیز می توان template خاص به ازای هر قسمت از custom product type در نظر گرفت. به طور مثال صفحه داخلی مجزا.

Custom Product Type

برای تنها افزودن یک product type باید سه مرحله انجام دهیم.

  • افزودن به لیست Drop Down ‌Box
  • ساخت کلاس مدل آن از روی WC_Product .
  • load کردن کلاس ساخته شده.
// #1 Add New Product Type to Select Dropdown 
add_filter( 'product_type_selector', 'rngwc_add_custom_pt' );
function rngwc_add_custom_pt( $types ){
    $types[ 'software' ] = __('SoftWare');
    return $types;
}
// #2 Add New Product Type Class
add_action( 'init', 'rngwc_create_custom_pt' );
function rngwc_create_custom_pt(){
    class WC_Product_Software extends WC_Product {
        public function get_type() {
            return 'software';
        }
    }
}
// #3 Load New Product Type Class
add_filter( 'woocommerce_product_class', 'rngwc_woocommerce_pt', 10, 2 );
function rngwc_woocommerce_pt( $classname, $product_type ) {
    if ( $product_type == 'software' ) { 
        $classname = 'WC_Product_Software';
    }
    return $classname;
}

با استفاده از توابع بالا ما Custom Product Type را با نام software را به ووکامرس اضافه کردیم. در ادامه می خواهیم تا تنظیماتی را روی این نوع محصول پیاده سازی کنیم. این نام software در زمان Product Data Tab and Options و Define Product Data Tab مورد استفاده قرار می گیرد.

Product Data Tab and Options

ویژگی های محصولات بر اساس product type کلاس های متفاوتی می گیرند. این ویژگی ها شامل تب های سمت راست (همگانی ، حمل و نقل ، محصولات مرتبط ، …) و دو چک باکس بالا (دانلودی و مجازی) می باشند.

دو css class به صورت کلی برای این المان ها در نظر گرفته شده است :

  • show_if_{product_type} : نمایش به ازای فعال بودن product type خاص . مثلا برای مورد ما می شود show_if_software
  • hide_if_{product_tpe} : به ازای product type خاص مخفی می شود. مثلا hide_if_grouped یعنی غیر فعال به ازای محصول از نوع گروهی

با استفاده از همین قالب تب ها و تنظیمات نوع محصول مخفی و نمایش داده می شوند. پس شما می توانید با استفاده از هر یک از کلاس های مربوط را با استفاده از فیلتر woocommerce_product_data_tabs به تب ها کلاس اضافه یا کم کنید و همچنین با استفاده از قلاب product_type_options آپشن های دانلودی و مجازی را با استفاده از قالب کلاسی که تعریف کردیم فعال و غیر فعال کنید.

//Set options Custom Product Type
function rngwc_custom_product_type_options($options) {
    $options['downloadable']['wrapper_class'] = 'show_if_simple show_if_software';
    $options['virtual']['wrapper_class'] = 'show_if_simple show_if_software';
    return $options;
}
add_action('product_type_options', 'rngwc_custom_product_type_options');

//Add Class to Product data tabs
function rngwc_custom_product_data_tabs($tabs) {
    array_push($tabs['attribute']['class'], 'hide_if_software');
    return $tabs;
}
add_filter('woocommerce_product_data_tabs', 'rngwc_custom_product_data_tabs');

نکته مهم : هر یک از قسمت های مربوط به اطلاعات محصول قلاب یا فیلتر مربوط به خود را دارند. همچنین در صورتی که قلاب یا فیلتر وجود نداشت می توانید با استفاده از jQuery نیز کلاس هایی به آن ها اضافه کنید.

function rngwc_custom_js() {
    ?>
    <script type='text/javascript'>
        jQuery('.options_group.pricing').addClass('show_if_software');
    </script>
    <?php
}
add_action('admin_footer','rngwc_custom_js');

به طور مثال برای نمایش فیلد های قیمت برای نوع محصول با نام software کد بالا مناسب است.

Define Product Data Tab

ما می توانیم تنظیمات custom product type خود را به لیست تب های موجود اضافه کنیم و همچنین تب جدید خود را تعریف کنیم.ابتدا با استفاده از فیلتر woocommerce_product_data_tabs تب جدید خود را اضافه می کنیم.

function rngwc_product_type_settings($tabs) {
    $tabs['software'] = array(
        'label' => "اطلاعات نرم افزار",
        'target' => 'software_options',
        'class' => array('show_if_software'),
        'priority' => '100'
    );
    return $tabs;
}
add_filter('woocommerce_product_data_tabs', 'rngwc_product_type_settings');

تب با برچسب اطلاعات نرم افزار اضافه می شود. همان طور که ما زمانی که jQuery Tab می سازیم ابتدا باید tab-list را اضافه کنیم و بعد لیست content-tab را اضافه کنیم. اگر چند تب داشته باشید می توانید زیر هم تب ها و همچنین محتوای آن ها را اضافه کنید.

function rngwc_papulate_product_type_settings() {
    ?>
    <div id='software_options' class='panel woocommerce_options_panel'>
        <div class='options_group show_if_software'>
            <?php
            woocommerce_wp_text_input(array(
                'id' => 'rngwc_software_intro_video_src',
                'label' => 'لینک ویدیو',
                'style' => 'direction:ltr;text-align:left;',
                'placeholder' => '',
                'desc_tip' => 'true',
                'description' => 'لینک ویدیو معرفی نرم افزار با فرمت *.mp4',
            ));
            ?>
        </div>
    </div>
    <?php
}
add_action("woocommerce_product_data_panels", "rngwc_papulate_product_type_settings");

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

  • .show_if_software : این کلاس باعث می شود که در زمان فعال بودن product type با نام software فعال باشد.
  • #software_options : این شناسه تعیین می کند که محتوا مربوط به تب با target = software_options می باشد. در زمان تعریف تب ما موردی با نام target برای آن تعریف کردیم.

برای ساخت ورودی در تب های اطلاعات محصول از توابع زیر استفاده می کنیم :

برای ذخیره سازی و نمایش ورودی هایی که با استفاده از توابع بالا ساخته شده اند باید woocommerce_process_product_meta قلاب کنید. برای مثال ما اینگونه می باشد.

//get meta data as array and save post meta if not empty
function rngwc_bulk_update_metadata($array, $post_id) {
    foreach ($array as $key => $value) {
        if (!empty($value)) {
            update_post_meta($post_id, $key, $value);
        }
    }
}

//update new product type meta data
function rngwc_update_product_meta($post_id) {
    //--------software metadata
    $software_metadata = array(
        'rngwc_software_intro_video_src' => $_POST['rngwc_software_intro_video_src']
    );
    rngwc_bulk_update_metadata($software_metadata, $post_id);
}

add_action("woocommerce_process_product_meta", "rngwc_update_product_meta");

ساختار کد بالا به گونه ای عمل می کند که یک تابع تعریف می کنیم که متا ها را به صورت آرایه ای می گیرد و ذخیره می کند. از این تابع در ذخیره سازی اطلاعات custom product type خودمان استفاده می کنیم. این الگوریتم برای زمانی که تعداد meta data زیاد می باشد کاربردی است. و الا تنها قلاب و تابع عملیات ذخیره سازی را انجام می دهد.

load اطلاعات ورودی ها در زمان ویرایش محصول در صورتی که از توابع موجود برای تولید ورودی استفاده کرده باشید و همچنین مقداری ورودی را دقیق وارد کرده باشید به صورت خودکار انجام می شود. مثلا برای ورودی مثال ما rngwc_software_intro_video_src را جستجو کنید که کجا ها استفاده شده است.

اضافه کردن تنظیمات به default tab-content

برای این که بخواهید به لیست تب های پیش فرض ووکامرس ورودی اضافه کنید باید یک تابع بنویسیم و به woocommerce_product_options_{TABNAME}_product_data قلاب بزنید که TABNAME می تواند یکی از موارد general , inventory , shipping , linked_productیا … باشد که با استفاده از کد ها می توانید آن را پیدا کنید.

لیست قلاب هایی که می توان با استفاده از آن ها تنظیمات به محتوای تب های پیش فرض اضافه کرد را در زیر می بینید :

  • woocommerce_product_options_general_product_data
  • woocommerce_product_options_inventory_product_data
  • woocommerce_product_options_shipping
  • woocommerce_product_options_related
  • woocommerce_product_options_advanced

البته این نکته روال کلی اضافه کردن ورودی به لیست tab-content های موجود در محصول می باشد ولی با استفاده از الگوریتم کلاس بندی که گفتیم می توانید آن ها را به ازای product type خاص خود مخفی یا نمایش دهید.

function rngwc_setting_gift_product() {
    woocommerce_wp_text_input(
            array(
                'id' => 'rngwc_identifier',
                'label' => __('label'),
                'placeholder' => '',
                'description' => __('description'),
                'type' => 'text',
                'custom_attributes' => array()
            )
    );
}
add_action("woocommerce_product_options_advanced", "rngwc_setting_gift_product");

ذخیره سازی ورودی های ایجاد شده با استفاده از قلاب woocommerce_process_product_meta نباید فراموش گردد.

 

مطالب مشابه

Settings API در ووکامرس

ما برای ساخت پنل تنظیمات برای افزونه ها از api خود وردپرس استفاده می کردیم. حال این که افزونه مکمل برای ووکامرس می...

آموزش نکات و تکنیک های برنامه نویسی وردپرس

Settings API در وردپرس

وردپرس برای ساخت پنل تنظیمات شبیه به پنل تنظیمات پیش فرض خودش API هایی رو قرار داده . Settings API , Options API دو...

آموزش نکات و تکنیک های برنامه نویسی وردپرس

Administration Menus در وردپرس

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

اشتراک گذاری :

مدیر وب سایت گنوتک . برنامه نویسی رو با زبان C در هفده سالگی شروع کردم . در حال حاضر به برنامه نویسی php برپایه معماری MVC , HMVC و همچنین سیستم مدیریت محتوای WordPress و فریم ورک محبوب لاراول علاقه مند هستم و دوست دارم اطلاعاتم رو با شما به اشتراک بگذارم.

۰ دیدگاه برای Product Type در ووکامرس

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

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *