在本文的第一部分中,我们讨论了如何使用内置函数与 WordPress.org 进行通信并检索插件详细信息。
在本教程中,我们将把理论付诸实践,创建一个简单的插件,该插件将允许我们使用简码在我们的 WordPress 网站上显示 WordPress.org 上托管的任何插件的详细信息。 p>
开始使用
我假设您是插件开发人员并且了解基础知识,但如果有疑问,我建议阅读以下两篇文章:
- 开发 WordPress 插件的两种方法:函数式编程
- 开发 WordPress 插件的两种方法:面向对象编程
我们在做什么?
通过这个插件,我们想要创建一个短代码,例如 [mpi slug='my-plugin-information' field='version']
,它可以接受两个属性:“slug”和“field”,然后基于然后,我们检索并显示 WordPress.org 存储库中托管的任何插件的信息。
创建插件库
让我们首先在 wp-content/plugins 目录中创建一个名为 my-plugin-information 的文件夹。在其中创建一个名为 my-plugin-info.php 的文件,并将以下代码粘贴到其中:
<?php /* Plugin Name: My Plugin Info Plugin URI: https://myplugininfo.com Description: Communicate with WordPress.org Plugins API to retrive your Plugin Information Version: 0.1 Author: Harish Author Email: mye@email.com License: GPL3 */ if ( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly if ( ! class_exists( 'DOT_MyPluginInfo' ) ) { class DOT_MyPluginInfo { /** * Constructor */ function __construct() { //Hook up to the init action add_action( 'init', array( &$this, 'init_my_plugin_info' ) ); } /** * Runs when the plugin is initialized */ function init_my_plugin_info() { // Register the shortcode [mpi slug='my-plugin-info' field='version'] add_shortcode( 'mpi', array( &$this, 'render_mpi' ) ); } function render_mpi($atts) { } } // end class new DOT_MyPluginInfo(); } ?>
我们做了什么?
在上面的代码中,我们创建并初始化了插件类 DOT_MyPluginInfo
。其中包含任何插件的通用块,例如 __construct()
方法。
函数 init_my_plugin_info
与 init
操作挂钩,以便它在加载 WordPress 之后但在发送任何标头之前运行。在函数 init_my_plugin_info
中,我们使用 add_shortcode
函数注册了我们的短代码。
注意:要了解有关 add_shortcode
的更多信息,请查看 Codex。
上面的插件现在有足够的代码可以被 WordPress 从插件仪表板识别。如果您已经按照说明创建了文件,您现在可以访问插件页面并激活此插件。
设置简码
由于我们希望灵活地选择要显示有关插件的信息,因此我们创建了一个具有两个属性的短代码。第一个称为“slug”将用于指定需要检索哪个插件的数据。第二个属性“field”将用于指定我们需要显示的插件的具体信息。
例如,如果我们想显示该插件的下载次数,我们只需在帖子编辑器下方添加文本,最终结果应该是“下载了 100 次”之类的内容。 p>
Downloaded [mpi slug='my-plugin-information' field='downloaded'] times.
使用 add_shortcode
我们注册了我们的短代码,以便每当在帖子内容中找到短代码时,都会调用函数 render_mpi()
我们注册了我们的短代码,以便每当在帖子内容中找到短代码时,都会调用函数
render_mpi()
使用
处理短代码
render_api
要显示插件信息,我们首先需要处理短代码以获取属性。在
// get our variable from $atts extract( shortcode_atts( array( 'slug' => '', //foo is a default value 'field' => '' ), $atts ) );这会提取两个属性“slug”和“field”(如果提供)。在继续之前,我们首先检查“slug”和“field”的值是否存在,如果不存在,则停止进一步处理。
/** * Check if slug exists */ if ( ! $slug ) { return false; } /** * Check if field exists * Return value based on the field attribute */ if ( ! $field ) { return false; } else { } // $field check上面的代码将检查“slug”是否存在,如果不存在,则返回 false。如果“slug”确实存在,它将继续检查“field”属性。由于我们只是创建一个短代码来显示有关插件的特定信息,因此在进一步处理之前检查这两个属性是否存在将节省对 WordPress.org 插件 API 的不必要的调用。
现在,如果短代码中提供了“slug”和“field”属性的值,我们将首先清理这两个值。
// Sanitize attributes
$slug = sanitize_title( $slug );
$field = sanitize_title( $field );
在瞬态中存储插件数据为了避免每次加载包含此短代码的页面时都向 WordPress.org 发送请求,我们需要在本地保存插件信息。这样,如果您放置了多个短代码来显示同一插件的不同详细信息,我们就可以通过显示您网站上本地保存的信息中的数据来加快这一过程。
但是如果插件更新并且我们继续显示旧数据怎么办?
为了解决这个问题,最快的选择是使用 Transients API 保存我们的个人插件数据并设置到期日期数据。另一个问题是,如果您有正在检索有关不同插件的数据的短代码。如果我们使用单个临时名称存储它们,结果可能会出乎意料。为了解决这个问题,我们使用“slug”属性为保存的瞬态提供一个唯一的名称。🎜
为什么要经历这一切?
- 单独保存每个插件的信息
- 减少向 WordPress.org 发出的请求
- 通过直接从您自己的网站提供数据来更快地加载数据
让我们首先创建一个变量 $mpi_transient_name
来保存基于“slug”属性的唯一瞬态名称。
// Create a empty array with variable name different based on plugin slug $mpi_transient_name = 'mpi-' . $slug;
接下来我们检查瞬态是否已经存在:
/** * Check if transient with the plugin data exists */ $mpi_info = get_transient( $mpi_transient_name );
如果瞬态存在,我们将继续根据“field”属性显示数据,否则我们使用 plugins_api
连接到 WordPress.org 并请求插件信息。
if ( empty( $mpi_info ) ) { /** * Connect to WordPress.org using plugins_api * About plugins_api - * https://code.tutsplus.com/tutorials/communicating-with-the-wordpress-org-plugin-api--wp-33069 */ require_once( ABSPATH . 'wp-admin/includes/plugin-install.php' ); $mpi_info = plugins_api( 'plugin_information', array( 'slug' => $slug ) ); // Check for errors with the data returned from WordPress.org if ( ! $mpi_info or is_wp_error( $mpi_info ) ) { return false; } // Set a transient with the plugin data // Use Options API with auto update cron job in next version. set_transient( $mpi_transient_name, $mpi_info, 1 * HOUR_IN_SECONDS ); }
在上面的代码中,我们做了三件事:
- 我们连接到 WordPress.org 并请求插件信息。然后该请求被保存在名为
$mpi_info
的变量中 - 然后我们进行错误检查,以确保返回的数据是否没有错误
- 最后,我们创建了一个过期日期为一小时的新瞬态
现在,如果 slug 属性的值为“my-plugin-information
”,那么存储插件信息的瞬态名称将为“mpi-my-plugin-information
”。
注意:要了解有关 plugins_api
的更多信息,请参阅本系列的第一篇文章,如本文顶部所示。
显示插件信息
最后一步涉及根据“field”属性的值返回特定信息。为此,我们只需使用单独的检查即可。
if ( $field == "downloaded" ) { return $mpi_info->downloaded; } if ( $field == "name" ) { return $mpi_info->name; } if ( $field == "slug" ) { return $mpi_info->slug; } if ( $field == "version" ) { return $mpi_info->version; } if ( $field == "author" ) { return $mpi_info->author; } if ( $field == "author_profile" ) { return $mpi_info->author_profile; } if ( $field == "last_updated" ) { return $mpi_info->last_updated; } if ( $field == "download_link" ) { return $mpi_info->download_link; }
总结
完整的插件代码:
<?php /* Plugin Name: My Plugin Information Plugin URI: https://code.tutsplus.com Description: Communicate with WordPress.org Plugins API to retrive your Plugin Information Version: 0.1.1 Author: Harish Author Email: me@email.com License: Copyright 2013 Harish This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License, version 3, as published by the Free Software Foundation. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ if ( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly if ( ! class_exists( 'DOT_MyPluginInfo' ) ) { class DOT_MyPluginInfo { /** * Constructor */ function __construct() { //Hook up to the init action add_action( 'init', array( &$this, 'init_my_plugin_info' ) ); } /** * Runs when the plugin is initialized */ function init_my_plugin_info() { // Register the shortcode [mpi slug='my-plugin-info' field='version'] add_shortcode( 'mpi', array( &$this, 'render_mpi' ) ); } function render_mpi($atts) { // get our variable from $atts extract(shortcode_atts(array( 'slug' => '', //foo is a default value 'field' => '' ), $atts)); /** * Check if slug exists */ if ( ! $slug ) { return false; } /** * Check if field exists * Return value based on the field attribute */ if ( ! $field ) { return false; } else { // Sanitize attributes $slug = sanitize_title( $slug ); $field = sanitize_title( $field ); // Create a empty array with variable name different based on plugin slug $mpi_transient_name = 'mpi' . $slug; /** * Check if transient with the plugin data exists */ $mpi_info = get_transient( $mpi_transient_name ); if ( empty( $mpi_info ) ) { /** * Connect to WordPress.org using plugins_api * About plugins_api - * https://code.tutsplus.com/tutorials/communicating-with-the-wordpress-org-plugin-api--wp-33069 */ require_once( ABSPATH . 'wp-admin/includes/plugin-install.php' ); $mpi_info = plugins_api( 'plugin_information', array( 'slug' => $slug ) ); // Check for errors with the data returned from WordPress.org if ( ! $mpi_info or is_wp_error( $mpi_info ) ) { return false; } // Set a transient with the plugin data // Use Options API with auto update cron job in next version. set_transient( $mpi_transient_name, $mpi_info, 1 * HOUR_IN_SECONDS ); } if ( $field == "downloaded" ) { return $mpi_info->downloaded; } if ( $field == "name" ) { return $mpi_info->name; } if ( $field == "slug" ) { return $mpi_info->slug; } if ( $field == "version" ) { return $mpi_info->version; } if ( $field == "author" ) { return $mpi_info->author; } if ( $field == "author_profile" ) { return $mpi_info->author_profile; } if ( $field == "last_updated" ) { return $mpi_info->last_updated; } if ( $field == "download_link" ) { return $mpi_info->download_link; } } // $field check } // render_mpi() } // end class new DOT_MyPluginInfo(); } ?>
此插件代码可在 GitHub 上找到,您也可以从 WordPress.org 下载
付诸行动
现在您只需转到帖子编辑器并添加一个短代码,例如:
Downloaded [mpi slug='my-plugin-information' field='downloaded'] times.
它会显示:
Downloaded 10 times.
显示有关插件的其他信息的示例简码
通过替换“field”属性的值,您可以显示不同的信息,例如:
- 插件名称:
[mpi slug='my-plugin-information' field='name']
- 插件版本:
[mpi slug='my-plugin-information' field='version']
- 插件 Slug:
[mpi slug='my-plugin-information' field='slug']
- 插件作者(返回名称和链接):
[mpi slug='my-plugin-information' field='author']
- 作者简介(返回个人资料地址):
[mpi slug='my-plugin-information' field='author_profile']
- 最后更新:
[mpi slug='my-plugin-information' field='last_updated']
- 下载链接:
[mpi slug='my-plugin-information' field='download_link']
改进
为了简单起见,我使用瞬态来保存插件信息。然而,瞬态从来就不是用来保存重要数据的。另一种方法是使用选项 API、add_options()
或作为 post meta 保存插件数据,然后安排一个 cron 任务每小时更新一次数据。
接下来做什么?
使用 plugins_api
,我们已经演示了通信和检索 WordPress.org 上托管的任何插件的信息是多么容易。
您可能还想查看其他插件,例如 Plugin Info(也使用 plugins_api
和 I Make Plugins,看看它们如何完成相同的任务。
以上是在您的网站上展示 WordPress.org 插件的信息的详细内容。更多信息请关注PHP中文网其他相关文章!

您想将博客从 WordPress.com 移至 WordPress.org 吗? 许多初学者从 WordPress.com 开始,但很快意识到其局限性,并希望切换到自托管 WordPress.org 平台。 在本分步指南中,我们将向您展示如何正确地将博客从 WordPress.com 移动到 WordPress.org。 为什么从 WordPress.com 迁移到 WordPress.org? WordPress.com 允许任何人通过创建帐户来

您是否正在寻找自动化 WordPress 网站和社交媒体帐户的方法? 通过自动化,您将能够在 Facebook、Twitter、LinkedIn、Instagram 等平台上自动分享您的 WordPress 博客文章或更新。 在本文中,我们将向您展示如何使用 IFTTT、Zapier 和 Uncanny Automator 轻松实现 WordPress 和社交媒体的自动化。 为什么要自动化 WordPress 和社交媒体? 自动化您的WordPre

就在几天前,我们的一位用户报告了一个不寻常的问题。问题是他达到了自定义菜单项的限制。达到菜单项限制后他保存的任何内容都将根本无法保存。我们从未听说过这个问题,因此我们决定在本地安装上尝试一下。创建了 200 多个菜单项并保存。效果很好。将 100 个项目移至下拉列表中,保存效果非常好。那时我们就知道这与服务器有关。经过进一步研究,似乎还有许多其他人也遇到了同样的问题。深入挖掘后,我们发现了一张 trac 票证 ( #14134 ) 强调了这个问题。在阅读了非常

您需要将自定义元字段添加到 WordPress 中的自定义分类法吗? 自定义分类法可让您组织除类别和标签之外的内容。有时添加其他字段来描述它们很有用。 在本文中,我们将向您展示如何将其他元字段添加到他们创建的分类法中。 何时应将自定义元字段添加到自定义分类法? 当您在WordPress 网站上创建新内容时,您可以使用两种默认分类法(类别和标签)对其进行组织。 一些网站受益于自定义分类法的使用。这些允许您以其他方式对内容进行排序。 例如,

Windows live writer 是一款多功能工具,可让您直接从桌面将帖子发布到 WordPress 博客上。这意味着您根本不需要登录 WordPress 管理面板来更新您的博客。在本教程中,我将向您展示如何使用 Windows Live Writer 为您的 WordPress 博客启用桌面发布。 如何在 WordPress 上设置 Windows Live Writer 第 1 步: 要通过 Windows Live Writer 在 WordPr

最近,我们的一位用户报告了一个非常奇怪的安装问题。写帖子时,他们看不到自己写的任何内容。因为帖子编辑器的文字是白色的。更重要的是,所有可视化编辑器按钮都丢失了,并且从可视化切换到 HTML 的功能也不起作用。在本文中,我们将向您展示如何修复 WordPress 可视化编辑器中的白色文本和缺失按钮问题。 初学者注意事项:如果您正在寻找可能在其他网站的屏幕截图中看到的隐藏按钮,那么您可能正在寻找厨房水槽。您必须单击厨房水槽图标才能看到其他选项,例如下划线、从单词复制等。

您想在 WordPress 中显示用户电子邮件中的头像吗? Gravatar 是一项将用户的电子邮件地址连接到在线头像的网络服务。WordPress 会自动在评论部分显示访问者的头像,但您可能也想将它们添加到网站的其他区域。 在本文中,我们将向您展示如何在 WordPress 中显示用户电子邮件中的头像。 什么是 Gravatar 以及为什么要显示它? Gravatar代表全球认可的头像,它允许人们将图片链接到他们的电子邮件地址。 如果网站支

您想更改 WordPress 中的默认媒体上传位置吗? 将媒体文件移动到其他文件夹可以提高网站的速度和性能,并帮助您更快地创建备份。它还使您可以自由地以最适合您的方式组织文件。 在本文中,我们将向您展示如何更改 WordPress 中的默认媒体上传位置。 为什么要更改默认媒体上传位置? 默认情况下,WordPress 将所有图像和其他媒体文件存储在 /wp-content/uploads/ 文件夹中。 在此文件夹中,您将找到不同年份和月份的子


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

Dreamweaver Mac版
视觉化网页开发工具

记事本++7.3.1
好用且免费的代码编辑器

mPDF
mPDF是一个PHP库,可以从UTF-8编码的HTML生成PDF文件。原作者Ian Back编写mPDF以从他的网站上“即时”输出PDF文件,并处理不同的语言。与原始脚本如HTML2FPDF相比,它的速度较慢,并且在使用Unicode字体时生成的文件较大,但支持CSS样式等,并进行了大量增强。支持几乎所有语言,包括RTL(阿拉伯语和希伯来语)和CJK(中日韩)。支持嵌套的块级元素(如P、DIV),

安全考试浏览器
Safe Exam Browser是一个安全的浏览器环境,用于安全地进行在线考试。该软件将任何计算机变成一个安全的工作站。它控制对任何实用工具的访问,并防止学生使用未经授权的资源。

适用于 Eclipse 的 SAP NetWeaver 服务器适配器
将Eclipse与SAP NetWeaver应用服务器集成。