Dans la première partie de cet article, nous avons expliqué comment utiliser les fonctions intégrées pour communiquer avec WordPress.org et récupérer les détails du plugin.
Dans ce tutoriel, nous allons mettre la théorie en pratique et créer un plugin simple qui nous permettra d'afficher les détails de n'importe quel plugin hébergé sur WordPress.org sur notre site WordPress à l'aide de shortcodes. p>
Je suppose que vous êtes un développeur de plugins et que vous connaissez les bases, mais en cas de doute, je vous recommande de lire les deux articles suivants :
Avec ce plugin, nous souhaitons créer un shortcode, par exemple [mpi slug='my-plugin-information' field='version']
, qui peut accepter deux attributs : "slug" et "field" et sur cette base, nous récupérons et affichons ensuite la valeur de n'importe quel plugin hébergé dans le référentiel WordPress.org information.
Commençons par créer un dossier appelé my-plugin-information dans le répertoire wp-content/plugins. Créez un fichier à l'intérieur appelé my-plugin-info.php et collez-y le code suivant :
<?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(); } ?>
Dans le code ci-dessus, nous avons créé et initialisé la méthode plugin class DOT_MyPluginInfo
。其中包含任何插件的通用块,例如 __construct()
.
Fonction init_my_plugin_info
与 init
操作挂钩,以便它在加载 WordPress 之后但在发送任何标头之前运行。在函数 init_my_plugin_info
中,我们使用 add_shortcode
La fonction enregistre notre shortcode.
Remarque : Pour en savoir plus sur add_shortcode
, consultez le Codex.
Le plugin ci-dessus contient désormais suffisamment de code pour être reconnu par WordPress à partir du tableau de bord du plugin. Si vous avez suivi les instructions pour créer le fichier, vous pouvez maintenant visiter la page Plugins et activer ce plugin.
Comme nous voulions avoir la flexibilité de choisir les informations à afficher sur le plugin, nous avons créé un shortcode avec deux attributs. Le premier appelé « slug » servira à préciser quel plugin doit récupérer les données. Le deuxième attribut "field" sera utilisé pour préciser les informations spécifiques du plugin que nous devons afficher.
Par exemple, si nous voulions afficher le nombre de téléchargements du plugin, nous ajouterions simplement du texte sous l'éditeur de publication et le résultat final devrait être quelque chose comme "Téléchargé 100 fois". p>
Downloaded [mpi slug='my-plugin-information' field='downloaded'] times.
En utilisant add_shortcode
我们注册了我们的短代码,以便每当在帖子内容中找到短代码时,都会调用函数 render_mpi()
, nous enregistrons notre shortcode afin que chaque fois que le shortcode est trouvé dans le contenu de la publication, la fonction
render_mpi()
Utilisez
render_api
Pour afficher les informations du plugin, nous devons d'abord traiter le shortcode pour obtenir les attributs. Ajoutez le code suivant dans la fonction
// 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 { } // $field check
Maintenant, si des valeurs pour les attributs "slug" et "field" sont fournies dans le shortcode, nous allons d'abord nettoyer ces deux valeurs.
// Sanitize attributes $slug = sanitize_title( $slug ); $field = sanitize_title( $field );
Pour éviter d'envoyer une requête à WordPress.org à chaque fois qu'une page contenant ce shortcode est chargée, nous devons enregistrer les informations du plugin localement. De cette façon, si vous placez plusieurs shortcodes affichant différents détails pour le même plugin, nous pouvons accélérer le processus en affichant les données des informations enregistrées localement sur votre site.
Mais que se passe-t-il si le plugin est mis à jour et que nous continuons à afficher les anciennes données ?
Pour résoudre ce problème, l'option la plus rapide consiste à utiliser l'API Transients pour enregistrer les données personnelles de notre plugin et définir les données de date d'expiration.Un autre problème est si vous avez des codes courts qui récupèrent des données sur différents plugins. Si nous les stockons sous un seul nom temporaire, les résultats peuvent être inattendus. Pour résoudre ce problème, nous utilisons l'attribut "slug" pour donner un nom unique au transitoire enregistré. 🎜
让我们首先创建一个变量 $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 ); }
在上面的代码中,我们做了三件事:
$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']
[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,看看它们如何完成相同的任务。
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!