文章分类: WordPress

全世界竟然有超过40%的网站是基于WordPress创建的!
博主对WordPress长期深入研究,并有着大量的实践案例,总结了大量的博文笔记,是一位WordPress“硬核”玩家。
本博客不做泛泛的插件、主题分享,博主致力于WordPress深入开发技术的研究,主张牢牢掌握WP核心的开发能力,尽可能脱离插件和主题的束缚。

WordPress自动给图片增加fetchpriority属性的作用和控制方法

在WordPress升级到近期版本6.3以后,官方为了进一步提升WP的SEO表现,即在Largest Contentful Paint (LCP)方面的表现,会自动给一些图片添加一个新属性 – fetchpriority。字面意思可以理解为元素加载的优先级。参考文档点这里(https://www.searchenginejournal.com/wordpress-6-3-will-improve-lcp-seo-performance/491691/)。

我自己的WordPress博客,正文中就发现有一部分图片由原本WP自动给与的懒加载属性(loading=lazy)变成了这个优先加载属性(fetchpriority=high)。

通常这个属性会被添加在多图文的第一张图片中,如果第一张图片是一张小图片,则会顺延至后面的图片。这个过程不需要博客编写者参与,WP会自动完成这项它自认为的优化工作,但对于代码敏感的开发者,就有一点难受了。 查看详细 »

关于网站图片的渐进式加载和懒加载的实现

衡量一个网站SEO做得好不好的一个重要指标,是页面的打开速度,而影响一张网页打开速度的一个很重要的因素,是加载图片的大小。目前网络上流行的两个优化图片的概念,分别是渐进式加载懒加载。一个好的网站,需要同时对图片都做到渐进式加载和懒加载这两种处理。

懒加载,意思是浏览器加载页面的时候先不加载图片,视窗滚动到能显示图片的位置的时候,图片再自动加载。这样可以避免打开页面的同时因为要加载图片,导致的页面打开时间变长的问题。目前主流浏览器已经都可以不用JS实现了,只要给图片加上loading=”lazy”的属性即可。WordPress基本已经替我们自动实现了,只要是通过content或者thumbnail相关的函数调用的图片,WP自动会给它们加上这个属性:

查看详细 »

WordPress安全运维,后台记录用户注册、最后登录的IP地址

WordPress用户必然会碰到的一个问题,是各种注册、评论机器人会扫描你的网站,并试图发布垃圾评论和文章。而对于多用户的网站,我偶尔会碰到一些有发布权限的用户被泄露了账号密码后,账号就被这些机器人利用起来,在网站发布广告、甚至是违禁内容,如果不是第一时间发现并清理,还可能导致网站被搜索引擎甚至监管部门惩罚,后果严重。通常对于比较重要的网站,我会劝说客户把站点放到Kinsta服务器上,以获得较为可靠的安全庇护。你也可以安装Wordfence插件获取一定的保护,但这会牺牲一些服务器资源,导致网站变慢。

除此之外,我推荐的一个比较有效的方式是屏蔽那些会在你网站发布垃圾内容的IP地址,把这些IP地址通过服务器的iptables或者服务商后台的IP黑名单(比如加入阿里云的云盾)来屏蔽。那么问题来了,怎样获取这些IP地址呢?

对于发布垃圾评论的IP地址,这是比较容易的,WordPress后台会记录每条评论发出的IP地址。
查看详细 »

除了“愤怒的小鸟”,还有哪些游戏公司和游戏作品用WordPress建了官方网站

当今世界上有43%的网站的网站是基于WordPress开发的,最新统计数据见此。基于这个数据,很多人会好奇这其中有哪些知名网站呢?WordPress官方的Showcase列举了不少,其中游戏行业中最著名的案例是“愤怒的小鸟”。这个例子被很多人转载过,耳朵都听麻了…在游戏行业待过几年的我,其实一直对只有这个孤例挺不服的,就我自己,用WordPress建过的游戏网站就不下10个了,其中有游戏官网,也有游戏公司/工作室的官网。部分案例可以点 这里 了解。

不过很可惜由于行业性质使然,绝大部分的游戏产品和游戏公司都活不过几年,不说上古的案例,就是三四年前的作品,至今仍然能够在线的都是寥寥无几。所以为了让WordPress能够服人,还是得自己调查一下目前的游戏行业里,有哪些在线的WordPress网站可以看。有人问起类似问题,我们作为WordPress的拥护者也可以此“狐假虎威”一番。

首先让我倍感惊喜的是20多年经久不衰的即时战略游戏《帝国时代》,目前的官方网站https://www.ageofempires.com就是一个WordPress网站。网站本身设计风格比较老旧,估计也是有一些年代了,应该是结合了历代帝国时代的UI素材的锤炼的产物。本人也是一位浅度玩家,前两天帝国时代4还发行了最新的DLC,这个系列我都会品味一下单人剧情。
查看详细 »

WordPress网站通过IP地址区分不同国家的用户并重定向到不同的子站点

如果开发者要自己实现通过IP地址决定跳转不同的URL,方法主要分为前端和后端不同的做法:

  • 后端做法,在服务器安装Geo IP扩展,然后再PHP代码里面写判断,做重定向。
  • 前端做法,通过JS请求第三方IP数据库查询国家,然后用JS跳转,这个本质上不叫重定向,而是从浏览器跳转,SEO不友好。资源可以参考这个:GeoJS

以上两种方法都不是我现在用的方案,因为做WordPress外贸网站我们用Kinsta的服务器,他提供直接实现的设置工具,就完全不需要自己去找GEO数据库和搭建环境了。

Kinsta上建立WordPress网站后,工具菜单里有Geolocation,一键开启。
查看详细 »

用Yoast SEO插件做搜索引擎优化,必须都要达到绿点吗?

我的一篇知乎回答,其实也是很多SEO新手会问的问题,略作修改后收录到博客。原答:https://www.zhihu.com/question/607406981/answer/3081451254

过去几年中我在不少于50个网站上使用Yoast SEO插件,大部分为免费版,付费版客户只有四五个。对大部分企业网站来说免费版完全够用,没必要让我的客户再去掏钱购买付费版。

先说结论,绿点有一定的参考价值,但要分场合。

绿点(SEO分析工具)的大致原理:Yoast会用你在“Focus keyphrase”中填写的关键词作为分析基点,检查你的文章标题、正文内容是否符合SEO条件,给出一个分值,如果分值高则显示绿点。

那么问题来了,有两种情况你是不可能拿到分值的。

第一种情况是你压根就没有填写Focus keyphrase。


查看详细 »

即取即用地修改WordPress插件、主题的字段翻译

WordPress的本地化最标准的手段是通过翻译文件进行翻译,之前写过一篇博客“WordPress很多插件不支持中文怎么办?”简单地介绍了实现方法。即使你不会写一行代码,也能通过Poedit这款软件对WP的主题和插件进行翻译。

不过有时候我们会需要对某个页面的某个字段,进行特别标注的翻译,不使用po文件里的翻译,这怎么实现呢?

其实很简单,通过gettext钩子,单独写一个函数返回特定的翻译内容即可:

1
2
3
4
5
6
//from: https://blog.brain1981.com
add_filter('gettext', 'brain1981_change_translation', 20, 3);
function brain1981_change_translation( $translated_text, $untranslated_text, $domain ){
	//... do something
	return $translated_text;
}

查看详细 »

WordPress无插件修改评论通知收件邮箱

开启评论的WordPress网站默认会在有用户提交评论后,发邮件给管理员;出于网站安全考虑我们还会把评论设置为需要通过审核才能发布,这种情况下评论通知邮件会变成“有评论需要审核”通知邮件。这两个设置在后台的Setting – Discussion下。如果你的网站比较“热闹”,你就会经常收到评论通知邮件。如果你不想这样被频繁打扰,也可以去掉这两个勾选:
WordPress关闭评论通知邮件 查看详细 »

WordPress很多插件不支持中文怎么办?

新手用WordPress喜欢装各种插件,装了这些插件又苦于他们没有中文界面…

这是一篇本人写于知乎问题的回答,自己博客再发布一下,文章略有修订。原答链接:https://www.zhihu.com/question/55772594/answer/2975663716

WordPress庞大的生态,使全世界任何国家地区的开发者都可以加入为他开发插件和主题,所以在这个生态里,绝大部分插件和主题都是第三方开发者开发的,这个第三方可以是技术实力雄厚的公司,也可以仅仅是一个个人开发者,甚至可能是个刚刚研究WordPress没几天的初学者。这些人中,母语汉语的中国人不是没有,但总体比例肯定是少之又少。

如果一个不说汉语的人开发了一款插件或主题,那它的界面自然是基于开发者的母语的,如果想要它提供中文界面,就需要另一位懂中文的人翻译这款插件。翻译插件/主题还有一个重要前提,就是被翻译的插件/主题需要基于标准的语言规则,把界面文本写入po文件,这样其他语种的人才能借助翻译软件,像填excel表那样填写对应字段的翻译。

这是用Poedit软件打开po文件,进行插件/主题翻译的截图:


查看详细 »

WooCommerce微信小程序开发 – 自己写一个购物车查询接口

做基于WooCommerce的微信小程序,一个绕不开的技术点是需要自己写购物车的接口。WooCommerce至今都没有在自带的Rest API中提供购物车接口,我一直认为这是一个遗憾。

在查了一些资料后,我大致能明白WooCommerce不提供购物车接口的原因,因为大部分的第三方并不需要WooCommerce来提供购物车数据。如果你用WordPress+WooCommerce做后台,开发了一款独立APP,用户可以在APP上完成完整的购物流程,最轻便的做法是不让WooCommerce提供购物车数据,购物车只在APP本身提供即可,WP后台只负责提供商品和订单信息足矣。所以WooCommerce提供的Rest API是足够完成一款普通的第三方应用的需求的。但我们考虑另一种情况,如果你的WooCommerce同时以网站和APP两端提供服务,即同一个用户既能登录网站购物,也能从APP购物,那么你就要考虑购物车的数据同步问题了,要让网站的购物车和APP的购物车同步,我们就不得不需要WooCommerce端有购物车接口了。

这篇博客是对去年写过的一篇“WooCommerce购物车对象使用以及方法函数概括”,进行的一个扩展。在熟悉了购物车一些对象和方法使用后,我们是可以自己写一个购物车接口的。

首先定义一下接口:

1
2
3
4
5
6
7
8
9
10
11
12
add_action('rest_api_init', function(){
	//from: https://blog.brain1981.com
	register_rest_route('wx_app/v1', 'cart', array(
		'methods' => 'GET',
		'callback' => 'brain1981_rest_wc_cart_list',
		'show_in_index' => false,
		'permission_callback' => function ($request) {
			if (current_user_can('read'))
				return true;
		}
	));
});

访问这个接口的地址就是 https://你的域名/wp-json/wx_app/v1/cart, 主要业务代码放在brain1981_rest_wc_cart_list函数中。下面是这个函数的写法: 查看详细 »