WP/WC项目中最脏的活之一:请把“产品”两个字改一下,用户订阅服务时显示“已购服务”,其它时候显示“已购产品”。
“产品”二字是WC提供的标准翻译,原文“Product(s)”,广义泛指客户能网站能买到的任何东西。
WC的上下文里,当你添加一个Product,它可以是Simple/Variable/Group/External,不特指实物;它可以是Virtual的,即“虚拟”产品,无实物交接的东西,不涉及物流,比如任何可下载的东西都是“虚拟”产品。
“虚拟”产品是不是产品?当然是。
但如果你卖的是付费会员,付费订阅这样的虚的东西,把它们称作“产品”似乎是有点牵强,嗯~ …. 嗯~ 但我好像也在哪里、曾几何时听到过有人说“会员产品”、“付费订阅类产品”、“知识付费产品” 啊~
莫非“白马非马”?
问题是,当你的网店要售卖各种东西,实物的、虚拟的(软件、资格、权限),现在你要在发给顾客的对账单上,用一个词尽可能上下文贴切地描述它们是什么的时候,用“产品”,你觉得从哲学上能不能成立呢?嗯嗯~~
…
这个哲学问题的哲学回答是:She won’t give a fuck!它看到的对账单是两个数字,一个她付了多少钱,一个她省了多少钱,以我和夫人相处的有限经验来回忆,生活比哲学要大得多。
…
比哲学有用也许还有代码,在和客户相处这件事上,代码也比情商管用,尤其是我这种天生嘴笨的。“产品”二字,是WC系统提供的标准翻译,它在某个.mo文件里,你能用Loco Translate插件轻易定位到它,你会发现它不止一处,作为有尊严的程序员,你应该不至于堕落到用Javascript代码作post render字符替换,干这种事的人好比猥亵了儿童的罪犯被关进监狱,晚上要还的。任何做过WP/WC PHP开发的人都不会太难找到类似下面伪码的解决方法:
add_action/filter( {contextual hook}, function (...) { // -1
add_filter( {gettext hook}, function (...) use {context) { // -2
return translation based on context // -3
} ... );
} );
在3这里你基本上可以为所欲为,2是WP系统给你截胡字段翻译的钩子,而1是你选定需要截胡字段翻译的路口或者小树林。
下面的这个应用示例献给语文好的客户:
add_action(
'woocommerce_email_order_details',
function ($order, $sent_to_admin, $plain_text, $email) {
add_filter( 'gettext_woocommerce', function ($translation, $text, $domain) use ($order) {
// 优美的注释:如果你看不到我这样写的问题,请自罚3杯
foreach ($order->get_items() as $items) {
if ($item->get_product_id() === SUBSCRIPTION_PRODUCT_ID) {
return '已购服务';
}
}
return '已购产品';
}, 10, 3),
10, 4
);
感谢Closure,有了你,客户永远是对的,帮我省下不少情商。