每个 wordpress 网站都需要一个主题来从数据库中提取内容并将其显示在设计中。从理论上讲,您可以运行一个只有一个主题而没有其他内容的网站。但是如果不添加插件,该站点将非常有限。
除了 WordPress 核心附带的功能之外,插件还为您的 WordPress 网站添加了额外的功能。从预订日历或动画滑块到功能齐全的学习管理系统或在线市场,您可以使用插件将它们全部添加到您的网站。
在本指南中,我将向您展示如何创建自己的 WordPress 插件。我将向您展示如何在插件开发中使用最佳实践,如何让插件中的代码运行,以及如何构建插件的代码和文件。我还将引导您完成创建您的第一个插件的过程并回答一些常见问题解答。
制作插件需要什么?
要构建您自己的插件并在您的 WordPress 网站上运行它,您需要:
代码编辑器
一个开发 WordPress 安装,带有您的实时站点的副本以进行测试
在您知道它可以工作之前,不要在您的实时站点上测试您的插件!
如果您还没有本地 WordPress 安装,请按照我们的指南 将您的站点复制到本地安装。或者,如果您无法在本地安装 WordPress,请在您的服务器上进行测试安装时使用您网站的副本。了解 如何复制您的网站。
WordPress 如何在本地设置杀手级 WordPress 测试环境 Harley Alexander
WordPress插件的类型
插件可以执行很多任务。它们的共同点是它们为您的网站添加了额外的功能。WordPress插件的类型包括:
用于安全、性能或备份等内容的站点维护插件
用于seo、社交媒体或电子商务等的营销和销售插件
内容插件 ,例如自定义帖子类型、小部件、简码、表单、画廊和视频源
添加社交网络功能的社区插件
……还有更多!要了解插件可以做什么,请查看WordPress 插件目录
什么进入插件?
在开始构建插件之前,有必要了解插件的内容。插件代码的具体外观取决于您的插件:一些很小,只有一个插件文件,而另一些很大,有多个包含文件、脚本、样式表和模板文件。还有很多落在中间的某个地方。
您的插件中可能包含的元素是:
主插件文件(这是必不可少的)
不同文件类型的文件夹
脚本
样式表
包含文件以组织代码
让我们来看看其中的每一个。
主插件文件
主插件文件是必不可少的。它总是一个 php 文件,并且总是包含注释掉的文本,告诉 WordPress 你的插件。
这是一个来自 Akismet 插件的示例:
<?php /** * @package Akismet */ /* Plugin Name: Akismet Anti-Spam Plugin URI: https://akismet.com/ Description: Used by millions, Akismet is quite possibly the best way in the world to <strong>protect your blog from spam</strong>. It keeps your site protected even while you sleep. To get started: activate the Akismet plugin and then go to your Akismet Settings page to set up your API key. Version: 4.1.7 Author: Automattic Author URI: https://automattic.com/wordpress-plugins/ License: GPLv2 or later Text domain: akismet */
这告诉 WordPress 你的插件做什么,在哪里可以找到更多关于它的信息,以及谁开发了它。它还提供有关版本号、文本域和国际化路径以及许可证的信息。
WordPress 获取此信息并使用它来填充您网站中的插件屏幕。以下是 Akismet 在该屏幕上的外观:
您可以看到插件文件中提供的信息用于填充此条目并提供链接。
关于插件的其他信息包含在 README.txt 文件中,该文件用于在插件目录中填充插件页面:
主插件文件还将包含使插件运行的代码。有时这将是插件的全部 PHP,但对于较大的插件,将调用包含包含额外代码的文件。这可以帮助您组织代码,并且意味着您没有一个难以处理的冗长、杂乱无章的文件。我将在本指南后面向您展示如何使用包含文件。
文件夹结构
虽然对于如何组织插件中的文件夹没有硬性规定,但采用其他插件开发人员使用的相同结构是有意义的。这将使您熟悉其他插件的构建方式,并意味着如果您将来共享您的代码,这对其他人来说是有意义的。
您插件中的文件夹可能包括:
样式表的css 或 样式
用于javascript的脚本
包含 用于包含文件
您的插件输出的模板 文件的模板
媒体和其他资产 文件的资产
i18n 用于国际化文件
如果您的插件很大或很复杂,您可能会发现需要使用更多文件夹。例如,woocommerce具有用于包、示例数据等的文件夹。这些又包括用于块和管理文件之类的子文件夹。
脚本和样式表
如果您的插件在前端或管理屏幕中输出需要样式的内容,您可能需要样式表。如果您的插件将使用脚本,您将需要这些文件。
将它们保存在自己的文件夹中是有意义的,即使您只有一个。您需要使用主插件文件中的专用函数将这些脚本和样式表排入队列。当我们构建插件时,我将向您展示如何做到这一点。
包含文件
如果您的插件需要组织,您可以通过将代码拆分为多个文件(称为包含文件)来做到这一点。然后,您将这些文件放入它们自己的文件夹中,并使用 include or require 函数在您的主插件文件中调用它们。
这样,您可以将大部分代码保持在组织良好的文件结构中,而主插件文件保持精简和最小化。
如果你的插件不是那么大,你不需要使用包含文件:只需将你的代码添加到主插件文件中。但是您可能会发现您需要在添加这些文件时组织该文件并在其中重新排序函数,以保持逻辑结构。
这些是插件中最常见的元素。我们在 WooCommerce 示例中看到可以有更多。或者在较小的插件中可以少得多。但是随着您开发更多插件,您会发现自己越来越多地使用这些元素。
如何运行插件代码:选项
当您将代码添加到您的插件时,它不会做任何事情,直到您以某种方式激活它。您可以使用几种方法来激活您的代码或从 WordPress 中提取代码:
功能
动作和过滤钩子
班级
让我们来看看其中的每一个。
功能
函数是 WordPress 代码的构建块。它们是开始编写自己的插件的最简单方法,也是最快的编码方式。你也会在你的主题文件中找到很多。
每个函数都有自己的名称,后跟大括号和大括号内的代码。
除非您以某种方式调用该函数,否则插件中的代码将不会运行。最简单(但最不灵活)的方法是直接调用主题中的代码或插件中的其他位置。
这是一个示例函数:
tutsplus_myfunction { // code goes here }
要在您的主题中直接调用该函数,您只需 tutsplus_myfunction() 在主题模板文件中键入您希望它运行的位置。或者您可以将它添加到插件中的某个位置......但您还需要激活调用它的代码!
对此有一些限制:
如果该函数所做的不仅仅是在主题模板文件中的某处添加内容,则无法以这种方式激活它。
如果您想在多个地方调用该函数,则必须一次又一次地调用它。
很难跟踪您手动调用函数的所有位置。
通过将函数附加到钩子来调用函数是更好的做法。
动作和过滤钩子
通过将你的函数附加到一个钩子上,你可以在这个钩子被触发时运行它的代码。有两种类型的钩子:动作钩子和过滤器钩子。
动作挂钩是空的。当 WordPress 出现在他们面前时,它什么也不做,除非一个函数被钩到那个钩子上。
过滤器挂钩包含将运行的代码, 除非有一个挂钩到该挂钩的函数。如果有一个函数,它将运行该函数中的代码。这意味着您可以将默认代码添加到您的插件,但在另一个插件中覆盖它,或者您可以编写一个函数来覆盖附加到 WordPress 本身的过滤器挂钩的默认代码。
Hooks 以三种方式触发:
通过 WordPress 本身。WordPress 核心代码包含数百个在不同时间触发的钩子。您将函数挂接到哪一个取决于您的函数的功能以及您希望它的代码何时运行。您可以 在开发人员手册中找到WordPress 挂钩列表。
根据你的主题。许多主题包括动作和过滤器钩子,您可以使用它们在网站设计的关键位置添加额外内容。所有主题都将包括一个 wp_head 和 wp_footer钩子。将这些与条件标签结合使用,您可以在您网站的某些类型的页面上运行特定代码。
通过您的插件或其他插件。您可以在插件中添加一个动作挂钩,然后在包含文件中添加将代码附加到该挂钩的函数。或者您可能会编写一个过滤器挂钩,然后在某些情况下拥有一个覆盖其内容的函数。或者,如果您正在创建一个插件来补充另一个插件,您可以将您的函数挂钩到第三方插件中的现有挂钩。例如,我使用 WooCommerce 完成了此操作,以自定义产品页面上的输出。
其中一些更高级,但是使用您的第一个插件,您可能会将您的函数挂钩到 WordPress 本身的操作或过滤器挂钩输出,很可能是一个操作挂钩。
课程
类是一种编码更复杂功能的方式,例如小部件和定制器元素,它们利用现有的 WordPress API。
当您在插件中编写类时,您可能会扩展已编码到 WordPress 中的现有类。这样,您可以使用该类提供的代码并对其进行调整以使其成为您自己的。一个示例是定制器,您可以在其中编写一个包含颜色选择器的类,利用现有类中为定制器提供的颜色选择器 UI。
使用类比函数更高级,你不太可能在你的第一个插件中这样做。要了解更多信息,请参阅我们 的 WordPress 课程指南。
如果您确实编写了类,您仍然必须使用操作或过滤器来让它们运行。
插件最佳实践
在开始编写插件之前,了解 插件的最佳实践有助于 您的代码从一开始就具有高质量。
这些包括:
根据 WordPress 编码标准编写代码。如果要将插件提交到插件目录,则必须这样做。
在你的代码中使用注释,这样其他人就可以使用它——这样你就可以记住你的代码是如何工作的,当你将来回到它时。
使用前缀命名您的函数、钩子和类,以便它们对您的插件是唯一的。您不想在不同的插件或 WordPress 核心中为函数提供与另一个函数相同的名称。
以逻辑方式组织您的文件夹,并将您的代码分开,以便其他人可以理解它,这样您就可以随着时间的推移添加它而不会变得一团糟。
您可能认为没有必要使用最佳实践,因为它只是您使用插件。但是您的插件可能会随着时间的推移而增长,您可能会让其他人使用它,或者您可能会出售它。或者您可能会在两年后再次使用它,并且无法记住代码是如何组织的!
通过 4 个步骤创建您的第一个插件
最后!您对插件的工作方式有了一定的了解,是时候卷起袖子创建您的第一个插件了。我将带您完成创建一个注册自定义帖子类型的简单插件的过程。
这是插件的一种非常常见的用法,随着时间的推移,您可能会在此基础上为您的自定义帖子类型或其他功能添加自定义模板文件。
我将向您展示插件的基本代码,并向您介绍如何随着时间的推移添加到它。
1.创建插件文件夹和文件
即使你的插件一开始只有一个文件,最好给它自己的文件夹。首先在 wp-content/plugins 目录中创建一个文件夹。在其中,为您的插件创建一个 PHP 文件。
给他们一个有意义的名字并包含一个前缀。我正在调用我的文件夹 tutsplus-register-post-types 和我的文件 tutsplus-register-post-types.php。
现在打开您的插件文件并在顶部添加注释掉的信息。您可以在下面使用我的插件并对其进行编辑,以反映这是您的插件,而不是我的插件。
<?php /* Plugin Name: Tuts+ Register Post Types Plugin URI: https://tutsplus com/ Description: Plugin to accompany tutsplus guide to creating plugins, registers a post type. Version: 1.0 Author: Rachel McCollin Author URI: https://rachelmccollin.com/ License: GPLv2 or later Text Domain: tutsplus */
现在,如果您保存文件并转到开发站点中的 插件 屏幕,您将在屏幕上看到插件:
您可以根据需要激活它,但它不会做任何事情,因为您还没有向它添加任何代码。让我们这样做。
2.添加功能
现在是时候在我们的插件中编写第一个函数了。首先制作你的插件并添加包含代码的大括号。这是我的:
function tutsplus_register_post_type() { // movies $labels = array( 'name' => __( 'Movies' , 'tutsplus' ), 'singular_name' => __( 'Movie' , 'tutsplus' ), 'add_new' => __( 'New Movie' , 'tutsplus' ), 'add_new_item' => __( 'Add New Movie' , 'tutsplus' ), 'edit_item' => __( 'Edit Movie' , 'tutsplus' ), 'new_item' => __( 'New Movie' , 'tutsplus' ), 'view_item' => __( 'View Movie' , 'tutsplus' ), 'search_items' => __( 'Search Movies' , 'tutsplus' ), 'not_found' => __( 'No Movies Found' , 'tutsplus' ), 'not_found_in_trash' => __( 'No Movies found in Trash' , 'tutsplus' ), ); $args = array( 'labels' => $labels, 'has_archive' => true, 'public' => true, 'hierarchical' => false, 'supports' => array( 'title', 'editor', 'excerpt', 'custom-fields', 'thumbnail', 'page-attributes' ), 'rewrite' => array( 'slug' => 'movies' ), 'show_in_rest' => true ); }
这包括您的帖子类型的所有标签和参数,以及(至关重要的) register_post_type() WordPress 提供的功能。
我在这里使用电影作为我的帖子类型,因为我正在创建一个虚构的电影评论网站。您可能想使用不同的东西。
现在,如果您保存文件并返回您的站点,您会发现没有任何变化。那是因为你还没有激活你的代码。我们这里用来激活功能的方法是把它挂在WordPress提供的一个动作钩子上,即 init 钩子。当您使用 WordPress 提供的功能(例如 register_post_type)时,您会发现有一个钩子是您应该使用的。您可以在 WordPress 手册条目中找到有关 注册自定义帖子类型的详细信息。
所以让我们添加钩子。在您的代码下,在大括号之外,添加以下行:
add_action('init', 'tutsplus_register_post_type');
我们使用该 add_action() 函数将我们的代码挂钩到一个动作钩子,有两个参数:动作钩子的名称和我们的函数的名称。
现在尝试保存您的文件并返回您的站点。您会看到自定义帖子类型已添加到您的管理菜单中(假设您已激活插件)。
好的!
现在让我们添加一个额外的函数来注册自定义分类。在您到目前为止编写的代码下方,添加以下内容:
function tutsplus_register_taxonomy() { // books $labels = array( 'name' => __( 'Genres' , 'tutsplus' ), 'singular_name' => __( 'Genre', 'tutsplus' ), 'search_items' => __( 'Search Genres' , 'tutsplus' ), 'all_items' => __( 'All Genres' , 'tutsplus' ), 'edit_item' => __( 'Edit Genre' , 'tutsplus' ), 'update_item' => __( 'Update Genres' , 'tutsplus' ), 'add_new_item' => __( 'Add New Genre' , 'tutsplus' ), 'new_item_name' => __( 'New Genre Name' , 'tutsplus' ), 'menu_name' => __( 'Genres' , 'tutsplus' ), ); $args = array( 'labels' => $labels, 'hierarchical' => true, 'sort' => true, 'args' => array( 'orderby' => 'term_order' ), 'rewrite' => array( 'slug' => 'genres' ), 'show_admin_column' => true, 'show_in_rest' => true ); register_taxonomy( 'tutsplus_genre', array( 'tutsplus_movie' ), $args); } add_action( 'init', 'tutsplus_register_taxonomy' );
同样,您可能想要更改自定义分类的名称。在这里,我将分类法应用于我刚刚注册的帖子类型( register_taxonomy 函数的第三个参数)。如果您为帖子类型指定了不同的名称,请确保编辑该位。
现在保存您的文件并查看您的管理屏幕。当您将鼠标悬停在管理菜单中的帖子类型上时,您会看到新的分类法。
你现在有一个工作插件。做得好!
让我们来看看如何添加它。
3. 排队样式表和脚本
如果您需要在插件中使用自定义样式或脚本,您可以将它们直接添加到您的插件文件中——但这不是最佳实践。相反,您应该在插件文件夹中创建样式表和脚本作为单独的文件,并使用 WordPress 提供的功能将它们排入队列。
假设您想为自定义帖子类型添加样式。您可以将其添加到您的主题中,但您可能希望为插件添加一些特定的样式,以使帖子类型在任何主题中从其他帖子类型中脱颖而出。
为此,您在插件文件夹中创建一个名为 css的新文件夹 (或 styles,由您决定)。在该文件夹中,创建一个名为 style.css的样式表,或者您可以给它一个更具体的名称以便清楚起见。我将调用我 的 movies.css。
然后,您需要将该文件排入您的插件中,以便 WordPress 可以使用它。将此添加到您的主插件文件中,在您已经拥有的功能之上。我喜欢添加排队并首先包含在我的插件文件中,这样我就可以看到正在激活的其他文件。
function tutsplus_movie_styles() { wp_enqueue_style( 'movies', plugin_dir_url( __FILE__ ) . ‘/css/movies.css’ ); } add_action( 'wp_enqueue_scripts', ‘tutsplus_movie_styles' );
如果您保存文件,您将不会在管理屏幕中看到任何差异 - 但如果您添加了自定义帖子类型的帖子并且您的样式表包含它们的样式,您现在将在前端看到您的网站。
请注意,用于将样式表和脚本排入队列的钩子是相同的:它们都使用 wp_enqueue_scripts. 没有单独的样式挂钩。
排队脚本的工作方式非常相似。按着这些次序:
将 脚本 或 js 文件夹添加到您的插件文件夹。
将脚本文件保存在该文件夹中。
以与上述样式表相同的方式将脚本排入队列,将 wp_enqueue_style() 函数 替换为wp_enqueue_script().
4. 使用包含文件
开发插件时的另一个选择是创建额外的 PHP 文件,称为包含文件。如果您有很多这些,您可能会为不同类型的包含文件创建多个文件夹,或者您可能只创建一个名为 include的文件夹。
您可以使用一些功能来包含文件,您可以在我们的 包含和需要文件的综合指南中找到这些功能。
创意编码 如何在 WordPress 中包含和需要文件和模板 Tom McFarlin
例如,在我们的自定义帖子类型插件中,我们可能会创建一些代码来改变页面内容的输出方式,使用 the_content 过滤器挂钩来修改每次在产品页面上输出内容时运行的代码。
无需将此代码添加到主插件文件中,您可以将其添加到名为 movie-content.php的单独文件 中,然后在该文件中编写代码以了解电影内容的输出方式。
要在插件中包含此文件,您需要在插件中添加一个名为 includes的文件夹 ,然后在该文件夹中添加 content-movie.php 文件。
要在插件中包含该文件,请在主插件文件的开头添加以下代码:
include( plugin_dir_path( __FILE__ ) . ‘includes/movie-content.php' );
您无需将其挂接到操作或过滤器挂钩上——只需使用 include_once() 插件文件中的函数即可。然后,它将调用包含文件中的代码,就好像它当时在您的主插件文件中一样。
如何扩展或编辑现有插件
有时您可能会在插件目录或插件供应商处找到一个插件,该插件可以完成您需要插件完成的大部分工作,但不是全部。或者您可能正在运行一个插件并想要进行一些调整和自定义。
WordPress 是开源的这一事实使这成为可能。您可以获取另一个插件的代码并对其进行扩展或编辑,以使其按您希望的方式工作。
有两种方法可以做到这一点:
获取一个现有的插件并将其分叉——即对其进行编辑,使其工作方式不同、更可靠或具有额外的功能。
编写您自己的插件来扩展原始插件。
获取现有插件并对其进行编辑非常简单:您在开发站点上制作自己的副本(永远不会存在!)并根据需要对其进行编辑。确保您使用版本控制来跟踪您的更改,以防出现问题。
通过编写自己的插件来扩展插件稍微复杂一些,并且不适用于每个插件,但在我看来是一种更强大的做事方式。
许多最流行的插件将在其代码中广泛使用钩子和类。您可以挂钩并过滤钩子并扩展类以编写您自己的代码,该代码使用现有插件的代码作为基础,然后添加或编辑它。
例如,WooCommerce 拥有如此多的函数、钩子和类,以至于它拥有自己的API 和开发人员文档。WooCommerce 系统的每个部分都由这些函数、钩子或类中的一个或多个提供支持。要进行更改,您需要确定哪些代码正在驱动您要更改的系统部分,然后编写自己的插件,该插件可以附加到相同的钩子或扩展类。
你会发现你可以通过这种方式为 WooCommerce 这样的插件创建重要的自定义:我曾经用它来为一个甚至不包括结帐的列表站点提供支持。我使用钩子删除了所有我不想要的元素并添加了新元素。
有关如何连接到 WooCommerce 并使用您自己的插件扩展或编辑它的一些示例,请参阅我们的指南, 将产品描述添加到存档页面 并将 基于产品的博客添加到您的商店。这些示例只是触及了您可以实现的目标的表面,但它们会让您了解如何开始。
更进一步:插件功能
在本指南中,我向您展示了如何对插件进行编码以及如何开始构建一个简单的插件。
一旦掌握了插件开发的窍门,您就可以构建更复杂和功能齐全的插件,以在您的站点上执行更复杂的任务。
让我们看一些例子。
小部件插件
小部件插件涉及使用类,但很好地介绍了该主题。我们 创建小部件插件的指南 将帮助您做到这一点。
简码插件
社交媒体插件
社交媒体插件非常受欢迎,因为它们让您可以在您的网站上显示您的 Facebook、Twitter 或 Instagram 提要,并让您的访问者通过他们自己的社交媒体帐户分享您的内容
图库和媒体插件
如果您想优化网站上的媒体并显示画廊或视频源,插件将使一切看起来更专业。了解如何为图像或视频找到最佳图库插件, 以及如何 编写自己的图库插件。
表单插件
向您的网站添加表单可以让您的访问者取得联系并帮助建立关系。
常见问题
以下是有关 WordPress 插件的一些最常见问题的答案。
为什么我不能将我需要的代码添加到我的主题函数文件中?
简单地继续向 functions.php 文件中添加代码是很诱人的,并且应该有一些代码。
但是,如果您的代码与站点中的功能相关,而不是内容的设计或输出,那么您应该将其编码到插件中。这意味着如果您将来切换主题,您仍然拥有该功能。您可以在另一个运行不同主题的站点上使用该插件。
我已经在我的插件中添加了代码。为什么什么都没有发生?
这可能是因为您没有将代码挂钩到操作或过滤器挂钩。在你这样做之前,什么都不会发生。
当我编辑我的插件并检查我的网站时,我得到一个白屏。帮助!
您可能在某处添加了一些有错误的代码。PHP 是一种无情的语言,这可能就像在错误位置的分号一样小。
尝试 在您的 wp-config.php文件中打开 WP_DEBUG ,您将看到一条消息,告诉您错误在哪里。然后你可以修复它。
WordPress 修复死亡 Sam B 的 WordPress 白屏。
当我激活我的插件时,我收到一条错误消息,告诉我已经输出了太多标题。这是什么意思?
这通常意味着您的插件文件中有太多空行。返回并检查文件开头是否有空行。
如果这不能解决问题,请尝试 打开 WP_DEBUG.
在哪里可以找到有关开发插件的更多信息?
我们有很多教程和课程可以帮助您 在 Envato Tuts+ 上构建各种插件。看看你是否能找到任何能激发你灵感的东西。
我在哪里可以为我的网站下载插件?
您可以从 WordPress 插件目录中的数千个免费插件中进行选择。您还可以购买第三方插件 。始终从信誉良好的供应商处购买插件,以确保它们遵循 WordPress 编码标准并且不包含恶意代码。
概括
插件将把您的网站从一个简单的博客变成一个功能强大的网站,包括高级功能,并且安全可靠。立即尝试将插件添加到您的网站并编写自己的代码,以了解如何使用插件来改进您的 WordPress 网站。
- 主插件文件
- 文件夹结构
- 脚本和样式表
- 包含文件
- 功能
- 动作和过滤钩子
- 课程
- 1.创建插件文件夹和文件
- 2.添加功能
- 3. 排队样式表和脚本
- 4. 使用包含文件
- 小部件插件
- 简码插件
- 社交媒体插件
- 图库和媒体插件
- 表单插件