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,有了你,客户永远是对的,帮我省下不少情商。

类似文章

订阅评论
提醒

0 Comments
内联反馈
查看所有评论