Heim  >  Artikel  >  CMS-Tutorial  >  Zeigen Sie Informationen zu WordPress.org-Plugins auf Ihrer Website an

Zeigen Sie Informationen zu WordPress.org-Plugins auf Ihrer Website an

PHPz
PHPzOriginal
2023-09-03 14:05:061118Durchsuche

在您的网站上展示 WordPress.org 插件的信息

Im ersten Teil dieses Artikels haben wir besprochen, wie man integrierte Funktionen nutzt, um mit WordPress.org zu kommunizieren und Plugin-Details abzurufen.

In diesem Tutorial werden wir die Theorie in die Praxis umsetzen und ein einfaches Plugin erstellen, das es uns ermöglicht, die Details jedes auf WordPress.org gehosteten Plugins mithilfe von Shortcodes auf unserer WordPress-Website anzuzeigen. p>


Loslegen Sie

Ich gehe davon aus, dass Sie ein Plugin-Entwickler sind und die Grundlagen kennen, aber im Zweifelsfall empfehle ich die Lektüre der folgenden beiden Artikel:

  • Zwei Ansätze zur Entwicklung von WordPress-Plugins: Funktionale Programmierung
  • Zwei Ansätze zur Entwicklung von WordPress-Plugins: Objektorientierte Programmierung

Was machen wir?

Mit diesem Plugin möchten wir zum Beispiel einen Shortcode erstellen [mpi slug='my-plugin-information' field='version'], der zwei Attribute akzeptieren kann: „slug“ und „field“ und dann basierend darauf den Wert jedes auf WordPress.org gehosteten Plugins abrufen und anzeigen Repository-Informationen.

Plugin-Bibliothek erstellen

Beginnen wir mit der Erstellung eines Ordners namens my-plugin-information im Verzeichnis wp-content/plugins. Erstellen Sie darin eine Datei mit dem Namen my-plugin-info.php und fügen Sie den folgenden Code ein:

<?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();
}
?>

Was haben wir gemacht?

Im obigen Code haben wir die Methode der Plugin-Klasse DOT_MyPluginInfo。其中包含任何插件的通用块,例如 __construct() erstellt und initialisiert.

Funktion init_my_plugin_infoinit 操作挂钩,以便它在加载 WordPress 之后但在发送任何标头之前运行。在函数 init_my_plugin_info 中,我们使用 add_shortcode Die Funktion registriert unseren Shortcode.

Hinweis: Um mehr über add_shortcode zu erfahren, schauen Sie sich den Codex an.

Das obige Plugin verfügt nun über genügend Code, um von WordPress über das Plugin-Dashboard erkannt zu werden. Wenn Sie den Anweisungen zum Erstellen der Datei gefolgt sind, können Sie nun die Seite „Plugins“ besuchen und dieses Plugin aktivieren.

Shortcode festlegen

Da wir die Flexibilität haben wollten, auszuwählen, welche Informationen über das Plugin angezeigt werden sollen, haben wir einen Shortcode mit zwei Attributen erstellt. Der erste namens „slug“ wird verwendet, um anzugeben, welche Plugin-Daten abgerufen werden müssen. Das zweite Attribut „Feld“ wird verwendet, um die spezifischen Informationen des Plugins anzugeben, die wir anzeigen müssen.

Wenn wir beispielsweise die Anzahl der Downloads des Plugins anzeigen möchten, fügen wir einfach Text unter dem Post-Editor hinzu und das Endergebnis sollte etwa „100 Mal heruntergeladen“ lauten.

Downloaded [mpi slug='my-plugin-information' field='downloaded'] times.

Mit p> registrieren wir unseren Shortcode, sodass immer dann, wenn der Shortcode im Beitragsinhalt gefunden wird, die Funktion

aufgerufen wird, um ihn zu verarbeiten. Von nun an wird der Rest des Codes in diese Funktion eingefügt, um unseren Shortcode zu verwalten. add_shortcode 我们注册了我们的短代码,以便每当在帖子内容中找到短代码时,都会调用函数 render_mpi()

Verwenden Sie

, um Shortcodes zu verwalten render_mpi()

Um Plugin-Informationen anzuzeigen, müssen wir zunächst den Shortcode verarbeiten, um die Attribute zu erhalten. Fügen Sie den folgenden Code in die Funktion

ein: render_api

// get our variable from $atts
extract( shortcode_atts( array(
	'slug' => '', //foo is a default value
	'field' => ''
), $atts ) );

Dadurch werden die beiden Eigenschaften „slug“ und „field“ (falls angegeben) extrahiert. Bevor wir fortfahren, prüfen wir zunächst, ob die Werte von „slug“ und „field“ vorhanden sind. Wenn nicht, stoppen wir die weitere Verarbeitung.

/**
 * 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

Der obige Code prüft, ob „slug“ existiert und gibt false zurück, wenn es nicht existiert. Wenn „slug“ vorhanden ist, wird weiterhin das Attribut „field“ überprüft. Da wir lediglich einen Shortcode erstellen, um spezifische Informationen über das Plugin anzuzeigen, erspart die Prüfung auf das Vorhandensein dieser beiden Eigenschaften vor der weiteren Verarbeitung unnötige Aufrufe der WordPress.org-Plugin-API.

Wenn nun Werte für die Attribute „slug“ und „field“ im Shortcode bereitgestellt werden, bereinigen wir zuerst diese beiden Werte.

// Sanitize attributes
$slug = sanitize_title( $slug );
$field = sanitize_title( $field );

Plugin-Daten vorübergehend speichern

Um zu vermeiden, dass jedes Mal, wenn eine Seite mit diesem Shortcode geladen wird, eine Anfrage an WordPress.org gesendet wird, müssen wir die Plugin-Informationen lokal speichern. Wenn Sie mehrere Shortcodes platzieren, die unterschiedliche Details für dasselbe Plugin anzeigen, können wir auf diese Weise den Prozess beschleunigen, indem wir Daten aus lokal gespeicherten Informationen auf Ihrer Website anzeigen.

Was aber, wenn das Plugin aktualisiert wird und wir weiterhin alte Daten anzeigen? Um dieses Problem zu lösen, besteht die schnellste Möglichkeit darin, die Transients-API zu verwenden, um unsere persönlichen Plugin-Daten zu speichern und die Daten zum Ablaufdatum festzulegen.

Ein weiteres Problem besteht darin, dass Sie Shortcodes haben, die Daten über verschiedene Plugins abrufen. Wenn wir sie unter einem einzigen temporären Namen speichern, kann es zu unerwarteten Ergebnissen kommen. Um dieses Problem zu lösen, verwenden wir das „slug“-Attribut, um dem gespeicherten Transienten einen eindeutigen Namen zu geben.

为什么要经历这一切?

  • 单独保存每个插件的信息
  • 减少向 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 );

}

在上面的代码中,我们做了三件事:

  1. 我们连接到 WordPress.org 并请求插件信息。然后该请求被保存在名为 $mpi_info 的变量中
  2. 然后我们进行错误检查,以确保返回的数据是否没有错误
  3. 最后,我们创建了一个过期日期为一小时的新瞬态

现在,如果 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 &#91;mpi slug='my-plugin-information' field='downloaded'&#93; 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,看看它们如何完成相同的任务。

Das obige ist der detaillierte Inhalt vonZeigen Sie Informationen zu WordPress.org-Plugins auf Ihrer Website an. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn