پاسارگاد
مدیر سایت
وقتی در حال کار بر روی یک راه حل پیچیده و سفارشی با استفاده از WooCommerce هستید ، این احتمال وجود دارد که نیاز داشته باشید تا نوع محصول ووکامرس خود را ایجاد کنید. در این آموزش ، ما یاد خواهیم گرفت که چگونه این کار را انجام دهیم.
ایجاد یک نوع محصول سفارشی WooCommerce می تواند یک روش عالی برای کنترل دقیق تر انواع محصولات و نحوه فروش آنها (یا آنچه که ارائه می دهند) باشد.
انواع محصولات می توانند موارد مختلفی مانند رزرو ، اشتراک ، بلیط یا موارد کاملاً متفاوت باشند. اگر می خواهید نحوه ساخت نوع محصول پیشرفته را بیاموزید ، از شما دعوت می کنم برخی از انواع محصولات محبوب ترین افزونه های WooCommerce مانند اشتراک های WooCommerce یا WooCommerce Bookings را بخوانید.
ایجاد یک نوع محصول سفارشی ووکامرسدر این آموزش ، ما یک نوع محصول پیشرفته ایجاد خواهیم کرد تا به شما نشان دهیم چگونه می توانید قیمت های فعلی را نشان دهید ، قیمت های سفارشی را فعال کنید و همچنین یک پنل متفاوت برای آن اضافه کنید.
نحوه ایجاد نوع محصول سفارشی WooCommerce :
کلاس جدید WooCommerce Type Type را تعریف کنید.
نوع را به فیلتر نوع محصول WooCommerce اضافه کنید
نوع را به عنوان طبقه بندی نوع محصول اضافه کنید
روشهای رفکتور
افزودن تنظیمات جدید
ذخیره کردن تنظیمات جدید
این مراحل اساسی است و موارد بسیاری وجود دارد که احتمالا با کدگذاری آنها خواهید فهمید. سعی می کنم با کد اسکلتی که در اینجا ایجاد خواهیم کرد ، چند ساعت در شما صرفه جویی کنم.
قبل از شروع کدگذاری ، به wp-content / plugins بروید و یک پوشه از wc-product-type ایجاد کنید و در داخل آن این را ایجاد کنید:
فایل wc-product-type.php
فولدر includes
فایل includes/class-wc-product-advanced.php
1- نوع محصول WooCommerce را تعریف کنید:
قبل از حتی کدگذاری ، باید تعیین کنید نوع محصول شما چه کاری انجام می دهد. این امر به شما کمک می کند تا تصمیم بگیرید کدام نوع محصول را گسترش دهید. اگر کلاس کاملا متفاوتی باشد ممکن است کلاس انتزاعی را گسترش دهید.
نوع محصول پیشرفته ما ساده خواهد بود. این یک قیمت گذاری پیشرفته برای مدیران یا هر کاربری که می تواند گزینه ها را مدیریت کند فراهم می کند. بنابراین ، ما همچنین باید گزینه تغییر قیمت عادی را برای دیگران فراهم کنیم.
با در نظر گرفتن این موضوع ، می توانیم نوع محصول ووکامرس خود را در بالای نوع محصول Simple کد کنیم.
کد زیر را در فایل wc-product-type.php وارد کنید:
توجه: فعال سازی افزونه را فراموش نکنید تا بتوانید تغییرات را مشاهده کنید.
اکنون ، پرونده دیگر includes/class-wc-product-advanced.php را باز کنید و قطعه کد زیر را وارد کنید:
به این ترتیب ، ما از همه فیلترها فرار می کنیم و قیمت را برای اعضا عودت می دهیم. اکنون که نوع محصول خود را داریم ، بیایید آن را با WooCommerce متصل کنیم.
2- افزودن نوع محصول در لیست کشویی
ما باید انواع محصولات موجود ووکامرس را فیلتر کرده و محصولات خود را اضافه کنیم. به این ترتیب کاربر می تواند نوع محصول ما را انتخاب کند.
بیایید اکنون این مورد را به پرونده پلاگین اصلی خود اضافه کنیم:
WooCommerce ، بیشتر اوقات ، نوع کالایی را روی اولین محصولی که قرار است به عنوان آن نوع محصول ذخیره شود ، ایجاد می کند. اما اگر بخواهیم آن را در ابتدا در دسترس قرار دهیم ، می توانیم هنگام فعال شدن افزونه این کار را انجام دهیم.
برای افزودن قیمت گذاری جدید ، آن را به برگه عمومی ، در زیر گزینه های دیگر قیمت گذاری می کنیم.
اکنون ما در اینجا مسئله ای داریم که قیمت گذاری ما نشان داده نمی شود.
خوب ، اینجا چه مشکلی وجود دارد؟ WooCommerce از JavaScript برای نمایش مشروط برگه ها و محتوا استفاده می کند. در صورت وجود options_group که show_if_ad Advanced وجود دارد ، تب General نشان داده می شود. بیایید یک عنصر خالی به صفحه تب General اضافه کنیم.
اما ما هنوز یک مسئله داریم. اکنون ، تب General در حال نمایش است اما گزینه های قیمت گذاری نشان داده نمی شوند. چرا؟ زیرا گزینه های قیمت گذاری عادی فقط در صورت انتخاب نوع محصول ساده نشان داده می شوند. هیچ فیلتری برای نمایش آن در انواع دیگر محصولات در دسترس نیست ، بنابراین در اینجا چه کاری می توانیم انجام دهیم؟ ما دو گزینه داریم:
قیمت گذاری را با JavaScript نشان دهید
گزینه های جدید قیمت گذاری منظم (با نام های مختلف) ایجاد کنید و از طریق جاوا اسکریپت به تغییرات گوش دهید و موارد عادی را نیز به روز کنید.
ما با اولین گزینه پیش خواهیم رفت.
نمایش گزینه های قیمت گذاری منظم برای نوع محصول سفارشی ووکامرس:
برای نشان دادن گزینه های قیمت گذاری منظم ، باید کلاس show_if_ad Advanced را به آن options_group اضافه کنیم و همچنین اگر محصول فعلی Advanced است ، آنها را بارگذاری نشان دهیم.
افزودن برگه و پنل نوع محصول:
بیایید اکنون برگه و صفحه مربوط به نوع محصول WooCommerce خود را اضافه کنیم.
تنظیمات نوع محصول WooCommerce را ذخیره کنید:
بیایید اکنون با یک فرآیند صرفه جویی در WooCommerce ارتباط برقرار کنیم تا بتوانیم داده های خاص نوع محصول WooCommerce را ذخیره کنیم.
WooCommerce برای پردازش داده های خاص برای یک نوع محصول از تابع woocommerce_process_product_product_meta_ {PRODUCT_TYPE} استفاده می کند.
با استفاده ازبرنامه نویسی شی گرایی و مفهوم ارث بری، می توانید از اکثر کدی که قبلا در انواع دیگر محصولات نوشته شده است صرف نظر کنید و فقط بر روی قسمت های خاص نوع محصول خود تمرکز کنید.
ایجاد یک نوع محصول سفارشی ووکامرسچنان چه نسبت به محتوای این پست آموزشی پرسشی دارید یا در مورد فروشگاه ووکامرس خود نیاز به دریافت راهنمایی و مشاوره دارید، می توانید هم اکنون در ناحیه کاربری ثبت نام کرده ، اطلاعات سایت را تیکت کنید و از دانش و تخصص کارشناسان ما در وب سایت ووکامرس ایرانی، بهره بگیرید.
ایجاد یک نوع محصول سفارشی WooCommerce می تواند یک روش عالی برای کنترل دقیق تر انواع محصولات و نحوه فروش آنها (یا آنچه که ارائه می دهند) باشد.
انواع محصولات می توانند موارد مختلفی مانند رزرو ، اشتراک ، بلیط یا موارد کاملاً متفاوت باشند. اگر می خواهید نحوه ساخت نوع محصول پیشرفته را بیاموزید ، از شما دعوت می کنم برخی از انواع محصولات محبوب ترین افزونه های WooCommerce مانند اشتراک های WooCommerce یا WooCommerce Bookings را بخوانید.
ایجاد یک نوع محصول سفارشی ووکامرسدر این آموزش ، ما یک نوع محصول پیشرفته ایجاد خواهیم کرد تا به شما نشان دهیم چگونه می توانید قیمت های فعلی را نشان دهید ، قیمت های سفارشی را فعال کنید و همچنین یک پنل متفاوت برای آن اضافه کنید.
نحوه ایجاد نوع محصول سفارشی WooCommerce :
کلاس جدید WooCommerce Type Type را تعریف کنید.
نوع را به فیلتر نوع محصول WooCommerce اضافه کنید
نوع را به عنوان طبقه بندی نوع محصول اضافه کنید
روشهای رفکتور
افزودن تنظیمات جدید
ذخیره کردن تنظیمات جدید
این مراحل اساسی است و موارد بسیاری وجود دارد که احتمالا با کدگذاری آنها خواهید فهمید. سعی می کنم با کد اسکلتی که در اینجا ایجاد خواهیم کرد ، چند ساعت در شما صرفه جویی کنم.
قبل از شروع کدگذاری ، به wp-content / plugins بروید و یک پوشه از wc-product-type ایجاد کنید و در داخل آن این را ایجاد کنید:
فایل wc-product-type.php
فولدر includes
فایل includes/class-wc-product-advanced.php
1- نوع محصول WooCommerce را تعریف کنید:
قبل از حتی کدگذاری ، باید تعیین کنید نوع محصول شما چه کاری انجام می دهد. این امر به شما کمک می کند تا تصمیم بگیرید کدام نوع محصول را گسترش دهید. اگر کلاس کاملا متفاوتی باشد ممکن است کلاس انتزاعی را گسترش دهید.
نوع محصول پیشرفته ما ساده خواهد بود. این یک قیمت گذاری پیشرفته برای مدیران یا هر کاربری که می تواند گزینه ها را مدیریت کند فراهم می کند. بنابراین ، ما همچنین باید گزینه تغییر قیمت عادی را برای دیگران فراهم کنیم.
با در نظر گرفتن این موضوع ، می توانیم نوع محصول ووکامرس خود را در بالای نوع محصول Simple کد کنیم.
کد زیر را در فایل wc-product-type.php وارد کنید:
ما پس از بارگیری WooCommerce با استفاده از عملکرد woocommerce_loaded ، تمام وابستگی های WC را بارگیری خواهیم کرد. این اطمینان می دهد که وقتی نوع محصول خود را وارد می کنیم ، انواع محصول WooCommerce قبلا وجود داشته باشد.<?php/**
* Plugin Name: WooCommerce Custom Product Type
* Description: Accompanying code for the tutorial on ibenic.com
*/
if ( ! defined( 'ABSPATH' ) ) {
return;
}
class WC_Product_Type_Plugin {
/**
* Build the instance
*/
public function __construct() {
add_action( 'woocommerce_loaded', array( $this, 'load_plugin' ) );
}
/**
* Load WC Dependencies
*
* @return void
*/
public function load_plugin() {
require_once 'includes/class-wc-product-advanced.php';
}
}
new WC_Product_Type_Plugin();
توجه: فعال سازی افزونه را فراموش نکنید تا بتوانید تغییرات را مشاهده کنید.
اکنون ، پرونده دیگر includes/class-wc-product-advanced.php را باز کنید و قطعه کد زیر را وارد کنید:
این برای هر نوع محصول ماست. ما روش get_type را برای بازگشت نوع محصول refactor می کنیم و get_price را نیز refactor می کنیم. ما می توانستیم آن را فیلتر کنیم ، اما برای هدف این آموزش ، من می خواستم به شما نشان دهم که در صورت نیاز می توانید روش های ارث بری را کاملا تغییر دهید.<?php/**
* Advanced Product Type
*/
class WC_Product_Advanced extends WC_Product_Simple {
/**
* Return the product type
* @return string
*/
public function get_type() {
return 'advanced';
}
/**
* Returns the product's active price.
*
* @param string $context What the value is for. Valid values are view and edit.
* @return string price
*/
public function get_price( $context = 'view' ) {
if ( current_user_can('manage_options') ) {
$price = $this->get_meta( '_member_price', true );
if ( is_numeric( $price ) ) {
return $price;
}
}
return $this->get_prop( 'price', $context );
}
}
به این ترتیب ، ما از همه فیلترها فرار می کنیم و قیمت را برای اعضا عودت می دهیم. اکنون که نوع محصول خود را داریم ، بیایید آن را با WooCommerce متصل کنیم.
2- افزودن نوع محصول در لیست کشویی
ما باید انواع محصولات موجود ووکامرس را فیلتر کرده و محصولات خود را اضافه کنیم. به این ترتیب کاربر می تواند نوع محصول ما را انتخاب کند.
بیایید اکنون این مورد را به پرونده پلاگین اصلی خود اضافه کنیم:
3- افزودن نوع محصول به عنوان طبقه بندی نوع محصول ووکامرس<?php// ...
class WC_Product_Type_Plugin {
/**
* Build the instance
*/
public function __construct() {
// ...
add_filter( 'product_type_selector', array( $this, 'add_type' ) );
}
/**
* Advanced Type
*
* @param array $types
* @return void
*/
public function add_type( $types ) {
$types['advanced'] = __( 'Advanced', 'yourtextdomain' );
return $types;
}
// ...
}
new WC_Product_Type_Plugin();
WooCommerce ، بیشتر اوقات ، نوع کالایی را روی اولین محصولی که قرار است به عنوان آن نوع محصول ذخیره شود ، ایجاد می کند. اما اگر بخواهیم آن را در ابتدا در دسترس قرار دهیم ، می توانیم هنگام فعال شدن افزونه این کار را انجام دهیم.
4- افزودن قیمت گذاری پیشرفته محصول<?php// ...
class WC_Product_Type_Plugin {
/**
* Build the instance
*/
public function __construct() {
// ...
register_activation_hook( __FILE__, array( $this, 'install' ) );
}
/**
* Installing on activation
*
* @return void
*/
public function install() {
// If there is no advanced product type taxonomy, add it.
if ( ! get_term_by( 'slug', 'advanced', 'product_type' ) ) {
wp_insert_term( 'advanced', 'product_type' );
}
}
// ...
}
new WC_Product_Type_Plugin();
برای افزودن قیمت گذاری جدید ، آن را به برگه عمومی ، در زیر گزینه های دیگر قیمت گذاری می کنیم.
ایجاد یک نوع محصول سفارشی ووکامرس<?php// ...
class WC_Product_Type_Plugin {
/**
* Build the instance
*/
public function __construct() {
// ...
add_action( 'woocommerce_product_options_pricing', array( $this, 'add_advanced_pricing' ) );
}
/**
* Add the pricing
* @return void
*/
public function add_advanced_pricing() {
global $product_object;
?>
<div class='options_group show_if_advanced'>
<?php
woocommerce_wp_text_input(
array(
'id' => '_member_price',
'label' => __( 'Pricing only for members', 'your_textdomain' ),
'value' => $product_object->get_meta( '_member_price', true ),
'default' => '',
'placeholder' => 'Add pricing',
'data_type' => 'price',
)
);
?>
</div>
<?php
}
// ...
}
new WC_Product_Type_Plugin();
اکنون ما در اینجا مسئله ای داریم که قیمت گذاری ما نشان داده نمی شود.
اکنون یک options_group خالی اضافه کرده ایم که هنگام استفاده از نوع محصول پیشرفته ووکامرس باید نشان داده شود.<?php// ...
class WC_Product_Type_Plugin {
/**
* Build the instance
*/
public function __construct() {
// ...
add_action( 'woocommerce_product_options_general_product_data', function(){
echo '<div class="options_group show_if_advanced clear"></div>';
} );
}
// ...
}
new WC_Product_Type_Plugin();
اما ما هنوز یک مسئله داریم. اکنون ، تب General در حال نمایش است اما گزینه های قیمت گذاری نشان داده نمی شوند. چرا؟ زیرا گزینه های قیمت گذاری عادی فقط در صورت انتخاب نوع محصول ساده نشان داده می شوند. هیچ فیلتری برای نمایش آن در انواع دیگر محصولات در دسترس نیست ، بنابراین در اینجا چه کاری می توانیم انجام دهیم؟ ما دو گزینه داریم:
قیمت گذاری را با JavaScript نشان دهید
گزینه های جدید قیمت گذاری منظم (با نام های مختلف) ایجاد کنید و از طریق جاوا اسکریپت به تغییرات گوش دهید و موارد عادی را نیز به روز کنید.
ما با اولین گزینه پیش خواهیم رفت.
نمایش گزینه های قیمت گذاری منظم برای نوع محصول سفارشی ووکامرس:
برای نشان دادن گزینه های قیمت گذاری منظم ، باید کلاس show_if_ad Advanced را به آن options_group اضافه کنیم و همچنین اگر محصول فعلی Advanced است ، آنها را بارگذاری نشان دهیم.
اکنون ، ما این مشکل را برطرف کردیم و همه گزینه های قیمت نشان داده می شوند.<?php// ...
class WC_Product_Type_Plugin {
/**
* Build the instance
*/
public function __construct() {
// ...
add_action( 'admin_footer', array( $this, 'enable_js_on_wc_product' ) );
}
public function enable_js_on_wc_product() {
global $post, $product_object;
if ( ! $post ) { return; }
if ( 'product' != $post->post_type ) :
return;
endif;
$is_advanced = $product_object && 'advanced' === $product_object->get_type() ? true : false;
?>
<script>
jQuery(document).ready(function () {
//for Price tab
jQuery('#general_product_data .pricing').addClass('show_if_advanced');
<?php if ( $is_advanced ) { ?>
jQuery('#general_product_data .pricing').show();
<?php } ?>
});
</script>
<?php
}
// ...
}
new WC_Product_Type_Plugin();
افزودن برگه و پنل نوع محصول:
بیایید اکنون برگه و صفحه مربوط به نوع محصول WooCommerce خود را اضافه کنیم.
با استفاده از این کد ، ما زبانه ای اضافه کرده ایم که فقط در صورت انتخاب نوع محصول پیشرفته نشان داده می شود. ما همچنین پانلی را که برای نمایش زمان انتخاب آن برگه فعال می شود ، اضافه کرده ایم. در ابتدا پنهان است. در غیر این صورت ، می تواند در بارگذاری اولیه صفحه نشان داده شود.<?php// ...
class WC_Product_Type_Plugin {
/**
* Build the instance
*/
public function __construct() {
// ...
add_filter( 'woocommerce_product_data_tabs', array( $this, 'add_product_tab' ), 50 );
add_action( 'woocommerce_product_data_panels', array( $this, 'add_product_tab_content' ) );
}
/**
* Add Experience Product Tab.
*
* @param array $tabs
*
* @return mixed
*/
public function add_product_tab( $tabs ) {
$tabs['advanced_type'] = array(
'label' => __( 'Advanced Type', 'your_textdomain' ),
'target' => 'advanced_type_product_options',
'class' => 'show_if_advanced',
);
return $tabs;
}
/**
* Add Content to Product Tab
*/
public function add_product_tab_content() {
global $product_object;
?>
<div id='advanced_type_product_options' class='panel woocommerce_options_panel hidden'>
<div class='options_group'>
<?php
woocommerce_wp_text_input(
array(
'id' => '_some_data',
'label' => __( 'Data', 'your_textdomain' ),
'value' => $product_object->get_meta( '_some_data', true ),
'default' => '',
'placeholder' => 'Enter data',
));
?>
</div>
</div>
<?php
}
// ...
}
new WC_Product_Type_Plugin();
تنظیمات نوع محصول WooCommerce را ذخیره کنید:
بیایید اکنون با یک فرآیند صرفه جویی در WooCommerce ارتباط برقرار کنیم تا بتوانیم داده های خاص نوع محصول WooCommerce را ذخیره کنیم.
WooCommerce برای پردازش داده های خاص برای یک نوع محصول از تابع woocommerce_process_product_product_meta_ {PRODUCT_TYPE} استفاده می کند.
در اینجا ، می توانید روند ذخیره خود را برای داده های خاصی که می خواهید ذخیره کنید اضافه کنید. اکنون شما یک نوع محصول WooCommerce سفارشی کاملاً فعال دارید.<?php// ...
class WC_Product_Type_Plugin {
/**
* Build the instance
*/
public function __construct() {
// ...
add_action( 'woocommerce_process_product_meta_advanced', array( $this, 'save_advanced_settings' ) );
}
/**
* @param $post_id
*/
public function save_advanced_settings( $post_id ) {
$price = isset( $_POST['_member_price'] ) ? sanitize_text_field( $_POST['_member_price'] ) : '';
update_post_meta( $post_id, '_member_price', $price );
}
// ...
}
new WC_Product_Type_Plugin();
با استفاده ازبرنامه نویسی شی گرایی و مفهوم ارث بری، می توانید از اکثر کدی که قبلا در انواع دیگر محصولات نوشته شده است صرف نظر کنید و فقط بر روی قسمت های خاص نوع محصول خود تمرکز کنید.
ایجاد یک نوع محصول سفارشی ووکامرسچنان چه نسبت به محتوای این پست آموزشی پرسشی دارید یا در مورد فروشگاه ووکامرس خود نیاز به دریافت راهنمایی و مشاوره دارید، می توانید هم اکنون در ناحیه کاربری ثبت نام کرده ، اطلاعات سایت را تیکت کنید و از دانش و تخصص کارشناسان ما در وب سایت ووکامرس ایرانی، بهره بگیرید.