给WooCommerce的订单页面添加自定义字段,并输出到管理员通知邮件中

给WooCommerce的订单页面添加自定义字段其实这也算是一个常见需求,有些人喜欢一碰到这类需求就找插件实现,其实大可不必。在WordPress里面找对钩子,添加对应的代码段就行了。

今天刚完成一个小需求如下:在WooCommerce的Checkout页面增加一个了解用户渠道的下拉字段,并且如果选了”Others”选项,会再多出现一个文本字段。下拉字段为必填,多出的文本字段为可选,效果如图:

查看详细 »

WordPress自定义文章类型自由调用不同模板的方法,给自定义类型后台添加模板选择列表

WordPress自定义文章类型调用模板有一个默认规则,即优先调用当前主题目录下的single-[type_name].php,这里的[type_name]为自定义类型的名字。比如自定类型为product,那么就优先调用single-product.php;如果single-[type_name].php不存在,则调用single.php;single.php不存在则调用index.php

对于列表页来说,则优先调用主题目录下的archive-[type_name].php;archive-[type_name].php不存在,则按顺序查找archive.php、index.php。

如果希望指定某个自定义文章类型调用某个模板,实现代码为: 查看详细 »

Linux主机丢失MySQL的root账户密码,重置密码步骤

有一段时间未登录的测试机,发现MySQL的root密码找不回了,整理一下网上搜的办法重置密码,记录一下步骤。

SSH登录到服务器,找到MySQL配置文件/etc/my.cnf,在[mysqld]这一行下面添加一行:

skip-grant-tables

保存后,重启MySQL:

service mysqld restart

然后就可以用无密码方式登录MySQL了
在mysql命令符后,留意一下系统提示的MySQL版本号,执行语句

#MySQL5.7以下版本
UPDATE user SET Password = password ( 'abcd1234' ) WHERE User = 'root' and Host='localhost';

#MySQL5.7和更新版本
update user set authentication_string=password('abcd1234') where User='root' and Host='localhost';

#退出
quit;

密码abcd1234只是示例,尽量改复杂一些。

然后再打开my.cnf文件,去掉刚才加的那一行,保存后再次重启MySQL,即告完成。

WordPress一次列出当前文章/页面的所有自定义字段

WordPress中最重要的活用就是自定义字段,它几乎涉及到了一切现有的业务模块,无论你是电商网站还是用户社区,自定义字段无处不在。有时候我们需要在别人现成的代码或主题里面挖一些资料,进行再开发。那么就需要知道特定的页面上究竟可以有哪些字段资源可用。

还是用我们熟悉的get_post_meta命令,但是这次只给一个参数,就能调出所有的自定义字段了:

1
2
3
4
$myvals = get_post_meta($post_id);
foreach($myvals as $key=>$val){
    echo $key . ' : ' . $val[0] . '<br/>';
}

就是这么简单!

———————
2023年10月更新:

在评论区有朋友留言反映用以下一行代码列出字段更为简单:

1
the_meta();

这个方法在single页面的主循环中使用确实很简单有效,但它目前已经被官方文档标为弃用了,官方也是推荐一律使用get_post_meta方法调用自定义字段:
https://developer.wordpress.org/reference/functions/the_meta/

另外,经过对比the_meta方法输出的字段会过滤掉开头为下横杠”_”的字段名称,这类字段通常都是WordPress和WooCommerce等插件的保留字段,比如WooCommerce的这几个自己开发排序必用的字段:
_price – 价格
_wc_average_rating – 平均分
_wc_review_count – 评论数
都不在the_meta方法输出项内,所以建议还是不要用它了。

网站链接规划,什么时候在新窗口/标签打开页面,什么时候在当前页打开?

这是一个老话题,最近正好被客户问起过,索性整理一下想法。

我们的设计原则:如果没有任何条件,一律默认在原窗口跳转

以下是条件

主观条件

如果觉得当前页面对你的转化比较重要,不希望用户关闭打断转化,就用新窗口。比如商城网站,用户订单页面上就等着付款了,要展示个条款页面,肯定是用弹出新页了。其他带表单的页面也是如此,在这样的页面上要少放链接。不过这个主观条件容易被滥用,有些人会觉得自己每个页面都是重要的…

客观条件

目标页面没有跳回原页面的链接的,原页面上这个链接就要用新窗口/标签打开目标页。比如跳到站外的,那肯定是要新窗口了。

补充

因为鼓励尽量在原窗口跳转,所以站内也要尽量做好内链,比如导航设置合理、下级页面有返回上级页面的专门链接、面包屑链接,等等…方便用户能快速找到原页面位置。总之设计中要活用各种方便用户逛网站的手段,防止迷路。

最后,电脑端对用户来说或许多几个标签页无所谓,手机端打开多标签就非常不方便了。手机浏览器切换标签麻烦,标签多了卡顿也明显,所以在手机端尤其要遵守在站内避免打开新标签的原则。在微信等APP内置浏览器中更是没有新标签的功能,一定要想好怎样只用当前窗口做交互。如果怕造成转化损失,可以有这样的手段:

– 如果新页面内容不多,可以考虑用浮层展示,避免掉这个跳转。
– 如果新页面内容多,必须跳转的,除了打开新标签,还可以考虑用本地存储、Cookie等手段保留用户在原页面的数据,比如填到一半的表单数据,方便用户回来后继续填写。

给Gravity Forms表单的电话号码增加11位手机号码格式

Gravity Forms提供了强大的表单系统,但是它的电话号码格式却没有11位手机号码的格式,虽然我们可以用International这个选项代替(就是不限制格式),但终归不够完美。查了一下官方文档,把这个需求给填上吧。

直接上代码:

add_filter( 'gform_phone_formats', 'brain1981_phone_format' );
function brain1981_phone_format( $phone_formats ) {
	$phone_formats['china mobile'] = array(
		'label'       => '手机号码',
		'mask'        => false,
		'regex'       => '/^1(?:3\d|4[4-9]|5[0-35-9]|6[67]|7[013-8]|8\d|9\d)\d{8}$/', //手机号码正则
		'instruction' => "11位手机号码",
	);
	return $phone_formats;
}

查看详细 »

微信小程序支付功能开发与踩坑经验总结

2021年3月11日更新:
本文虽受到一定关注,但时隔3年多,其中代码以及安全性都已过时,为避免各位踩坑,请移步我的另外一篇文章:https://blog.brain1981.com/2354.html
本文评论区大家所提出的其他问题,也都已在这篇博客列出的代码中解决,如果你不是用WordPress也没关系,其中PHP部分稍加修改即可使用。


以下是原文:

早有耳闻微信小程序的支付功能开发是一步一坑,这两天果然踩了个遍。除了简要到令人愤怒的官方文档外,网上所有能搜到的相关文章,也没有任何一篇提供的代码是能够顺利跑通的。好在还有一部分前人的经验可以吸取,再加上个人的一点直觉引导,终于在凌晨的时候真机测试通过。

趁热打铁把踩过的坑罗列一遍,最后会附上真机跑通的代码。

首先是小程序支付功能的申请。在半年前我有另一个小程序项目,虽然当时没有开通小程序微信支付的需求,但是我留意过应用号(小程序号)后台微信支付的相关选项。当时,这个小程序因为绑定过已认证的服务号,因此小程序支付是可以直接申请的,无需任何费用。但是这次的项目,同样是另一个已经绑定过认证服务号的小程序,在微信支付界面,提示我要认证当前的小程序号才能开通微信支付,也就是说,绑定服务号还不够,必须把这个小程序号也交300元认证后,才给开通支付功能!真的很坑,好在客户没有什么怨言,非常配合地就把认证给办了…

一天后小程序号认证通过,就有了申请支付的入口:

果断选右边那个,根据给出的提示,到商户平台里面用小程序的appid绑定就行了。 查看详细 »

LNMP环境下PHP error日志的分段存储

之前记录过一篇如何建立并查看PHP报错日志的文章,见这里:https://blog.brain1981.com/1824.html

最近治下某个网站遭到攻击,产生了大量的PHP报错日志,甚至大量占用了磁盘空间。PHP日志文件是持续写入的,如果一直生成新的日志,这一个文件就会变得很大,无法打开。我又不想彻底关闭报错日志记录,只能对其进行分段,把每天的日志分为不同文件存储。 查看详细 »

上海WordPress / WooCommerce网站建设、微信小程序开发

JennyStudio作为一家小而美的建站公司,已拥有数十家长期客户,其中更有多家上市公司。我们把接到的每一个项目都当作自己的孩子一样培育,由此获得了大量客户的信任和长期合同。我们尤其擅长基于WordPress和WooCommerce的定制网站开发,如您有这方面的需求,请移步JennyStudio上海网站建设

基于WordPress和WooCommerce的网站开发,我们从不采用任何他人主题(无论免费还是收费主题),避免各种第三方不确定因素造成的技术困扰和侵权可能。
我们只做整站成品,为客户独立设计和开发定制自己的网站。因此我们出手的WordPress/WooCommerce网站不存在打开慢、设置烦、操作难、不符合中国人使用习惯等常见问题,更不可能和任何一个网站“撞脸”。

基于WordPress和WooCommerce做网站的公司有很多,他们中的绝大部分承接建站项目的流程是这样的:
买一款国外主题 -> 装几个插件 -> 配上客户自己的产品图片和文案 -> 上线 查看详细 »

CentOS7.4安装新版node.js过程记录整理

发现阿里云的云主机可以按最短一周时常购买了,以后做测试环境,花点小钱买台短期主机做测试的成本又降低了(虽然ECS总体还是涨价了)。这次想尝试一下在最新的CentOS下安装node.js会不会踩坑,于是开干。

在失败了多次,东拼西凑了很多文章和教程后,终于把nodejs(8.7.0)给装上了,下面整理所用命令行以及过程。 查看详细 »