标签 WooCommerce 下的所有文章

WooCommerce购物车对象使用以及方法函数概括

WooCommerce二次开发中,经常会需要对购物车进行改造,甚至有时候会需要重写购物车页面,所以就有必要把WooCommerce的购物车提供的接口方法做一下整理。本文对我在最近的一些项目中使用过的方法进行简要的记录。

首先,在调用任何购物车方法之前,先要检查当前页面环境对购物车对象是否可用:

1
2
3
4
if ( is_null( WC()->cart ) ) {
wc_load_cart();
}
WC()->cart->get_cart();

常用的条件函数,返回true/false

1
2
3
4
5
6
7
8
9
10
//检查购物车是否有商品
WC()->cart->is_empty();
//检查购物车是否需要付费,如果费用为0则返回false
WC()->cart->needs_payment();
//检查购物车中是否已经记录收货地址
WC()->cart->show_shipping();
//检查是不是需要寄送(用于计算运费的情况)
WC()->cart->needs_shipping();
//检查是不是有折扣,如果后台减了价格,这里会返回true
WC()->cart->has_discount();

查看详细 »

WooCommerce Rest API开发微信小程序和APP等第三方应用的鉴权方式

最近忙于自己开发基于WooCommerce的微信小程序。在决定自己研发之前,我也调查过国内已有的他人研发的WooCommerce微信小程序,对各家的产品Demo分别进行了试用后,还是决定自己从0开发一套小程序。从无到有的过程必然是一项浩大的工程,但经历一下这个过程还是很有必要的。首先,我们开发的项目100%自己掌握代码修改是最基本的要求。目前市面上已有两款第三方开源WooCommerce微信小程序,但都只是部分开源,且给出的源代码甚至不能直接跑通,使用这些开源代码做二次开发会很“受制于人”。考虑到自己也需要长期深耕定制小程序,需要随心所欲地扩展功能和设计,作为开发者就必须对项目的每一行代码都有本质理解。要达到对一个系统有本质理解的程度,最快的方法并不是去读别人的代码,而是自己写一套出来。恰好手头的一个项目给了我2个月时间,以我对WooCommerce的了解,是有信心独立完成小程序的开发的。目前项目开发已完成,点击这里可以查看案例,今后会不定期分享一些零碎的经验心得。

基于WooCommerce的Rest API开发第三方应用,首先要解决用户鉴权问题,这里要分两种情况:
1. 用户未登录
2. 用户已登录
查看详细 »

给WooCommerce的运费(Shipping Method)增加自定义描述字段

如果一个WooCommerce网站存在多种不同的运费(Shipping Method),则可能有必要让用户在运费选择的模块中了解不同运费的区别。你可以解释运输的时长,或者解释价格的构成等,总之就是提供更多信息帮助用户做出最好的选择。比如在这里,我就对每个运费添加了时长的解释:

一个便捷的办法是通过以下代码实现的:

add_filter('woocommerce_cart_shipping_method_full_label', 'brain1981_custom_shipping_method_label', 10, 2);
function brain1981_custom_shipping_method_label( $label, $method ){
	$txt = "";
	if( $method->id=="flat_rate:1" || $method->id=="free_shipping:4" ){
		$txt = 'In 15 Business days';
	}else if( $method->id=="flat_rate:2" || $method->id=="free_shipping:3" ){
		$txt = '7-10 Business days';
	}
	return $label . '<br /><small>' . $txt . '</small>';
}

需注意的是,WooCommerce的运费ID的格式都是以这样的形式呈现的:
flat_rate:1
free_shipping:2

以上这段代码就是事先辨认出这些运费ID,通过woocommerce_cart_shipping_method_full_label这个钩子在运费的标题后面增加一小段描述。如果你的运费数量不多且比较固定,这段代码就足够用了。

那么如果一个网站有很多种运费,并且经常会修改运费种类,上面这种hard codding的写法就会变得很臃肿且不易维护了。我们就需要给每个运费添加一个自定义的描述字段,实现后台管理描述,方便运维人员自己去修改运费设置。 查看详细 »

WordPress+WooCommerce保险网站案例,我能把WooCommerce定制到什么程度

最近几年有很多人找我们咨询WordPress+WooCommerce建立外贸电商网站,其中大部分人在找到我之前,并不了解我和市面上大部分其他在用WordPress的建站团队或公司在服务和技术上有什么分别。于是我打算写几篇案例分享,来展示我们对于WordPress以及WooCommerce能做到怎样大部分其他人做不到的程度。

今天的话题是一个保险网站的案例,这是一个面向留学美国高校人群的保险售卖网站,学生(或家属)需要购买医疗保险,于是Ta登录该网站。

首先,用户选择Ta所在的学校和自己的出生年月。网站已经内置了全美绝大部分的学校资料,输入简单的关键词或者学校简称,即可搜索到对应的学校:
查看详细 »

WooCommerce无插件增加优惠券功能,限定/禁止给指定用户角色(role)使用

WooCommerce提供了基本的优惠券Coupon功能,优惠券可以限定/禁止使用的产品、产品分类、限定最小和最大金额等,这些功能很实用,但仍然比较单薄,尤其是对指定用户的限制很弱,只能限定给指定邮箱的用户使用。邮箱可以使用通配符比如*@google.com,这可能比较符合国外网站的运营习惯,但对我们来说不太直观好用。我们通常希望实现的是给指定用户等级设定优惠券的使用或者禁用。本文记录如何开发出这个功能。

先看下结果:
WooCommerce无插件增加优惠券功能,限定/禁止给指定用户角色(role)使用

图中倒数第三行是WooCommerce自带的邮箱设定,最后两行就是我添加的功能,指定优惠券对某些用户等级(role)的使用和禁用。 查看详细 »

作为一名用WordPress建站的开发者,我为什么坚持尽可能少用插件?

用WordPress第十个年头了,做为一个老玩家,并且已经把WordPress作为重要谋生手段的我,今天想聊聊我对WordPress自己的理念。这些理念并不是出于一时的兴起或者道听途说形成的,而是基于我自己使用WordPress这十年的个人感受和经验,基于我自己对WordPress的学习历程,从无到有,再经过一些转折而形成的。我并不想做一个倚老卖老的说服者,企图说服大家接受我本文标题的观念,我只是想阐述,为什么在使用WordPress若干年头后,我会形成这样的想法。

一年前,我曾写过这样一篇文章 我用WordPress建站,为什么不用Elementor、The 7、Avada、Divi之类的主题和插件,本文是那篇文章想法的扩展,如果你不同意那篇文章,大概率也不会同意本文。

起初,我是怎么喜欢上WordPress的?
和所有人一样,基于WordPress开箱即用的可用性和方便的扩展性。对这两个特性的最初理解,就是我觉得网站缺少什么功能,大都能很快找到插件,安装上,再设置一下,就能马上启用,这真的太方便了。举个例子,这个网站,最初就是打算用来做我的技术博客的,写技术文章当然要贴代码段啦!WP主题没有适合代码格式的写法,怎么办?后台搜一下“code syntax”,就有一大堆插件可以选,大部分都很好用,选一个安装用户最多的装上就行了。再比如,我嫌默认主题的文章的分页不太好看,搜一下“page navi”,又有一大堆插件可以选,逐个打开他们的主页,选一个看上去最顺眼的安装上,就好了。于是,在最初,我理解的开箱即用,和扩展性,都是WordPres数以万计的插件带来的。以至于在最初的一两年里,想要实现一个什么功能,我都会直接找插件装上,随着使用过的插件越来越多,也逐渐觉得自己就是个WordPress的“专家”了。 查看详细 »

WooCommerce网店促销,给促销价格添加自定义名称

双十一快要到了,接到客户的临时需求,是为他们的WooCommerce网店大促销做一些小修改。其中一个修改是给设置了促销价格的商品添加价格注释,就像以下这个样子。

很简单的一个需求,利用woocommerce_get_price_html这个钩子就能实现,代码如下:

1
2
3
4
5
6
function brain1981_change_product_html( $price_html, $product ) {
	if( $product->is_on_sale() ) {
		$price_html.='<span style="display:block;font-size:12px;font-weight:normal;color:#c98c4b;">双十一活动折扣</span>';
	}
	return $price_html;
}

查看详细 »

把WooCommerce产品购买数量的选项改为下拉菜单

WooCommerce产品数量的选项如图所示,这是一个HTML5的数字输入框,代码表现为

<input type="number" id="***" class="input-text qty text" step="1" min="1" max="" name="quantity" value="1" placeholder="" inputmode="numeric">

这样的输入框可以让用户输入任意数字,直接把一定数量的产品加入购物车。但在一些场合下,用户其实还是更希望有个下拉菜单形式的输入框,从而可以直接选择想要购买的数量。这种场合比较适用于购买数量不多,或者日常库存不多的产品,比如不超过20件的情况。因为如果数量一多,恐怕整个屏幕高度都不够下拉列表的数字显示,反而会对用户造成更大的不方便。

下来菜单其实就是一个select元素,替换掉原来的数字框,在商品页面的前后页面表现是这样的:

查看详细 »

WooCommerce产品页面中添加用户自定义字段(product add-on),并使其影响价格

给WooCommerce产品页面添加自定义字段,并使其影响价格,在很多电商的场景中会需要这个功能。注意这里强调的是用户自定义字段,而非我之前写的 博客 介绍的产品自定义字段,两者不是一个东西。
举几个例子:

  • 卖T-Shirt的网站开通自定义产品的业务,比如让用户在产品页面输入希望印在T-Shirt上的文字。由于输入的文字是随机的,不可能预先设定好产品变量满足需求,只能在产品页面上添加让用户可以自己填写的字段。用户输入文字,即代表产品有定制部分,价格会在基础款式的基础上增加一些。
  • 刻字服务,提供一个字段让用户输入姓名,根据姓名的字数生成新的价格。
  • 蛋糕定制,允许用户填写自己的祝福语在蛋糕上,根据祝福语的长度生成新的价格。
  • 单个产品添加注释字段。我之前写过给订单增加额外注释字段的文章,但如果用户需要对订单内每个产品写需求注释,则用这个功能会更好。
  • 其他,诸如贺卡定制、各种礼物、工艺品、日用品定制等等,都可能需要这个功能…

WooCommerce产品用户自定义字段,英文翻译叫做“WooCommerce product add-on”,在产品页面上可以这样表现:
WooCommerce产品用户自定义字段
我们可以同时添加多个字段,也可以用select、radio、checkbox,datepicker,甚至是file uploader做自定义字段。

要实现这个功能,市面上已经有不少插件了,在官方插件市场上搜一下“WooCommerce product add-on”关键词,就能找到不少同类插件。我测试过过几款,发现功能都差不多,它们也都有免费版和收费版两个版本。一般来说,这类插件的免费版提供各种常规类型的自定义字段,收费版则提供一些特殊类型的自定义字段。另外如果你需要通过这些字段影响商品价格,这个功能我没有在免费版里见过,都需要购买付费版实现。付费版价格在39 – 69美元之间,看上去并不贵。但我的原则仍然是能不用插件就不用,需要用户自定义字段的场景,实际上字段都不多,这个功能不复杂,完全可以自己写出来。 查看详细 »

WordPress真的比Wix或Shopify好吗?

今天在知乎上回答了一个我以前也被问起多次的问题,在此也发布一下自己的回答(略有修订)。
原答链接: https://www.zhihu.com/question/358785933/answer/1172467957

都2020年了,庞大的WordPress网站基数中,仅仅是博客的这一类网站占比已经不高了!

不错,WordPress一开始就是个博客(大约10年前)。然而现在用WordPress已能够很专业的搭建:
商城(b2b、b2c都可以);
社区(bbs,或者知乎这样的问答社区);
传统各行各业的企业网站(这类我已经做了上百个了)。

即使是做博客网站,WordPress也早就不是个人发布发布文章这么简单了,你可以用来搭建公共博客、wiki类型的,微博类型的。WordPress的博客,在更多时候已经变成了任何更复杂类型网站的一个常规附带。总之只要是市面上已经有成功案例的网站,WordPress都能模仿出它的业务原型。

然而,我们常见的情况是WordPress似乎都是小团队或个人在用,所以开发人员总体水平显得不太高,或者说用WordPress建站的企业本身对技术的投入就不高,所以做出来的低质量网站很多;另一方面,个人WordPress站长也很多,个人站通常自给自足,难看点也很正常,所以整体拉低了WordPress的案例水平。另外,很多人对WordPress的期待就是装个主程序,选个主题,再装几个插件就能弄出想要的网站,根本没有深入的研究WordPress到底好在哪里,或者还有哪些不足。这样的人,他们虽然用过WordPress,但是对WordPress给出的评价都是片面的。 查看详细 »