我們最後一個主題,也是基於woocommerce,要製作出可以在bill的部分製作出可以代替別人製做清單,而這個的好處是如果你有相對應得invoice或者是其餘複雜的訂單生產,你是可以藉由所謂的特殊訂單,來支援我們下的特殊訂單,而這個訂單也是可以在meta之中加入特別的輸入,來與你的後續整合系統一起整理,而我們的後續wc_order再來做更新與載入來操作未來可能整合系統的必要資料。
btw,顧客就是上帝,上帝模式就是顧客模式
你可以在很多的外掛中看見,有些外掛是基於一個個體衍生出來的擴充套件,而我們能做到的是去取得是否有這個外掛與他是否已經被啟動了,如果沒有就可以直接return值了,避免出現奇怪錯誤,而如果我們沒有偵測到,則可以在後台顯示為偵測到woocommerce被啟動或安裝,來提醒開發環境出的錯誤。
add_action('init','go_ranger_check_woo');
function go_ranger_check_woo(){
if(in_array( 'woocommerce/woocommerce.php', get_option( 'active_plugins'))) go_ranger_do_init();
else wp_notice('danger','[go_ranger_check_woo] 你沒安裝或啟動wooCommerce');
}
而我們如果只有admin可以使用的話,我們還需要增加,不過外掛的邏輯操作,可以由系統創造新的caps來做控管,我們姑且稱caps叫做god_mode
,而我們得使用者,如果他們的caps有符合可以使用,則可以載入外掛的內容進行操作,反之則就不顯示,也不出現任何的提醒事項。
function page_role_permission(){
if(false === is_checkout()) return false;
if(false === current_user_can('god_mode')) return false;
return true;
}
function go_ranger_do_init(){
if(false === page_role_permission()) return;
}
而取代原本的woocommerce 帳單的位置,我們需要動用到woocommerce_billing_fields
來做新增刪除,而他的原始fields來做操作,這個filter與其餘操作的fileds依樣,基本上原生的wordpress在輸出表格或是選單,一並都是陣列來做操作,只要填對key並且確定相對應的filter回傳後,是會將整張陣列印出,就可以直接來做設定。
add_filter('woocommerce_after_checkout_billing_form','go_ranger_bill_fileds',9999,1);
function go_ranger_bill_fileds(){
if(false === page_role_permission()) return;
$fields['billing_god_mode'] = array(
'label' => '上帝模式?',
'required' => true,
'class' => array( 'form-row-wide' ),
'clear' => true,
'priority' => 150,
'type' => 'select',
'options' => array(
'yes' => '好',
'no' => '先不用',
),
'default' => 'yes',
);
}
本來預計是使用woocommerce_before_checkout_billing_form
來增加我們是否開啟上帝模式,但是發現上面這個filter可以整進一整個form,可以省三四十行程式碼,立馬砍掉放上去!
那我們在最後,針對checkout的hook做加入新的filter,並且修改成是遊客的下單就大功告成!而明天預計會把user中的會員加入到這個hook之中,並且輸入名稱(或是公司名稱)的autocomplete的介面,讓上帝模式更加順手,而這就可以進行做woocommerce_checkout_customer_id
的,來將他設定成guest,而我們這邊的使用也可以變成user_id來當作我們設定轉換之對象,而之後如果有轉換的會員,我們則需要使用woocommerce_checkout_update_order_meta
來將我們的user_ID更新到我們的meta之中。
add_filter( 'woocommerce_checkout_customer_id', 'go_ranger_set_user_id' );
function go_ranger_set_user_id( $user_id ) {
if ( page_role_permission() ) {
if ( isset( $_POST['billing_god_mode'] ) && 'yes' === $_POST['billing_god_mode'] ) {
return 0;
}
}
return $user_id;
}
簡單的設定,我們就能做出捉刀下單的功能,而我們明天是30天的最後一天,明天有幾個功能做完,來完整我們整個外掛,明天的外掛,不過目前在做autocomplete遇到一點奇怪的bug,所以今天的篇幅比較短一點,不過我們依照我們的邏輯,如果email有存在的話,則可以在資料庫中找回我們的使用者ID,我看線上的替人下單的功能外掛,是有做到幫人創建一個新的帳號,不過我覺得是不主張有這個功能,所以就不去想該怎麼做了。
而我覺得在這個裡頭,除了上述說道用公司名稱來做搜尋之外的主要功能,我們也可以將admin的付費直接轉到銀行轉賬的選項,這邊會操作到woocommerce_available_payment_gateways
來做,今晚蘋果發表,就配著新的iphone 12影片,繼續好好努力吧!希望mac OS可以把 daisy chain給支援,不然我的電腦都要差兩條線真的不是讓人很爽qq
Woocommerce: ATTRIBUTE FILTERS DO NOT APPEAR
WooCommerce Visual Hook Guide: Checkout Page