WordPress插件开发入门

插件是改变您网站的PHP脚本-基本上,位(甚至很多!)代码可以上传到WordPress安装以扩展和扩展您网站的功能,而无需破解核心代码.

插件的伟大事物是它们允许您向您的网站添加功能并保持完整,即使您切换主题或升级WordPress安装.

创建自己的插件真的不是那么困难,可以解决很多问题.将有用的代码和附加功能复制和粘贴到主题的函数中.php 文件很大,但在更新主题时,这些更改可能会丢失.插件是一种安全的方法,可以尝试新的东西和 如果需要实现跨主题函数的方式.

本文将通过创建插件,我们还将查看一些中间/高级概念:

  1. 一个简单的插件,与Facebook打开图
  2. 集成了WordPress
  3. 插件如何工作
  4. 使用钩子
  5. 过滤器入门
  6. 添加脚本和样式
  7. 创建插件设置页面
  8. 启用翻译
  9. 结论

此帖子将通过入门使用插件开发来帮助升级您的Dev技能.建议最佳地遵循编辑文件和一些基本的HTML和PHP的知识.

一个简单的插件项目

在本文中,我们将创建一个集成WordPress和Facebook打开图形的插件.打开图形标记是特殊的HTML标签,它给Facebook提供了分享页面所需的信息,并确保它看起来很棒.

这是一组示例标签,可以在您现在正在阅读的页面上使用:

加载GIST 5A80828FACCCCAE783AD2713982AB1C6

您可以阅读所有关于Facebook开放图和Facebook内容从这些链接站点共享最佳实践.

对于此项目,我们需要确保在显示单个博客文章时,打开的图形标记将添加到我们网站的标题中.站点头主要由元数据和其他隐藏的信息组成,并且在HTML文档中的<head></head>标签之间添加.

本文的下一部分将重点关注完成此项.在这个例子之后,我将更深入地冒险进入插件开发领域.

创建新插件

您需要做的第一件事是创建一个存储插件的文件夹.转到WordPress安装中的 wp-content/plugins/ 目录,并创建一个名为 my-facebook-tags 的文件夹.请记住,无论您命名哪些插件的文件夹,都将是您的插件的 slug .

如果要上传并将其公开可用,请插件SLUS在整个WordPress插件存储库中应该是唯一的.这意味着没有任何其他人创造的其他插件应该有这个slug.您可以轻松搜索现有的插件SLUG,只需使用Google!

请记住,插件的 name 不一定与其slug相同.看看ithemes安全插件.URL的最后一点是SLUC:better-wp-security.然而,插件的名称是ithemes安全性.

如果您只需为自己制作插件,仍然很重要,以确保SLUS不会发生冲突.在您的网站的生命周期中,您可能会使用许多插件,并且您不希望其中没有意外地冲突,并因为命名冲突而导致您的网站上的问题.

现在您拥有my-facebook-tags文件夹,在内部创建一个新文件并命名为my-facebook-tags.php.这将是您的主插件文件,它的名字应与您的插件的SLUS相同,PHP扩展是CLICKED.

在以下代码中打开插件的主文件和粘贴:

加载GIST 6F846C891C21A8CD96C0A533AA9FD8C8

此代码是PHP注释,它不会直接在WordPress管理员中可见.WordPress确实使用它中的数据输出插件的名称和后端插件部分中的一些其他数据.这是针对WPMU DEV的网站量身定制的,因此请务必根据需要修改插件作者和其他字符串.

一旦您保存了此文件,祝贺是为了才能创建您的第一个插件!当然,它绝对没有,但它应该在插件部分中提供,您应该能够激活它-立即继续执行此操作.

插件如何工作

让我们暂停一下,看看插件如何在我们继续使用我们的Facebook开放图项目之前工作.

插件提供带钩子的功能,因此了解他们的工作是至关重要的.让我们来看看一个真正的世界模拟钩子.你知道第一句话所说的那些小日记:我是_________的日记.空线是您放置实际名称的位置.

公司当然可以通过所有名称并创建每个名称,但它不会是经济的,很多人都会被遗漏.另外,如果你想把"银河系的主人"而不是你自己的名字?

空线是钩子.而不是专门打印它,它会提示用户添加他/她自己的名字.挂钩在WordPress中工作类似的东西,让我们来看看一个例子.

主题需要将以下函数添加到标题文件:wp_head().在此功能中,WordPress的一系列代码:如果插件想要在此处放置一些代码,他们可能会这样做.wp_head钩子允许我们在页面的头部部分输出某些内容,这正是我们所需要的.让我们测试这一点.

加载GIST 1B10D8DD6E63338DB895EE49614739DB.

上面的代码段的第一行告诉WordPress,我们希望使用my_facebook_tags()功能将一些功能附加到wp_head钩子.

第二行代码创建该函数,第三行回声简单字符串.

现在应该在您激活的任何主题的顶部可见,只要它定义wp_head()函数(定义它是一个要求).我们很快就会删除那个回声的字符串,因为您永远不应该在头部中显示文本.

为了正确,让我提到两件事.有两种类型的钩子:动作和过滤器.在上面的情况下,我们使用了一个显而易见的动作,因为我们使用了add_action()功能.只要WordPress检测到调用它们的钩子,操作就会运行.

过滤器是相似的,但它们修改了WordPress使用的一系列数据.一个很好的例子是显示的注销消息.每当显示注销消息时,筛选器允许您修改注销消息本身的筛选器而不是执行动作.我们这里不会详细勾手.我建议看看我们的文章,快速(深度)指南,或者如果您想了解更多信息,请访问WordPress钩子,或者WordPress Codex.

我想在这里提到的最后一件事是技术上,当执行do_action()apply_filters()函数时,执行钩子函数.wp_head()函数包含对其内部其他功能的调用-它不是钩子本身.

完成我们的插件

基于上面的描述,我们很清楚我们需要使用wp_head钩子添加我们的Facebook元标记.

这是我们插件所需的其余代码,然后是解释:

加载主旨2CCC357663131FFDA693CFDB8694D40A

我将Meta标签基本上粘贴到函数中.我需要修改的唯一事情是要确保它们反映当前显示的帖子的值.我使用了is_single() wordpress代码(并搜索了"compiental_tags"),以确保仅在显示单个帖子时才添加标记.

为了使用当前帖子的标题,摘录,图像等我使用的模板标签.我使用的唯一一个诡计是检查帖子是否有一个特色的图像,然后显示它的Facebook标记.

在适当位置,我们创建了一些非常有用的东西.您网站上的所有帖子现在都应该具有Facebook友好的标签.您可以确保使用Open Graph Debugger正确设置.

现在我们的插件已完成.我们现在看看一些其他插件概念.

右侧绘图的右钩

现在你知道如何将东西添加到您网站的头部部分,让我们看看将元素插入您网站的其他部分.

使用动作非常容易.如果要在WordPress作出某些内容时执行动作,您正在寻找一个钩子.

如何在每页加载Google Analytics跟踪?这应该在页脚中完成.也许主题定义类似于wp_head的东西?事实上他们这样做.使用wp_footer您可以在页面底部输出代码.WordPress本身使用这两个挂钩在正确的地方放置脚本和样式.

到目前为止,这一切都很容易,因为这些是你可以在主题中看到的钩子.但如何更加"隐藏"案例?如果您想发布帖子发布后,该帖子会怎样送一封电子邮件.这个尖叫声"动作",因为你在说:当WordPress发布一个帖子时,然后做某事.

在过去几年中找到这些钩子已经变得更加容易.它们通常是很好的命名:user_register,publish_post,profile_update等.如果您在谷歌中键入"添加用户WordPress Hook",则可能会立即偶然偶然崩溃"User_register".从那里,这只是阅读文档的问题.让我们使用publish_post在发布帖子时发送作者电子邮件.这是我们的代码:

加载GIST 18FA2B423202C35A880DFFB3BD42864C

请注意,当我使用add_action()函数时,我指定了两个附加参数.第三个参数是优先级,它在执行操作时决定.您可能希望将多个函数添加到同一钩子中,WordPress本身可能会在内部使用它.优先级越高,稍后执行操作.

第四个参数说明传递给您的函数的数量.这是您需要查找的东西,因为它不是从动作名称中显而易见.你可以看一下WordPress文档,或者看看WordPress源代码以查看它定义的位置-如果你刚刚开始,前者肯定会更容易.

功能我使用帖子的属性来获取作者电子邮件地址和标题并链接到帖子.我构建了一个短消息,并在邮寄功能中使用WordPress'wp_mail()拍摄快速电子邮件.

再次,我是如何知道这个存在的?谷歌!虽然完全可以编写自己的邮件功能,但快速搜索"WordPress Mail"将在Jiffy中揭示此功能.

过滤器入门

我之前提到过的过滤器类似于钩子,但它们允许您在使用之前修改数据而不是实现额外的操作.对于此示例,让我们在www.example.com/wp-admin键入错误的密码时更改您在登录表单中获得的错误消息

由于无论我们的插件如何,我们只想修改它-我们正在查看过滤器.确实有一个名为"login_errors"的过滤器,因此让我们利用它并修改消息:

加载GIST 85E15161D6CFA126319A22B8B29FBE5C

您添加到过滤器的每个功能的第一个参数将始终是过滤的数据.如果您在不修改的情况下返回此操作,您将最终使用原始功能.在我们的情况下,让我们始终显示相同的错误消息.如果要隐藏错误的根目录,这可能很有用.如果输入正确的用户名但是错误的密码WordPress实际上告诉您,为黑客提供有关信息.通过单个错误消息,隐藏此信息.

滤波器和动作是广泛用于插件中的一切,所以我敦促您深入地看看它们,并熟悉自己的机制.您可以在WordPress Codex中找到更多信息.

添加脚本和样式

机会是在某些时候,您希望添加自己的样式或JavaScript功能.这可以通过延长所讨论的资产来完成.Enqueuing使用动作模块化脚本和样式,从而处理过程中的任何依赖项.让我们添加对Google字体的支持,实际上是样式表:

加载GIST 5A80C4829E3A5C9B701E13FFC76E217E

我们使用的操作是可怕的,因为wp_enqueue_scripts实际上用于将两个脚本和样式添加到前端.在挂钩的功能中,我们使用wp_enqueue_style()添加我们的风格.第一个参数是脚本的SLUC或句柄(这取决于您),第二个参数是脚本的URL.

使用//url.com而不是http://url.com是一个简洁的技巧,它允许浏览器抓取适当的脚本版本.如果您的连接使用HTTPS,它将检索HTTPS版本,否则它将使用常规HTTP版本.

当然,您可以在您的插件中加载您所做的资产并存储.让我们加载一封我们使用的enqueue方法制作的自定义脚本:

加载GIST 50BABC9E1407E4AC2AB6DBE0FED797

该过程是相同的,但我在wp_enqueue_script()函数中使用了更多参数.第三个参数定义脚本的依赖项.WordPress确保正确加载所有依赖项,因此即使您浏览依赖性,稍后将正确加载它们.第四个参数是您可以选择自己的版本号.这些附加参数也适用于wp_enqueue_style()功能.

第五参数,设置为 true 时,指示WordPress加载页脚中的脚本而不是标题.如果在标题中不需要您的脚本,则是首选的,因为它会降低加载时​​间并优化JavaScript.

了解有关eNqueue的更多信息,请查看我们的文章,添加脚本和样式以正确的方式.

创建插件设置页

许多插件呼叫用户可以设置的某些选项.也许你想在一些帖子上禁用Facebook打开的图形标签,甚至在发布帖子时禁用作者电子邮件您是否写过?这两个都可以使用选项来实现.

有多种方法可以为自己创建选项,包括那里的一些选项框架.对于简单的选择,更容易自己做,我们在这里学习,所以让我们开始.

使用的最佳方法是面向对象的方法,但我将在此处使用更简单的方法.看看WordPress Codex中的创建选项,以了解更简单和面向对象的方法.

我们要做的第一件事是在后端创建一个菜单条目,我们可以在其中放置我们的设置用户界面:

加载GIST ADBF6534E37D8FEE4867CBD77E21A02B.

请注意,我们正在使用一个动作-当然-为此做到这一点.每当WordPress看到admin_menu挂钩时,它会执行与其相关联的所有功能.我们碰巧为自己添加了一个函数,所以在建立菜单时它将考虑到这一点.

我们使用add_menu_page()创建顶级菜单条目.此函数需要多个参数:

  1. 页面标题-显示在页面的标题标记(显示在浏览器栏中)显示.
  2. 菜单标题-用于左侧菜单.
  3. 功能-允许访问页面的用户级别.
  4. 菜单slug -用于网址中的页面的块.
  5. 功能-您将使用的函数的名称输出页面内容.
  6. 图标-图像或dashicons字符串的URL.
  7. 位置-整个菜单中的物品的位置.

我创建了空函数my_plugin_settings_page()(你会注意到我将此添加为第五参数).我还在一瞬间添加了这个函数的内容.在此阶段,您应该能够在菜单底部看到新的菜单条目.

在我们创建用于操纵设置的用户界面之前,让我们让WordPress了解我们打算使用的设置.这被称为注册我们的设置.对于此示例,让我们假设我们想创建一个存储不是我们网站项目的一些关键员工的联系信息的地方,例如我们的会计师.

加载GIST 7DFBE528273D40198A98B48F114DFF1F.

您可以看到,我将函数挂钩到admin_init中,我使用register_setting()添加我们的选项.第一个参数应该是选项组,第二个实际选项.如果您只有一些选项,我建议使用相同的选项组.

所以我知道我知道我需要在这里使用admin_init吗? WordPress Codex当然!在某些情况下,您需要使用的钩子是显而易见的.在其他情况下,您需要查找.在某些情况下,您 can 在保留功能时使用不同的钩子.在这些情况下,通常有推荐的做事方式.在实现钩子之前,始终搜索Codex,你将只是很好.

所以现在我们拥有我们的管理员菜单条目,我们注册了我们的设置,让我们创建一个表单来显示用户界面.将下面的代码粘贴在空中my_plugin_settings_page()功能:

加载GIST 2A3AA29A87722585E827795AC5F49488

在构建这样的形式时需要注意的是:

  • 使用settings_fields()函数,将选项组添加为第一个参数.这输出了一些隐藏的字段WordPress将用于保存数据.
  • 使用您在输入的名称参数中注册时定义的选项名称.
  • 使用get_option()函数抓取字段的值,将选项名称作为第一个参数
  • 传递给


Settings Form 我们创建的设置表单.

,你们都完成了! WordPress在您使用内置选项API之前,请注意保存所有内容.干得好!

启用翻译

当您为自己创建插件时,这绝对不是优先级,但它是一个好主意,以便习惯翻译准备就绪,因为任何公共插件都是良好的做法.

基础知识非常简单.任何时候您输出一些文本,将其包装在__()函数或_e()功能中.使用前者返回字符串,后来呼出它.例如:

装载机8d6056bf046b786285e13519f9d42da

函数的第一个参数是要转换的字符串,第二个是文本域.这应该与您的插件SLUG相同.

通过使用这些函数,您将允许其他人将您的插件转换为自己的语言.这是一个可以帮助这么多的简单程序,所以为什么不这样做?它比这两个功能更多,但通过只知道上面的内容,你是99%的方式.

了解有关翻译插件的更多信息,请查看我们的文章如何创建可翻译主题或插件.

结论

您可以使用插件以及几乎尽可能多的方式创建它们.虽然我是一个非常强大的WordPress标准的倡导者,并做出正确的事情(面向对象的方法,在许多情况下),我敦促每个人进行实验.

只要您没有创建产品的产品,随时可以做任何您喜欢的东西.不要担心与您尚未理解的方法复杂化您的生活.尽力研究可以帮助您添加功能的挂钩,并以任何方式制作工作.

在您能够做错事之后,正确地做事的知识经常来到你身上,所以现在不要太困扰这些规则.

祝你自己的插件祝你好运!

编辑器注意: 此帖子已更新以获得准确性和相关性.
[最初已发布:2015年1月/修订:3月2022]

5

发表回复