原本是打算做email与公司的匹配,不过觉得在这个的逻辑上打转,基本上是在写JS,这一点我就只写出输出客人该拿到的资料filter代替js的输出,而autocomplete可以藉由jquery Autocomplete来达到。
我们设定filter可以对应撰写来做list的资料取得,并且将我们的料locaization到我们的script之中,就可以获得,而我们也在users之中,将不必要的资讯给拿掉,只留我们需要的Id,company name与 email。
add_filter('go_ranger_retreive_shop_client','go_ranger_shop_client_list',10);
function go_ranger_shop_client_list(){
if(false === current_user_can('god-mode')) return array();
$users = get_users();
$result = array();
foreach($users as $user){
$_temp = array(
'id' => $user->id,
'email' => $user->user_email,
'company' => $user->company,
);
array_push($result,$_temp);
}
return $result;
}
而我们对应的的list,只需要将我们的资料藉由wp_localize_script
做引入即可,而如果资料是动态的,可以藉由ajax的功能来做到动态autocomplete,而我们也设定了gr_do_script_init
将全部外挂需要注册的script都统一由这个action来达成。
add_action('init','go_ranger_script_init');
function go_ranger_script_init(){
do_action('gr_do_script_init');
}
add_action('gr_do_script_init','gr_do_regist_script_init' , 10 , 0);
function gr_do_regist_script_init(){
wp_register_script(
'go-ranger-autcomplete',
plugin_dir_url( __FILE__ ) . '/assets/autcomplete.min.js',
array(),
'4.11.2',
true
);
}
add_filter('woocommerce_after_checkout_billing_form','before_go_ranger_bill_fileds',10,1);
function before_go_ranger_bill_fileds($user){
wp_enqueue_script( 'go-ranger-autcomplete' );
$users = apply_filters('go_ranger_shop_client_list');
wp_localize_script( 'go-ranger-autcomplete', 'user_name', $users );
}
那我们重头戏,就是将autocomplete後的选择,在选择之後写入,而我们最先就是将输入的选择写进我们的metakey之中,而我们在点击後,可以直接将项目的值设定成ID,则可以较容易做sanitize并且做好处理。
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',
);
$fields['shop_for_whom'] = array(
'label' => '顾客名称',
'required' => true,
'class' => array( 'form-row-wide' ),
'clear' => true,
'priority' => 150,
'type' => 'autocomplete',
);
}
add_filter( 'woocommerce_checkout_customer_id', 'go_ranger_set_user_id' );
function go_ranger_set_user_id( $user_id ) {
if ( page_role_permission() ) {
if ( 'yes' === $_POST['billing_god_mode'] && isset($_POST['shop_for_whom']) ) {
if(user_id_exists($_POST['shop_for_whom'])) return $_POST['shop_for_who,']
else return 0;
}
}
return $user_id;
}
function user_id_exists($user_id){
if(false === is_integer($user_id)) return false;
$user = get_userdata( $user_id );
if (false === $user) return false;
return true;
}
而我们成功将资料传入後,我们的後台还是会显示原本的资讯,所以我们需要一点更动才能来完整我们的程序码,而我们需要有个注记是这一笔订单是由哪个使用者完成的,所以我们先将woocommerce_checkout_update_order_meta
来处理当钱页面的post,也可以取得我们的order_ud,加入我们的处理meta,在woocommcer三代之後,meta_data有做更新,一率都要做save,不然他并不会改变。
add_action( 'woocommerce_checkout_update_order_meta', 'go_ranger_add_proccess_man', 10, 2 );
function go_ranger_add_proccess_man( $order_id, $data ) {
if ( page_role_permission() ) {
if ( 'yes' == $_POST['billing_god_mode'] ) {
$order = wc_get_order( $order_id );
$order->update_meta_data( 'go_ranger_procees_man', get_current_user_id() );
$order->save();
}
}
}
加入处理男子的问题後,我们就来将我们後台可以显示我们的经手人的资讯来做显示
add_action( 'woocommerce_admin_order_data_after_order_details', 'gr_add_prcoess_man_admin' );
function gr_add_prcoess_man_admin( $order ) {
$procees_man_id = $order->get_meta( 'go_ranger_procees_man' )
if ( isset($procees_man_id)) {
$user = get_user_by( 'ID', $procees_man_id );
?>
<p class="flex f-1">
<label>此单为代客下单</label>
</p>
<?php
if(isset($user)){
echo '此单由'.$user->display_name.'所负责。';
}}
}
}
如此,我们又可以省49元去买这个小外挂了XD
三十天内,共写了四个小外挂,之後还是会在公司的其他地方继续更新,感谢公司Formosa Screens让我可以在上班的一些时间准备铁人赛的东西,还拿了一些小side project改成文章来讲解。
Wordpress的外挂相信很有竞争力,世界23%的占有率,是个非常可观的数字,相对应大型的外挂会有相对应的扩充,而我觉得很可惜的是很多台湾的传统产业(澳洲传产也是不e化),是非常适合走wordpress的路线来经营线上化,而不是唯一的电子化只有使用line而已。
之前跟客户的it聊过天,他们讶异说计算库存这些东西,与零售业者不依样,传产的IT因为没办法做到精准(可以,但是你不能想像做砖头的是好几个产线的机械手臂吧),只能用估算值加上offset来做到,而在耗材管理是可以与印表机服务器这些连接,看看1998年netflix的成立初秋,网路下单印表机就可以啪嗒啪嗒的印了,怎麽我订个一吨的六边铝挤型还得要email个好几封来做确认,流程都需要被简化的(尤其是那些窗口像是鬼打墙完全无法沟通),不过我们都知道问题不是出在这些上,是出在经营者的想法之中,我们能做的就是尽力推广,等到他们发现周围的人都开始使用,他们或许会考虑花个几千块做个简单的线上系统试试。
之前某个客户,买下了约300坪的小工厂,砸钱不手软,花了十万要来做耗材的管理这电子化,不过现在还没听到完成了多少,传产在迈向下一代需要的事情,还是得先把MVP做好,再来谈你要多炫炮的功能,不然什麽都没有,我从2018年就听到了,现在还是没有听到他们上线,帮这一家公司加油。
对了,明天终於可以不用每天操文章了,爽啦!
woocommerce_form_field()
Shop as a Customer for WooCommerce
shop as a customer for woo - docs
cxthemes - Shop as Customer for WooCommerce Documentation
creativelittledots/woocommerce-shop-as-customer-discount
<<: Day 29 - 从大学肄业,联成电脑,到 Microsoft MVP 得奖,从零开始的软件工程师
>>: [第29天]30天搞懂Python-HTTP POST
我们平常建立的路由都是MaterialPageRoute,但当我们需要改变风格或是转场效果时,就需要...
Hello大家, 今天就是铁人赛的最後一天了, 所有友参加的大大们今天就是大家都完成的一天, 恭喜大...
今天的桥接器模式,和昨天的转接器模式一样,都是非常常见的模式,可能我们不自觉当中都会使用到。话不多说...
if…else叙述,基本格式为: if(条件): 条件成立时执行 else: 条件不成立时执行 i...
Terraform State 之你的 Local State 不是我的 State State 是...