WordPress插件开发的9个技巧

WebFX总统。Bill在互联网营销行业有超过25年的经验,擅长SEO, UX,信息架构,营销自动化等。William在希彭斯堡和麻省理工学院的科学计算和教育背景为MarketingCloudFX和WebFX的其他关键研发项目提供了基础。

在这篇文章中,我想分享一些我开发WordPress插件的技巧。

我的背景

我已经开发了20多个WordPress插件。其中一些是为客户提供的,一些是在WordPress插件目录中免费发布的,另一些是作为合资企业,或在CodeCanyon等市场上出售的。我所开发的插件已经被安装在超过5万个网站上。

我在高端市场卖了五千多本。在这段经历中,我学到了很多教训,我想在本文中与您分享。

1.使用正确的钩子

钩子是插件和更大的生态系统(WordPress)之间的桥梁。没有钩子就不能写插件。你会惊讶于有多少插件滥用它们。

正确使用钩子的第一步只是花适当的时间通读官方文档钩子插件API.您希望深入了解哪个钩子在序列的哪个部分触发—从页面请求,一直到将内容发送到浏览器。的行动参考API向我们展示了东西通常的发射顺序。

有很多钩子可以选择,根据插件的功能,你可能需要连接其中的许多钩子。我总是遵循这样的做法:将功能细分,以便尽可能地在我的钩子中相关地分布。这是因为,对于插件开发,采用“及时”(JIT)的心态,只在需要的时候运行代码是一个好主意。

如果您需要设置一些全局变量或注册post类型,而不管加载的是什么页面,那可能都应该被触发初始化.您不应该准备HTML,也不应该做任何繁重的处理初始化在大多数情况下。任何费力的处理初始化hook将意味着所有前端页面加载、管理页面加载、AJAX请求等都将受到这些沉重进程造成的延迟。

这不是理想的和应该避免以获得更好的性能。

  • 检索设置(取决于用户类型和请求的页面)
  • 捕捉发送数据

更新:感谢那些在评论中纠正我的人。正确的排队脚本的钩子是' wp_enqueue_scripts ',我已经更新了下面的例子,以使用这种更干净的形式(最佳实践)wp_enqueue_scripts钩。您将看到,我非常小心地只为每种类型的页面提供所需的资源。

没有管理样式表,除非用户正在加载一个插件管理页面。同样,没有为后端接口加载前端样式表。

<?插件初始化add_action(' Init ', 'examplePlugin_init');函数examplePlugin_init(){全局$examplePlugin_Settings;#}检索设置(如果未加载)$settings = $examplePlugin_Settings->getAll();@ examplePlugin_enqueueScripts(){#}管理和公共(全局)脚本(我通常确保jQuery的对齐)wp_enqueue_script(" jQuery ");#} Public-Global - JS & CSS wp_enqueue_script('examplepluginjs', plugins_url('/ JS /examplePlugin.min.js',__FILE__),array('jquery'));wp_enqueue_style (exampleplugincss, plugins_url (/ css / examplePlugin.min.css, __FILE__));#}任何特定启用的元素if ($settings['showElement'] == 1) wp_enqueue_script('examplepluginextrajs', plugins_url('/js/ exampleplugin . extrafeate .min.js',__FILE__), array('jquery'));添加到钩子add_action('wp_enqueue_scripts', 'examplePlugin_enqueueScripts');Admin & Public(全局)脚本(我通常确保jQuery的对齐)wp_enqueue_script(" jQuery "); #} Admin-Global - JS & CSS #} Try not to use these, unless specifically necessary, use the below method #} Admin only + specifically a plugin admin page if (examplePlugin_isAdminPage()) { #} Plugin-specific Admin styles wp_enqueue_style('examplepluginadmincss', plugins_url('/css/examplePlugin.admin.min.css',__FILE__) ); } #} Admin only + WordPress Edit Page specifically if (examplePlugin_is_edit_page()){ #} Anything which is to load on the edit post/edit page, page #} For example shortcode inserter functionality } else { #} Anything which is to load on non-editor admin pages } #} Admin only + WordPress editor on page if (get_user_option('rich_editing') == 'true') { #} This is another way of targetting the WordPress Editor #} In this instance we use this to localize a script: wp_localize_script( 'examplepluginadminjs', 'exampleAJAX', array( 'ajaxurl' => admin_url( 'admin-ajax.php' ))); } } #} Add to hook add_action( 'admin_enqueue_scripts', 'examplePlugin_enqueueAdminScripts' ); #} Example function for detecting if the requested page is an edit page function examplePlugin_is_edit_page($new_edit = null){ #} Global global $pagenow; #} Ensure we are in admin if (!is_admin()) return false; #} Detect edit page type if($new_edit == "edit") #} Edit page return in_array( $pagenow, array( 'post.php', ) ); elseif($new_edit == "new") #} New Edit page return in_array( $pagenow, array( 'post-new.php' ) ); else #} New or Edit page return in_array( $pagenow, array( 'post.php', 'post-new.php' ) ); } #} Determines if this is our admin page function examplePlugin_isAdminPage(){ #} This is defined on init, and is a simple array of page slugs global $examplePlugin_slugs; #} Detect page if (isset($_GET['page'])) if (in_array($_GET['page'],$examplePlugin_slugs)) return true; return false; }

除了初始化wp_enqueue_scripts而且admin_enqueue_scripts,您可能需要使用以下Action钩子的组合,这对于大多数插件来说足以模块化代码逻辑,而不会引起性能问题或可维护性挑战。

  • admin_menu
  • admin_notices
  • wp_head
  • wp_footer
  • wp_ajax_(yourFunction)

注意:有些主题会逐渐消失wp_footer,(有时甚至wp_head),支持他们自己的版本。这些WordPress主题通常都是快速编写的,或者是黑客式的,但它们比你想象的要常见得多。因此,如果你的意图是提供通用的兼容性,那么总是用尽可能多的主题来测试你的插件。

2.利用WP Cron

Cron是最初为UNIX构建的任务调度系统,它允许用户在指定的时间执行命令。你知道WordPress核心有一个内置的cron功能吗?这个特性被恰当地称为wp cron

如果你的插件有一个例行任务需要运行,wp cron可以用来启动任务。但是Wp cron有它的局限性。例如,它依赖于网页请求,如果WordPress站点没有高流量,就会导致任务延迟触发。

但这些限制是可以解决的。对于流量大的站点,以及那些设置了自动ping的站点,wp cron是创建类似cron设置的一种令人愉快的方法。其他鲜为人知但很有用的WordPress特性有:

3.利用自动更新

从WordPress 3.7开始,WordPress插件和主题开发者就可以自动更新了。这个功能在默认情况下是不启用的,必须由用户或通过插件打开。不建议使用后者,因为用户应该明确地选择自动更新。

但是,最好是通过插件的管理界面突出显示/提醒用户关于自动更新选项。如果启用,自动更新是持续WordPress插件开发的绝佳工具。它非常适合推出安全补丁、热修复和版本发布。

在WordPress.org上列出的插件可以通过它们的存储库自动管理插件版本。

4.考虑使用MVC设计模式

WordPress插件在使用MVC架构创建时获益良多。对于可维护性、模块化和许多其他原因,没有更好的选择了。MVC让你的插件架构变得简洁和有组织。

在一些奇怪的情况下,我仍然使用我所称的“野生代码”体系结构。它针对的是小型插件、一次性插件,有时还有演示功能。下面你可以看到我通常用于插件的两个目录结构:左边是“狂野”架构版本,右边是MVC。

它会让你更好地了解MVC可以带来的不同:此外,我编写的所有新插件都包含一个文档目录中包含HTML格式的文档语言目录,以及插件样式表的Sass版本。目前,我想说的是,在专业WP插件开发人员的工具集中,预处理器现在是一个标准的工具。查看Ian Dunn关于在插件开发中实现MVC的演示——这是一个很好的入门。

5.唯一命名插件文件

不要忘记你的插件将被安装在一个“繁忙的生态系统”中,甚至可能与你竞争对手的插件同时安装。文件和变量的唯一名称是必不可少的。最简单的方法是在自定义PHP变量、类、函数、CSS选择器和文件名前加上插件的名称。

6.彻底测试你的插件

任何好的软件开发周期的最后一部分是打磨、准备和测试产品的发布。当你准备部署插件的初始版本,或者准备发布版本时,以下是我的建议:

  1. 调试你的插件wp_debug在所有问题都解决之前启用。
  2. 在新的WordPress安装中测试插件。
  3. 使用多个WordPress主题测试插件。
  4. 考虑在旧的WordPress版本和PHP版本上测试插件,你怀疑这些版本可能会影响插件的功能。
  5. 用浏览器开发工具(Chrome的DevTools, Firefox的Firebug等)分析和测试你的插件。
  6. 压缩所有前端文件(HTML、CSS和图像)。包括样式表和HTML文件的非简化版本,以便插件用户可以执行自定义修改。
  7. 写好的文档。资料员可以对这个过程有所帮助。

7.允许用户自定义插件

你的用户永远不会告诉你一个肮脏的秘密。他们在幕后摸索你插件的源代码。WordPress用户比我接触过的其他软件客户群体更喜欢钻研代码。

许多插件客户也是开发人员,他们购买你的插件是为了将插件提供的功能添加到他们的WordPress项目中。任何拥有庞大用户群的插件通常都在设计时考虑到可定制性,或者处理支持票的愤怒。不要让插件定制变得困难,也不要强迫客户摸索插件的源代码,给你的用户一些选项和api,让他们能够根据自己的需要定制插件的功能。

全局设置应该通过插件的管理界面来设置。单实例设置,例如专门针对WordPress文章或页面的自定义设置,可以通过向用户提供自定义设置来完成短码你的插件的API。我相信你的插件用户至少应该能够做到以下几点:

  • 改变风格,如颜色,图标,边框,字体,背景等。考虑创建多个插件主题(黑暗、光明等)。
  • 启用/禁用可选的第三方依赖关系(例如谷歌Analytics, Facebook API等)
  • 启用/禁用插件的某些特性
  • 更改前面的文本标签(例如用于描述UI按钮和输入字段的标签)
  • 通过管理界面覆盖插件的默认CSS

其他授权用户的方法:

  • 提供样式表的预处理器版本。那些喜欢使用Less、Sass或其他CSS预处理器来定制插件外观的用户会感谢你的。
  • 拥有良好的HTML结构。通常情况下,用户会在插件的WordPress主题中添加CSS来重新设计插件的主题styles.css.通过具有直观的元素的良好HTML体系结构,使他们能够轻松地选择插件的特定元素而且id的名字。

  • 通过文档解释如何修改插件设置。

最后,别忘了给你的插件一个“恢复到默认设置”的功能。当定制过程中发生灾难性的事情时,这种“工厂重置”功能是很好的。

8.优先考虑插件的性能

在开发插件时,性能应该是最优先考虑的。每个组件都应该用速度在心里.最后,您的用户可能会使用许多插件,使得每个页面加载都要经过大量PHP文件。

你的插件越精简越好。在可能的情况下,构建缓存,特别是在多实例环境中。最重要的:测试。

在多个主机上使用多个主题和其他插件进行测试。P3分析器是一个极好的工具,将帮助你优化你的插件的源代码。

9.把精力放在插件的品牌化上

这个建议对你来说可能并不重要。也许你发布插件只是为了好玩。也许你的主要目标是回馈WordPress社区。

无论是为了好玩还是为了盈利,我认为每个插件都至少应该有一个像样的镜头,即使没有金钱交易。如果你不想让它落入WP用户的手中,为什么要制作这个插件呢?有大量的免费插件发布到社区中,他们花了大量的时间来打造一个良好的视觉品牌标识。

和其他产品一样,WordPress插件也面临着市场竞争。为了在热闹的WordPress市场中脱颖而出,你需要很好地执行所有类型的工作角色,包括开发之外的角色,如设计、营销、SEO、文案等等。拥有一个优秀的插件是不够的。

如果没人知道,就没人会用。为插件打好品牌是一门艺术和科学。为此,我聘请了一名设计师为我发布到高端市场的所有新插件设计一个标志和“外观和感觉”。

有时候,如果是一件很小的事情,我会试着自己去做。这几乎不起作用。良好的品牌和一个伟大的插件会带你走得很远。

除此之外,建立一个成功的WordPress插件业务很大程度上是一个创意产生的游戏->发展->市场营销。然后优化这个循环。以下是我从插件销售中学到的主要经验:

  • 每个插件应该只添加一个惊人的特性,而不是十个平庸的特性。保持简单。
  • 价格应该基于插件可以为客户增加的价值。
  • 优秀的客户服务非常重要。
  • 建立一个市场外的商业网站(不要依赖你的市场资料)。
  • 不要打击竞争对手。专注于创造人们想要使用的伟大产品。

结论

将WordPress插件推向市场有一些痛苦的挑战。它会引发支持票风暴、愤怒的退款请求和一星评价的麻烦。通过以上的实践,我成功地减少了很多这样的挑战,并且越来越多地找到了从WordPress开发中产生收益的双赢方式。

相关内容

WebFX职业

加入我们的使命,为全球的企业提供业界领先的数字营销服务,同时建立您的个人知识和个人成长。

我们招聘! 视图30 +职位空缺!