13分钟阅读

这12个最糟糕的错误高级WordPress开发人员

Gabriel是一个基于伦敦的全堆栈Web开发人员,拥有7年以上的PHP和WordPress插件和主题开发经验。

WordPress. is a very popular way to get a site up and running quickly. However, in their haste, plenty of developers end up making horrible decisions. Some mistakes, like leaving WP_DEBUG set to true may be easy to make. Others, like lumping all your JavaScript into a single file, are as common as lazy engineers. Whichever mistake you manage to make, read on to find out the the 12 most common WordPress mistakes that new and seasoned developers make. If you find yourself committing one of these mistakes, don’t despair. Each mistake is an opportunity to learn.

WordPress.开发人员制作的顶级错误

1.将WordPress主题JavaScript代码放入一个主文件

Once, while doing page speed optimization for a client’s websites, I noticed they were using a premium theme that had all the libraries they were using, including the custom code, in one single file called main.js, theme.js or custom.js. This practice is bad for the following reasons:

  1. 在时间上,文件可以非常大作主题,正在积极开发,将在功能中增长,有时您会将文件视为1 MB的大小。即使在某些页面中只需要来自文件中只有10%的代码,该文件将被加载。这将使页面需要更长时间才能下载并慢渲染,特别是如果是 渲染阻止 页面的头部内的代码。
  2. It makes managing the code inside the file more difficult, as you can’t use functions such as wp_dequeue_script() to unload some of the code in some pages to either improve the page speed or to prevent a conflict with other JavaScript code that could be loaded by one of the active plugins. Sure, the file can be split into multiple ones and enqueued in WordPress, but if at some later point, the website administrator performs an update of the theme’s main.js file, then the whole process has to start all over again.

2.使用太常见的变量,函数,常量或类的名称

在开发插件时,最好使用阻止代码冲突的命名约定,以防使用相同名称的其他插件。这就是为什么许多开发人员将其变量和函数名称与唯一和与插件本身相关的函数名称。除了消除代码冲突之外,它还更容易找到启用了大量插件的东西。

另一方面,有开发人员更喜欢使用PHP命名空间封装项目并解决库和应用程序的两个问题作者在创建可重用代码元素(如类或函数)时遇到:

  1. 他们创建的代码和内部PHP或第三方,类,函数或常量之间的名称碰撞
  2. Ability to alias (or shorten) Extra_Long_Names designed to fix the first problem or improving readability of source code. This one is my favorite since I often develop themes or plugins that have a lot of code. With this, I can read and manage the code easily without having to worry much about having long unique names.

在使用之前,我建议对命名空间进行良好的理解,因为它们通常可以以错误的方式使用。

根据您将在船上的项目中,您可能会坚持使用现有的编码风格,除非您的工作大多是与现有的作品。如果您必须扩展已经遵循的现有插件或主题 PHP编码标准 for WordPress, then it’s best to stick with them in order to have a consistent style so the code becomes clean and easy to read. Note that some rules are universally applied in order to improve performance, disregarding the coding style. For instance, it’s always best to use single quotes (instead of double ones) if you’re not evaluating anything in the string. Also, the code has to be indented in order to be read, especially if it has nested code (e.g., IFs within IFs, nested FOREACHs and FORs).

3.不利用现有的WordPress核心功能,以确保其真实潜力

正如WordPress都在我们的插件和主题中携带一套定期更新的库,最好尽可能多地使用现有的核心功能。我已经看到了WordPress核心文件中有文件的WordPress主题和插件(例如,在WordPress核心文件(例如,jQuery或Color Picker)中。除了这个包装将变得更大并需要更长时间才能加载网络,您还必须确保所有第三方库定期更新,这只是照顾的另一件事。

利用已经提供的WordPress是什么,因为图书馆已经被WordPress开发核心团队更新,您可以重量轻,更易于维护项目。通过定期进行WordPress更新,您可以访问更多功能(无论是插件,主题或WordPress核心本身,因为它的仪表板一直有所改进),并在旧代码版本中发现漏洞中的网站更安全。

4.通过动作和过滤器可以轻松改变插件或主题

直接编辑WordPress插件或主题是一个坏主意,除非当然,您直接参与该包的开发并贡献其代码。如果对插件或主题执行自动更新,则对包的任何直接更改都会丢失,并且您将必须重新编辑文件。

这就是为什么使用操作和过滤器以及创建子主题(扩展父主题)是修改主题的最有效的方法,因为您可以在不编辑父主题或插件本身的情况下更改现有功能,因为您可以更改现有功能。此外,如果您在WordPress.org上提供免费下载插件,稍后您想创建一个依赖于父插件的高级扩展,那么您应该以这样的方式开发免费插件易于扩展并添加高级扩展。

5. Developing with WP_DEBUG Set to false

By default, the WP_DEBUG constant is set to ‘false’ to avoid printing any PHP errors, warnings, and notices. On a live environment, this is a recommended choice as it keeps private server paths and scripts hidden from the public view, which is great for security reasons. However, during the development stage, it’s best to have it set to ‘true’ as it will notify us of any errors in our code. Even if the errors don’t directly affect the functionality, it will often force you to write better code and develop better coding habits. It happened to me. This will also ensure that the plugin or theme you develop doesn’t generate PHP errors in any WordPress installation.

虽然这是最经验丰富的开发人员所做的事情,但它发生在匆忙中。无论工作多么紧急,开发人员都应该始终尝试维护WordPress编码标准,并在PHP最佳实践中有明显的眼睛。

6.编写PHP代码而不考虑一天可以缓存页面

这是一个常见的PHP错误,就像前一个一样,如果您坚持PHP编码标准,则相对容易避免。

一些开发人员习惯于将PHP片段实现为主题和插件,只有在所有时间触发PHP代码时才有效。例如,应拍摄与某些操作响应HTTP用户代理的PHP函数(例如,仅用于移动用户的lecuing脚本)。

如果您的客户端安装一个插件,请在不触发主题或插件的情况下缓存页面(例如,W3总缓存或WP火箭),您的PHP代码将呈现无用。如果意图是响应页面,那么这应该通过媒体查询和JavaScript在前端侧完成。后者,只有它真的需要。理想情况下,您希望避免使用JavaScript响应您的网站。

7.不跟踪以专业方式通过诸如Git的版本控制系统进行的更改

定制编码的文件,例如子主题或自定义插件,理想地应按版本控制。 Git创建了更改的记录,允许开发人员在同一WordPress项目上一起工作,或者在网站出现问题时轻松恢复到以前的版本。此外,客户可以使用git来跟踪所有为该特定项目雇用的开发人员完成的所有工作历史,特别是如果它是一个大型的长期WordPress自定义网站。

虽然它可以在开始时令人生畏,特别是对于初级开发人员来说,了解Git将值得时间和一个Git GUI软件,如Sourcetree(我的最爱之一)只是你与你的Git存储库互动的方式,使得整体学习曲线更愉快。了解它是如何工作的,考虑检查 Toptal开发人员的Git最佳实践和提示 这在使用Git的几种方法中以更深入的方式解释。

8.当不需要时延长CSS和JavaScript文件

拥有许多HTTP请求将使网站加载较慢,从而在Google Pagespeed中具有较低的分数,这可能会影响搜索排名。由于插件之间的冲突,它也可能导致JavaScript错误。例如,可以使用常用jQuery库有两个插件,该库可能会加载两次并且可能会导致问题。而且,这是最好的例子,因为jQuery多次在实时网站上非常常用。这可能是由于书写不佳或主题而发生。

9. Using .php Files to Output CSS or JavaScript Code Instead of Static .css and .js Files

I’ve seen themes and even WordPress plugins that had files such as style.php that were used just to generate custom CSS code and print it. Things such as colors, font sizes and spacing around elements were set in the theme’s settings and then saved in the database. Then style.php is read (e.g., <link rel='stylesheet' type='text/css' href='css/style.php?ver=1' />) and generates the CSS code based on the custom settings that were updated in the dashboard.

这对WordPress性能来说真的是一个不好的做法。这是它的主要缺点:

  1. As the CSS file is loading within the head tag (which is normal and most of them are loading like this), there is a performance issue that comes with this as the browser has to download the file completely before rendering the page. If the WordPress environment is slow because of some plugins, then this will delay the load time considerably. Even if caching techniques are used or only part of the WordPress environment is loaded in order to retrieve the values from the database. It’s best to use a static .css file instead.
  2. 在PHP文件中,代码(与PHP变量和条件条款混合的CSS规则)将在需要查看某些内容时更加难以读取开发人员。当然,文件可以在浏览器中运行(虽然我确定它是打印的,但它甚至不会缩进或漂亮,但如果您有项目的本地副本并浏览主题的代码,则需要找到CSS或JavaScript语法(如果使用script.php),那么它将更加困难。

The solution: Save any custom CSS outside the plugin directory. Example: /wp-content/uploads/theme-name-custom-css/style-5.css. This way, in case the theme or plugin get updated, then the custom file will not be lost.

10.没有使用正确的架构(代码组织)来获取WordPress插件和主题

根据插件的大小和性质(例如,仅当主插件被激活的独立插件或仅适用于Woocommerce),必须设置正确的架构和代码组织。

如果您必须为客户端构建一个单一的WordPress插件,它具有与WordPress核心,主题和其他插件有限的交互,则为工程师复杂类没有有效,除非您是肯定插件将在以后大大扩展在。

If the plugin is going to be featured rich with lots of code, then using an Objected Oriented Programming (OOP) coding approach (having lots of classes) would make sense. For instance, if you have lots of shortcodes, you can have them all kept in a separate class file such as class.shortcodes.php or if there are CSS and JavaScript files that are meant to be loaded within the Dashboard and front-end view then one class such as class.scripts.php can be used and enqueue the front-end files within a method such as enqueue_public_scripts() while enqueuing the files meant to load in the admin area within the enqueue_admin_scripts() method.

通过将MVC模式实现到插件和主题中,更好地将其与PHP代码混合,而不是将HTML混合。一个很好的例子是Woocommerce插件。它具有各种布局的模板,这些布局也可以通过主题或各种过滤器轻松覆盖,因为逻辑与设计分开。包含HTML布局的模板主要用于打印已处理的信息。在PHP方法中具有HTML代码通常是一个糟糕的做法(对于HTML代码的小比特的课程存在例外),尤其对于由多个开发人员维护的插件,它在大小上增长。

根据WordPress插件手册,虽然有许多可能的架构模式,但它们可以广泛地分为三种变体:

11.编写代码时没有认真对待WordPress安全性

由于许多新手开发人员在客户想要的结果上,许多新手开发人员往往没有严重地进行安全。一切都很好,直到客户的网站被黑客攻击或在WordPress.org上发布的插件有漏洞,留下了数千个受影响的网站。这些事情有时会发生,甚至WordPress核心甚至是自CMS早期自CMS早期以来的公平安全漏洞。我们有责任使其尽可能安全,如果发生某些事情,请及时采取行动,并确保我们释放稳固,经过良好的补丁。

一些最重要的安全提示是:

XSS漏洞:避免此操作,必须完成两件事:消毒数据输入和Sunitize输出数据。根据数据和上下文,它在WordPress中有几种​​方法来消毒代码。一个不应信任任何输入数据,也不是要打印的任何数据。用于消毒数据输入的一个常见功能 sanitize_text_field()。它检查无效的UTF-8字符,转换单个<HTML实体的字符,条带删除所有标签,删除线条中断,标签和额外的白色空间和条带八位字节。至于打印数据,输出链接的一个很好的例子是 esc_url() 拒绝无效URL的函数,消除了无效字符,并删除危险字符。

防止直接访问文件:可以直接访问文件,因为大多数主机允许。但是,如果发生这种情况并且代码未正确编写以处理它,可能会打印一些错误(例如,缺少的函数或未声明的变量),其包含对潜在攻击者有价值的信息。您经常在插件和主题中看到的一个常见代码片段是:

// Exit if accessed directly
if ( ! defined( 'ABSPATH' ) ) exit;

If the constant ABSPATH is not defined (which should be for any WordPress install), then the script will exit and print nothing.

使用NONCES:如在WordPress中所述 文件,ANNCE是“使用一次”,以帮助保护URL和表格从某些类型的滥用,恶意或其他类型。

For instance, the following URL within the dashboard would be used to trash a post: http://example.com/wp-admin/post.php?post=123&action=trash—When accessing this URL, WordPress will validate authentication cookie information and if you have the right permission (e.g., you’re an administrator with all privileges), that post will get deleted.

攻击者可以做的是通过在以下示例中制作第三方页面上的链接来使您的浏览器访问该URL,而不是您的知识: <img src="http://example.com/wp-admin/post.php?post=123&action=trash" /> 在将此请求进行WordPress时,浏览器将自动附加身份验证cookie,WordPress将请求视为有效。

这是当攻击者无法获取容易的攻击者的annonce值(为实际登录WordPress的管理员生成)时,当攻击者无法进行那样。新的请求URL将如下所示: http://example.com/wp-admin/post.php?post=123&action=trash&_wpnonce=b192fc4204

如果没有有效的随机数,将通过WordPress与众所周知的错误消息发送到浏览器的403个禁止响应:“您确定要这样做吗?”

虽然大多数人不认真对待WordPress安全性,但认为他们的网站永远不会被黑客入侵,相信托管(这可能是有帮助的,而是只到某个点)以及他们购买商业插件/主题的事实(通常会领导为了假设它们非常安全),我们应该始终为我们的网站进行渗透测试,以便在任何黑客能够识别和利用它们之前识别可利用漏洞。

请注意,大量的黑客队甚至没有由一个人完成,打算专门地破解您的网站。通常情况下,有机器人在一致的基础上自动扫描WordPress网站,并找到已知漏洞的那一刻,它被利用,并且服务器用于垃圾邮件,从数据库中获取私人信息,在网站的某些页面中放置隐藏的链接会导致各种狡猾的网站(例如,色情,非法药物)。有时,Hacks隐藏起来,您需要正确扫描您的网站,并在更新特定文件以便检测到黑客代码时查看日期。这就是为什么甚至重新安装WordPress(是的,如果您有最后一个),那么任何黑客文件都将被真正的WordPress核心文件覆盖。

12.使用WordPress函数和代码片段而不理解它们

经常,当开发人员陷入困境并找到一个像stackoverflow这样的地方的解决方案时,他们很高兴他们设法在不打算了解该代码背后的逻辑或者如果该代码可以更改以更快或较少的情况,他们就会感到满意代码行。

当实际使用的代码中的三分之一时,我已经看到了这么多次代码片段在PHP脚本中复制了这一惯例。

这可能有很少的缺点,包括:

  1. 代码不使用与现有项目代码相同的样式。是的,只需复制和粘贴开箱即用的代码件,虽然它们对于一个小型个人项目很好(但是有一天会变成一个大项目,那么这项练习往往不好对于必须保留风格一致性的商业工作。
  2. 虽然代码是其作业,但它可能包含无效的功能,不建议要实现的任务。如果代码未进行优化,则此“副本和粘贴”练习可能导致缓慢而难以维护网站,特别是如果在项目中的各种位置使用多个代码段。
  3. 代码可能不会被许可以进行重用,并且包括客户端项目中的代码可以打开它们到大量的法律问题。

不断改进

每个人都犯错误,每个错误都是改善自己的机会。作为 WordPress.开发人员,我们的行业以非常快的步伐移动,从来没有一个设置的“正确的方式”做事。然而,你练习和学习越多,你就会变得更好。

你不同意我指出的任何错误,还是认为我错过了一个?让我在评论中知道,我们会讨论。