「Wordpress 外挂开发」替你的上帝下订单,上帝模式撰写

我们最後一个主题,也是基於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

reference

Woocommerce: ATTRIBUTE FILTERS DO NOT APPEAR
WooCommerce Visual Hook Guide: Checkout Page


<<:  [Day 28]老师我学逻辑推论做什麽(3)

>>:  第廿八天:旅游结束的周二

#21 No-code 之旅 — 如何让网站在分享时看起来漂亮和有吸引力?Open Graph (OG) 简介

大家有没有发现当有人在社群软件分享网址的时候,通常除了网址本身还会看到一张缩图加上网站的标题和描述?...

Day03 - 使用 Google Compute Engine 建立 VM

前言 有人说虚拟化是实现 Cloud Computing 的关键基础,在云端服务里,虚拟机(Virt...

找LeetCode上简单的题目来撑过30天啦(DAY5)

今天值接上菜,不闲聊 今日小菜 题号:182 标题:Duplicate Emails 难度:Easy...

人脸辨识-day20 资料预处理--1

在做模型训练时,要先将训练资料做一些事前的处理,为以下这几类:资料平衡、异常点处理、缺失值处理、特徵...

Day17 PHP的常用函数-2:数组

数组 array(): 生成一个数组 range(): 创建并返回一个包含指定范围的元素的数组 co...