iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 21
0
自我挑戰組

Wordpress 外掛開發系列 第 21

「Wordpress 外掛開發」為大爺們,加上特別的折價服務

我們用simple product的型態來當範例,那我們基本上先做一個價格的調整,那我們先來做一個簡單的範例,就是先取得如何變化價格,而我們可以使用woocommerce_get_regular_pricewoocommerce_product_get_price來取得靜態的價格變化,那比如說我們可以設定成,我們的價格在特定商品之下,先是兩倍價錢來,那我們使用了兩個來處理,並且可以處理價錢,比如說目前成本因素太高,價格得要增加一些,那我們就可以靜態寫一些。

add_filter('woocommerce_get_regular_price','my_custom_price', 99);
add_filter('woocommerce_product_get_price', 'my_custom_price', 99);

function my_custom_price( $original_price , $product ) {
	$id = $product->get_id();
	if($id == 3677) return $original_price + 32;
  return $original_price;
 }

讓VVIP上神壇

現在的外掛,可以處理很多role的操作,我們就不細談如何生成新的role,而我們可以設定一個role的名稱叫做VVIP,而他將可以受到特別的優惠,尊榮的價錢有錢就都可以享受得到,而其他人則是無福消受。

add_filter('woocommerce_get_regular_price','my_custom_price', 99);
add_filter('woocommerce_product_get_price', 'my_custom_price', 99);

function my_custom_price( $original_price , $product ) {
  if(true === permission_valid('VVIP')) return (int)($original_price * 0.9);
	$id = $product->get_id();
	if($id == 3677) return $original_price + 32;
  return $original_price;
 }

function permission_valid($target_role){
  $user = wp_get_current_user();
  $roles = ( $user instanceof WP_User )? $user->roles: [‘visitor’];
  if( in_array($roles,$target_role) ) return true;
  return false;
}

加入另外的特別服務

我們現在要加入刻字的服務,而我們會在有設定的產品加入這項功能,那現在我們要加入meta來判斷他是否有使用我們的顯示,那這一個版本我們選用了woocommerce_before_add_to_cart_form來增加,不過今天還沒有時間能做到寫js去寫個helper來做engrave增加的價錢,我們預計明天再把它全部完成。


add_action('init','go_ranger_wc_init');

function go_ranger_wc_init(){
	$product = wc_get_product( 3991 );
	if(false === $product->meta_exists('go_ranger_enrave')) {
		 $product->add_meta_data('go_ranger_enrave',true);
		 $product->save_meta_data();
		}
}

 add_action('woocommerce_before_add_to_cart_form','go_ranger_variation');

 function go_ranger_variation(){
	 global $product;
	 $show_content = $product->get_meta('go_ranger_enrave');
	 if($show_content){
		?>
		<div class="go-ranger-flex" style="display:flex;justify-content:space-around;align-items:center;">
			<span>刻字在這,加些錢錢</span>
			<input type="text" data-engrave="pine">
		</div>
		<?php
	 }

我們加入初始化的加入meta,而更好的操作,我會選擇在post->product的內頁,對於每個產品的做選擇,而我們最終的目的,在如果有填寫雷射字體的文字上,會照著字數的多寡,有比例的增加,像是限制10個字,那麼1-5個字加上50,那6-10加上100,而這一個刻字的服務,在vvip的服務之中,是沒有做到折扣的,讓這個外掛與大眾使用的折扣外掛不同,更能貼切的活用,而不是一股腦的就是一定九折八折。

然後遇到些許的問題是,在製作動態的價格的時候找不到對應的hook可以掛上去,如果依舊找不到只能做一個post每次更動就改變當下的價格的helper了,希望不要這樣,這樣可能又要拖好幾天了QQ補充上面沒有提到的woocommerce_product_get_price是要解決快取的問題,不然只有更動一個價格,如果有快取是會有不變的;而我們的新增的欄位不一定可以只有刻字,所以我們再增加欄位的部分,也可以製作一個新增欄位,如果是對於視覺器設計開發擅長的人,將這個使用的體驗提升就是靠這類的大老來貢獻了。

最後,外掛的內容會被整理成class,並且加上偵測是否有woocommerce這個基本的防呆,如果沒有就不用載入,因為根本不會運作,而我們最後在購物車上,要顯示著我們的meta key顯示,那計算價錢的部分,我會參考這一篇問題的邏輯來解決,希望在使用woocommerce_before_calculate_totals$woocommerce的重新算價錢可以有好的開發時光。

reference

WooCommerce Visual Hook Guide: Single Product Page
Caching and dynamic pricing – upcoming changes to the get_variation_prices method


上一篇
「Wordpress 外掛開發」掛上多語系,大家都在international - i18n
下一篇
「Wordpress 外掛開發」刻個字就要給一百五十元,加上你的動態價格變化
系列文
Wordpress 外掛開發30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言