作者都是各自领域经过审查的专家,并撰写他们有经验的主题. 我们所有的内容都经过同行评审,并由同一领域的Toptal专家验证.
斯科特•芬耐尔
验证专家 在工程
15 的经验

为世界上最大的律师事务所开发了主题和插件框架, Scott对大规模使用WordPress并不陌生.

专业知识

分享

Or, 致我之前搞砸的所有服务器:回顾我犯过的五个最糟糕的WordPress错误

作为开发者,我们在职业生涯的不同阶段会犯不同类型的错误. 在WordPress开发中, 特别是, 由于对英语的熟悉程度不同,我们会犯不同类型的错误 WordPress代码库 生长.

几年前,我听马特·穆伦韦格(Matt Mullenweg)说过一句话,大意是说,大多数人都会重复自己的错误, 聪明的人从错误中学习, 而我们当中最聪明的人会从中学习 别人的错误. 我很喜欢这个, 我还要加上一个推论:每个人都会犯错, 谦逊的人会私下分享这些错误, 我们当中最大胆的人会把它们写下来,发表在博客上!

但稍后还有时间思考. 你读这篇文章是因为你想知道火车相撞的事,而我是工程师. 没有进一步的序言, 和我一起回顾一下我作为WordPress开发者犯下的五个最尴尬的错误.

我更新了一个被黑掉的WordPress Core版本

我刚从CraigsList上一些很不起眼的编码工作毕业, 去真正的经纪公司工作. 我已经到了! 要在沙发以外的地方工作,穿着睡衣以外的衣服,我很紧张. 但即便如此, 我大致知道WordPress是对的还是错的, 我发现夸耀自己是一种愉快的自我夸大 WordPress最佳实践,比如从来没有“黑客核心”.”

我的第一个 WordPress开发 这家机构的任务是重新启动一个停滞的项目——就我当时的技能而言,这是一个相当复杂的项目. 它涉及到对WordPress注册和登录流程的大量定制. 之前的开发人员被认为仅仅通过编辑核心就取得了重大进展 wp-login 文件.

我知道这是不可持续的, 所以我的第一件事就是安装一个备份/恢复插件,并用新下载的版本替换WordPress核心. 我确信,到目前为止,在这个项目中还没有什么令人印象深刻的东西, 我可以通过过滤器模仿现有的功能集.

无论我当时是否具备编码能力,很快就变得无关紧要了, 因为我的新雇主快疯了. 她不理解“黑客核心”的意义,我也不够成熟,无法用一种容易理解的方式来解释. 唯一让她暂时冷静下来的是,当我向她保证我可以通过我安装的备份/恢复插件恢复.

你能猜到这是怎么回事吗?

那个插件,就像命运安排的那样,只备份了 wp-content 文件夹. 不管这些核心文件中的WordPress hack是什么,都永远消失了. 我还记得我给她回的邮件(她早就把我赶回了家里的办公室):

伙计们,我不能做后援.

我真的准备通过过滤器和操作来完成她想要的功能集, 但她不听. 她当场解雇了我,威胁要起诉我,而且从来没有给我两周的辛勤工作发过工资. 我觉得很丢脸.

我可以从这次经历中学到很多(现在很明显)的东西. 总的教训, 后备方案只有经过排练和确认才算后备方案, 是一个很好的例子. 但让我印象更深刻的是关于 如何 在WordPress中进行备份,尤其是在WordPress核心中.

我已经学会了真正珍惜像WP-Engine这样的托管环境, 具有健壮的备份/恢复系统. 许多小型主机都有各种命令行工具和其他针对开发人员的特性,用于执行备份, 但WP-Engine是我的最爱. 这是相当快的,除非你有一个非常大的网络. UI很简单. It 一个UI,句号:任何知道如何使用WordPress的人都可以使用它. I.e., 与一些可能更快的CLI方法相比, 或者是一些隐藏在Plesk中的晦涩的东西, 我的客户可以用这个, 理解它, 监控它, 并验证我是否在使用它. 我是你的超级粉丝.

我把我们的整个平台拖进它的兄弟目录

我对专业工作场所还是相当陌生的,而且一直都是Windows用户. 然而,我的新工作是在Mac商店,我很快就爱上了它的一切. 嗯,几乎所有的. 我似乎有很多麻烦与“神奇的老鼠.“我经常会失去蓝牙连接, 一旦它重新连接,就会导致意外的,经常是可怕的拖放动作. 更重要的是,我只是笨拙地掌握了一项新的精细运动技能.

在过去,我们的WordPress开发流程仍然包括通过FTP部署到生产环境. 对我来说,花上整个工作日写代码并不罕见, 聊天, 回答电子邮件, 通常通过我的新魔法鼠标来回旋转, 赛博达克已经在我的台式机上投入生产了. 天哪,这听起来很糟糕! 但事情就是这样.

有一天,我们的整个平台都消失了. 我们的系统管理员很快就认为这是某种DDoS攻击或他级别的攻击. 至于我们开发者,我们相信他的直觉,认为他很快就会明白.

几个小时过去了. 这一天来了又去. 仍然下降.

第二天早上, 一切都恢复了, 我们的首席技术官委婉地邀请我和她一起去会议室. 我们的系统管理员已经发现了问题. 他取出FTP日志并观察到我的用户将我们的整个平台移到了一个兄弟目录中. 也就是说, wp-content 已经嵌套在 wp-includes.

我很沮丧,但我们的首席技术官表现得很好. 她可以看出我是一个乐于助人、负责任的员工, 但她向我提出挑战,要我超越单纯的悔悟,想办法防止这种事情再次发生. 我发现了两件非常有用的事情.

首先是定位CLI命令,以防止Cyberduck允许远程到远程的文件移动. 这是一个很好的安全措施,我们立即将其作为公司政策.

其次,我对通过Git进行部署产生了浓厚的兴趣. 最后,我写了一个WordPress插件,将我们的Bitbucket版本融入到正常的版本中 wp-admin 更新流程. 从那以后,我们几乎没有理由 FTP访问生产环境. 这个插件是我最喜欢的专业成就之一. 当然,对于今天的开发人员来说,与Git有亲缘关系是一个先决条件.

时间我删除了所有前端内容通过 add_filter ()

我真的认为,到目前为止,我的WordPress实践已经非常聪明了. 要求在某一类别的员额上加上“徽章”. 出于某种原因,我认为只有新手才会在模板文件中添加这样的条件, 所以我非常自豪, 我实现了以下过滤器:

Add_filter ('the_content', 'myprefix_add_a_badge');
myprefix_add_a_badge(美元的内容) {

    全球美元的帖子;

    if( ! 有_category( 'sponsored', $post )  ) { return 假; }

    $out = 美元的内容 . myprefix_get_badge ();

    返回$;

}

看这有什么不对? 我在分期测试中迅速进行了测试,以确认必要的职位得到了申请. 然后我部署了它,下班了. 你可能猜到了,宇宙爆炸了.

具体地说, 结果是,没有徽章的帖子在前端呈现时根本没有内容! 你知道为什么吗?? 问题是,他没有回来 美元的内容 以我的守卫状态,我要回来了 . 但实际上这里有很多层次的错误.

为什么我只满足于测试帖子是否收到了徽章? 为什么我没有测试其他帖子是否完好无损? 为什么我要在这么晚的时候部署到生产环境? 为什么是我们的 质量 控件完全由我点击和刷新页面组成?

所有这些问题的答案可以概括为 成熟. 只是需要一段时间来厌倦犯这些错误, 在我们开始投资视觉回归测试和单元测试之前. 这个特别的错误是一根稻草, 在数百, 这最终压垮了骆驼,让我对它投入了大量精力 phpUnit和xDebug. 反过来, 这些工具教会了我如何编写可测试的代码, 这可能比测试本身阻止了更多的bug.

我在无限循环中除以零的时间

客户端要求重新格式化WordPress博客文章的署名,这样日期就会变成“XYZ ago”而不是“10 November”, 2011.“我不太确定如何做到这一点, 但我意识到这是一种似乎越来越流行的日期格式, 事实上,博士. 谷歌很快就给我提供了一个片段. 这在我的地方奏效了! 里面有很多数学,特别是,很多 部门. 我不太确定它为什么能工作——有很多嵌套循环、余数、舍入等等. 但它在谷歌上看起来很好用,我很高兴把它部署到生产环境中.

大约30分钟后,我从系统管理员那里收到了一个不友好的Skype. 产量下降. 死在水里. 他问我最近有没有除以0,我不知道他指的是什么. 事情是这样的.

信不信由你, 我找到了难以读懂的“在我的本地工作”片段, 给定足够大的样本量, 能做出一些异常行为吗. 提供了一些不幸的日子组合, 小时, 和分钟, 鲁布·戈德堡循环偶尔会尝试将一个数字除以零. 回想一下高中数学:

在普通算术中, 这个表达没有意义, 因为没有数字, 当乘以0时, 给出a(假设a≠0), 除以0没有定义. - 维基百科

那么这对计算机意味着什么呢? 通常在日志中只有一条错误信息, 但在我的情况下, 更糟糕的是:数学错误干扰了我的循环逻辑, 导致我的嵌套循环在没有完成的情况下运行——一个导致白屏死机的无限循环. 更糟的是! 因为循环的每次迭代都写了一个除零的错误, 错误日志增长到惊人的比例,并开始妨碍我们的文件系统. 这产生了DDoS攻击的效果,尽管这是一场荒谬的自我攻击.

这个错误的坏处是它导致了一个高流量的网站瘫痪. 这个错误的好处是,它极大地改变了我的工作方式. 更重要的是,我为自己在没有理解的情况下实施而感到羞愧. 我发誓再也不会在没有尽一切可能理解每一行的情况下粘贴代码片段, 如果有必要,甚至可以与代码片段的作者联系.

更重要的是,我发誓再也不会发布对新手开发人员来说可读性不高的代码. 我开始着迷于WordPress的编码标准, 文本编辑器扩展, 内联注释和文档块, 甚至制表符和空格, 那是经典的成人仪式! 总而言之,我决定更关心它是否容易 我的代码是多么容易 it. 这种对不理解粘贴的反抗使我对管理第三方依赖产生了浓厚的专业兴趣, 在接下来的十年里,这个话题为我提供了各种写作和演讲的机会.

我决定更关心它是否容易 我的代码,比它有多容易 it.

这个错误最有趣的地方是? WordPress core有一个 一行程序 解决方案.

我让一个项目失去控制,直到每个人都厌倦了它

我得到了一个非常有趣的项目. 我将成为技术主管和WordPress开发工程师, 我会有一个亚马逊AWS Lambda开发人员和一个JavaScript方面的资深专家向我汇报. 这是我第一次有这么多人向我汇报工作, 这是迄今为止我参与过的最复杂的项目. 甚至将其称为WordPress项目都大大低估了事情的严重性, 但WordPress是把整个事情粘合在一起的粘合剂, 所以让我担任技术主管是合理的.

因为我的主要角色通常是严格意义上的技术人员, 也因为我喜欢极简主义, 我从来没有想过要实现像Jira或Basecamp这样的东西,或者任何真正的任务管理平台. 项目的第一次迭代进行得相当顺利. 我们能够在我们自己的组件上工作, 参考客户端规范文档作为我们的产品路线图, 当我们需要把事情放在一起的时候,就通过Slack联系对方.

当我们开始向客户展示进度并执行他的反馈时,问题就开始了. 刚开始只有三个人的团队立刻觉得自己被提升到了一个新的量级:谁负责哪一点反馈都不清楚, 执行反馈的状态是什么, 甚至不知道到底是谁在跟谁说话. 我们好几次超过了Gmail每个帖子100个回复的限制!

事情开始变得不舒服. 我认为客户觉得他已经失去了对项目方向的控制, 同样重要的是, 他觉得自己失去了对项目状态的可视性. 我的亚马逊开发者有一天提到,“我想知道我们是否应该使用Trello.”

我想. 一个三人团队需要这样的平台吗? 同样,我通常倾向于更少的工具,更少的开销,更少的复杂性. 但是这个项目已经把我们都拖下水了,所以尝试一下又有什么坏处呢?

我把我们所有的邮件都翻了一遍, 我们所有的规范文档, 所有不同的评论线程, 并把它们都画在了格子板上. 立即, 这个项目从它的数字坟墓中复活了,因为我们可以用更少的脑力开销进行交流. 而不是在我的电子邮件收件箱或大多过时的规范文档中搜索文本, 我们有漂亮的板子, 列表, 和卡片. 很容易看到任何功能的状态,整合反馈,并分发新任务. 感觉就像我们逐渐失明了,慢到我们都没有注意到,然后突然就可以了 看到 再一次。.

授予, 代码不会自己写出来, 这仍然是一个非常具有挑战性的项目, 而且我们还得使出浑身解数. 但这就是重点:因为我们终于有了一个理解项目的基础设施, 我们现在是 免费的 运用我们的技术.

我很高兴地说,那个项目的完成让客户非常满意. 如今,我认为Trello或Jira是两人或两人以上团队的实际需求.

向前走,从别人的错误中学习

这是我在军队里听到的最聪明的事情之一:“中尉犯中尉的错误没关系,上尉犯上尉的错误也没关系。. 上尉犯中尉的错误才是不对的, 也不允许中尉犯私人错误.”

换句话说,做 常见的错误 就你目前的责任水平而言,这是理所当然的事. 更重要的是你如何从中成长.

我希望作为开发者的我们能够学会在别人犯错时同情他们, 希望其他人也和我们在一起. 我希望在犯错误的时候保持好奇和负责任,这样我就能继续创新. 我希望身边总是有一个鼓舞人心的社区 WordPress专家——我可以从他们的错误中吸取教训,避免重蹈覆辙. 最重要的是, 我希望其他人能从我的经历中学习, 比如我在这里分享的WordPress错误.

了解基本知识

  • 什么是WordPress核心文件?

    它们是WordPress的内部引擎,应该安全地藏在引擎盖下:你可以阅读它们, 但是不要编辑它们, 因为下次更新WordPress时,您的工作将被覆盖. 相反,开发人员通过主题和插件与WordPress集成.

  • WordPress是用什么编码的?

    大多数WordPress插件开发人员用PHP和JavaScript编写大部分代码, 使用更少的HTML和CSS. 主题开发人员使用相同的语言集,但优先顺序大致相反. 很少有主题或插件开发人员需要编写SQL.

  • 如何创建WordPress开发环境?

    传统的选择是MAMP. 它是一个简单的开源产品,很快就支持phpMyAdmin和在不同语言版本之间切换.

    近年来, 一些较新的选择赢得了可观的市场份额, 比如《欧博体育app下载》, Local by Flywheel, 以及Pantheon的Multidev.

  • 我应该使用什么插件WordPress?

    查询监视器是调试的实际需求,当查询或远程请求变得太慢时,它还会提醒开发人员. Yoast SEO为客户提供了一个非常全面的UI来管理SEO标题和元数据, 还有社交媒体协议. 联系表格7是“联系我们”表格的可靠解决方案.

  • 我在哪里找到WordPress插件?

    找到插件最好的地方是WordPress.Org,因为那里有一个强健的生态系统,可以提供审查、支持和社区. 在GitHub上可以找到更多面向开发人员的前沿插件. 这也是WordPress核心开发人员准备未来核心功能的地方, 从插件开始.

聘请Toptal这方面的专家.
现在雇佣
斯科特•芬耐尔

斯科特•芬耐尔

验证专家 在工程
15 的经验

波特兰,缅因州,美国

2017年2月20日成为会员

作者简介

为世界上最大的律师事务所开发了主题和插件框架, Scott对大规模使用WordPress并不陌生.

作者都是各自领域经过审查的专家,并撰写他们有经验的主题. 我们所有的内容都经过同行评审,并由同一领域的Toptal专家验证.

专业知识

世界级的文章,每周发一次.

输入您的电子邮件,即表示您同意我们的 隐私政策.

世界级的文章,每周发一次.

输入您的电子邮件,即表示您同意我们的 隐私政策.

Toptal开发者

加入总冠军® 社区.