Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Plugin WordPress Teruskan Dokumentasi: Pengaturcaraan Berorientasikan Objek II

Plugin WordPress Teruskan Dokumentasi: Pengaturcaraan Berorientasikan Objek II

王林
王林asal
2023-08-29 15:09:09817semak imbas

WordPress 插件继续文档:面向对象编程 II

Pada ketika ini dalam siri ini, kami bersedia untuk melengkapkan pemalam kami dengan mendokumentasikan fail, kelas, fungsi, pembolehubah, dll.

Walaupun ini adalah langkah terakhir di mana kita sebenarnya perlu melengkapkan pemalam, ini bukanlah artikel terakhir dalam siri ini kerana kita akan terus melihat beberapa topik lanjutan dalam pengaturcaraan berorientasikan objek.

Tetapi sebelum itu, mari kita praktikkan semua yang kami pelajari dalam artikel sebelumnya dan tingkatkan pemalam kami kepada versi 1.0.

Sudah tentu, seperti semua artikel semua sebelumnya, saya mengesyorkan agar anda mengikuti perkembangan semua yang telah kami bincangkan setakat ini, supaya anda boleh memahami sepenuhnya bukan sahaja apa yang kami lakukan dalam artikel sebelumnya, tetapi bagaimana kami sebenarnya sampai di sana Perkara terakhir yang dibincangkan dalam artikel ini.

  1. Pengenalan
  2. Kursus
  3. Taip
  4. Struktur kawalan: pernyataan bersyarat
  5. Struktur kawalan: gelung
  6. Fungsi dan Sifat
  7. Skop
  8. Bina pemalam I
  9. Bina Plugin II
  10. Pemalam rakaman I

Selepas memahami dan menyemak semua ini, mari mula mendokumentasikan setiap fail.

Pemalam rakaman

Kita boleh log pemalam ini dalam beberapa cara yang berbeza:

  • Kita boleh log semua pengepala fail dahulu, kemudian kita boleh kembali dan log kelas, kemudian kita boleh kembali dan log pembolehubah, dan kemudian kita boleh log fungsi.
  • Kami boleh merekod setiap fail sekali gus dan mengadakan perbincangan ringkas tentang semua yang terkandung dalam setiap fail.

Jelas sekali, pilihan ini akan menjana lebih banyak dokumentasi untuk setiap bahagian, tetapi seharusnya menghasilkan artikel yang kurang membosankan dan lebih mudah untuk memahami aliran kawalan keseluruhan pemalam.

Untuk melakukan ini, kami akan melihat fail pemalam mengikut fail, memperkenalkan dokumentasi untuk setiap kod yang kami ada, dan kemudian kami akan membincangkan sebarang perkara menarik di sebalik kod tersebut.

Akhir sekali, kami akan memastikan untuk merujuk versi akhir pemalam di penghujung artikel. Dengan itu, mari kita mulakan.

Pengurus Meta Siaran Tunggal

Ingat bahawa fail utama yang memulakan pemalam ialah fail single-post-meta-manager.php yang terletak di akar direktori pemalam.

Berikut ialah versi fail yang didokumenkan sepenuhnya. Baca setiap ulasan dengan teliti, memberi perhatian bukan sahaja kepada format yang diikuti tetapi juga kepada kandungan yang ditawarkannya.

<?php
/**
 * The file responsible for starting the Single Post Meta Manager plugin
 *
 * The Single Post Meta Manager is a plugin that displays the post meta data
 * associated with a given post. This particular file is responsible for
 * including the necessary dependencies and starting the plugin.
 *
 * @package SPPM
 *
 * @wordpress-plugin
 * Plugin Name:       Single Post Meta Manager
 * Plugin URI:        https://github.com/tommcfarlin/post-meta-manager
 * Description:       Single Post Meta Manager displays the post meta data associated with a given post.
 * Version:           1.0.0
 * Author:            Tom McFarlin
 * Author URI:        http://tommcfarlin.com
 * Text Domain:       single-post-meta-manager-locale
 * License:           GPL-2.0+
 * License URI:       http://www.gnu.org/licenses/gpl-2.0.txt
 * Domain Path:       /languages
 */

// If this file is called directly, then about execution.
if ( ! defined( 'WPINC' ) ) {
    die;
}

/**
 * Include the core class responsible for loading all necessary components of the plugin.
 */
require_once plugin_dir_path( __FILE__ ) . 'includes/class-single-post-meta-manager.php';

/**
 * Instantiates the Single Post Meta Manager class and then
 * calls its run method officially starting up the plugin.
 */
function run_single_post_meta_manager() {

	$spmm = new Single_Post_Meta_Manager();
	$spmm->run();

}

// Call the above function to begin execution of the plugin.
run_single_post_meta_manager();

Dalam kod di atas, sila ambil perhatian bahawa kami telah menentukan pengepala fail mengikut konvensyen yang digariskan dalam artikel sebelumnya. Kami juga mengekalkan teg pengepala pemalam yang diperlukan supaya WordPress membacanya dengan betul.

Perhatikan bahawa dalam contoh ini kami telah memasukkannya di bawah teg @wordpress-plugin tersuai. Ini tidak diperlukan, tetapi membantu memisahkan komen pengepala fail daripada komen pemalam yang diperlukan. @wordpress-plugin 标记下。这不是必需的,但有助于将文件头注释与所需的插件注释分开。

最后,请注意,我们已将此插件的版本提升至 1.0,并且我们还为该插件指定了 @package 值="inline">SPMM 缺少Single Post Meta Manager。我们将在整个插件中使用它。

包含目录

接下来,让我们将注意力转向包含目录中的所有文件。

由于在管理目录中的任何内容之前都需要这些文件,因此单独查看这些文件中的每一个是有意义的,然后用管理目录中的其余文件来完善我们的讨论。

单个帖子元管理器

<?php

/**
 * The Single Post Meta Manager is the core plugin responsible for including and
 * instantiating all of the code that composes the plugin
 *
 * @package SPMM
 */

/**
 * The Single Post Meta Manager is the core plugin responsible for including and
 * instantiating all of the code that composes the plugin.
 *
 * The Single Post Meta Manager includes an instance to the Single Post Manager
 * Loader which is responsible for coordinating the hooks that exist within the
 * plugin.
 *
 * It also maintains a reference to the plugin slug which can be used in
 * internationalization, and a reference to the current version of the plugin
 * so that we can easily update the version in a single place to provide
 * cache busting functionality when including scripts and styles.
 *
 * @since    1.0.0
 */
class Single_Post_Meta_Manager {

    /**
	 * A reference to the loader class that coordinates the hooks and callbacks
	 * throughout the plugin.
	 *
	 * @access protected
	 * @var    Single_Post_Meta_Manager_Loader   $loader    Manages hooks between the WordPress hooks and the callback functions.
	 */
	protected $loader;

	/**
	 * Represents the slug of hte plugin that can be used throughout the plugin
	 * for internationalization and other purposes.
	 *
	 * @access protected
	 * @var    string   $plugin_slug    The single, hyphenated string used to identify this plugin.
	 */
	protected $plugin_slug;

	/**
	 * Maintains the current version of the plugin so that we can use it throughout
	 * the plugin.
	 *
	 * @access protected
	 * @var    string   $version    The current version of the plugin.
	 */
	protected $version;

	/**
	 * Instantiates the plugin by setting up the core properties and loading
	 * all necessary dependencies and defining the hooks.
	 *
	 * The constructor will define both the plugin slug and the verison
	 * attributes, but will also use internal functions to import all the
	 * plugin dependencies, and will leverage the Single_Post_Meta_Loader for
	 * registering the hooks and the callback functions used throughout the
	 * plugin.
	 */
	public function __construct() {

		$this->plugin_slug = 'single-post-meta-manager-slug';
		$this->version = '1.0.0';

		$this->load_dependencies();
		$this->define_admin_hooks();

	}



	/**
	 * Imports the Single Post Meta administration classes, and the Single Post Meta Loader.
	 *
	 * The Single Post Meta Manager administration class defines all unique functionality for
	 * introducing custom functionality into the WordPress dashboard.
	 *
	 * The Single Post Meta Manager Loader is the class that will coordinate the hooks and callbacks
	 * from WordPress and the plugin. This function instantiates and sets the reference to the
	 * $loader class property.
	 *
	 * @access    private
	 */
	private function load_dependencies() {

		require_once plugin_dir_path( dirname( __FILE__ ) ) . 'admin/class-single-post-meta-manager-admin.php';

		require_once plugin_dir_path( __FILE__ ) . 'class-single-post-meta-manager-loader.php';
		$this->loader = new Single_Post_Meta_Manager_Loader();

	}

	/**
	 * Defines the hooks and callback functions that are used for setting up the plugin stylesheets
	 * and the plugin's meta box.
	 *
	 * This function relies on the Single Post Meta Manager Admin class and the Single Post Meta Manager
	 * Loader class property.
	 *
	 * @access    private
	 */
	private function define_admin_hooks() {

		$admin = new Single_Post_Meta_Manager_Admin( $this->get_version() );
		$this->loader->add_action( 'admin_enqueue_scripts', $admin, 'enqueue_styles' );
		$this->loader->add_action( 'add_meta_boxes', $admin, 'add_meta_box' );

	}

	/**
	 * Sets this class into motion.
	 *
	 * Executes the plugin by calling the run method of the loader class which will
	 * register all of the hooks and callback functions used throughout the plugin
	 * with WordPress.
	 */
	public function run() {
		$this->loader->run();
	}

	/**
	 * Returns the current version of the plugin to the caller.
	 *
	 * @return    string    $this->version    The current version of the plugin.
	 */
	public function get_version() {
		return $this->version;
	}

}

显然,这个特定文件中引入了很多新评论;但是,每个类属性、构造函数和内部函数的作用应该是非常不言自明的。

除了如何通过插件协调信息之外,需要注意的关键是我们如何遵守上一篇文章中定义的标准。

但请注意,如果文档中的某些标签和/或功能在不相关时使用,我们就冒昧地使用它们。我们将在本文的其余部分中继续这样做。

单个帖子元管理器加载器

<?php

/**
 * The Single Post Meta Manager Loader is a class that is responsible for
 * coordinating all actions and filters used throughout the plugin
 *
 * @package    SPMM
 */

/**
 * The Single Post Meta Manager Loader is a class that is responsible for
 * coordinating all actions and filters used throughout the plugin.
 *
 * This class maintains two internal collections - one for actions, one for
 * hooks - each of which are coordinated through external classes that
 * register the various hooks through this class.
 *
 * @since    1.0.0
 */
class Single_Post_Meta_Manager_Loader {

    /**
	 * A reference to the collection of actions used throughout the plugin.
	 *
	 * @access protected
	 * @var    array    $actions    The array of actions that are defined throughout the plugin.
	 */
	protected $actions;

	/**
	 * A reference to the collection of filters used throughout the plugin.
	 *
	 * @access protected
	 * @var    array    $actions    The array of filters that are defined throughout the plugin.
	 */
	protected $filters;

	/**
	 * Instantiates the plugin by setting up the data structures that will
	 * be used to maintain the actions and the filters.
	 */
	public function __construct() {

		$this->actions = array();
		$this->filters = array();

	}

	/**
	 * Registers the actions with WordPress and the respective objects and
	 * their methods.
	 *
	 * @param  string    $hook        The name of the WordPress hook to which we're registering a callback.
	 * @param  object    $component   The object that contains the method to be called when the hook is fired.
	 * @param  string    $callback    The function that resides on the specified component.
	 */
	public function add_action( $hook, $component, $callback ) {
		$this->actions = $this->add( $this->actions, $hook, $component, $callback );
	}

	/**
	 * Registers the filters with WordPress and the respective objects and
	 * their methods.
	 *
	 * @param  string    $hook        The name of the WordPress hook to which we're registering a callback.
	 * @param  object    $component   The object that contains the method to be called when the hook is fired.
	 * @param  string    $callback    The function that resides on the specified component.
	 */
	public function add_filter( $hook, $component, $callback ) {
		$this->filters = $this->add( $this->filters, $hook, $component, $callback );
	}

	/**
	 * Registers the filters with WordPress and the respective objects and
	 * their methods.
	 *
	 * @access private
	 *
	 * @param  array     $hooks       The collection of existing hooks to add to the collection of hooks.
	 * @param  string    $hook        The name of the WordPress hook to which we're registering a callback.
	 * @param  object    $component   The object that contains the method to be called when the hook is fired.
	 * @param  string    $callback    The function that resides on the specified component.
	 *
	 * @return array                  The collection of hooks that are registered with WordPress via this class.
	 */
	private function add( $hooks, $hook, $component, $callback ) {

		$hooks[] = array(
			'hook'      => $hook,
			'component' => $component,
			'callback'  => $callback
		);

		return $hooks;

	}

	/**
	 * Registers all of the defined filters and actions with WordPress.
	 */
	public function run() {

		 foreach ( $this->filters as $hook ) {
			 add_filter( $hook['hook'], array( $hook['component'], $hook['callback'] ) );
		 }

		 foreach ( $this->actions as $hook ) {
			 add_action( $hook['hook'], array( $hook['component'], $hook['callback'] ) );
		 }

	}

}

请注意,此类或多或少是插件的核心组件,因为它协调整个插件中使用的所有操作和过滤器。该插件集中了整个插件中使用的钩子的所有注册和协调。

最后,当调用 run 时,所有挂钩都会向 WordPress 注册,因此当插件启动时,它将调用每个注册的操作和过滤器。

admin 目录

此时,我们准备将注意力转向位于插件管理目录中的文件。

虽然该文件由几个 PHP 文件组成,但它还包含一个 CSS 文件。出于本文的目的,我们不会记录 CSS 文件;我们将编写 CSS 文件。但是,WordPress Codex确实为此定义了文档。

现在,让我们继续记录 admin

Akhir sekali, sila ambil perhatian bahawa kami telah meningkatkan versi pemalam ini kepada 1.0, dan kami juga telah memberikan pemalam itu @ pakej value="inline">SPMM tiada

Pengurus Meta Siaran Tunggal

. Kami akan menggunakan ini sepanjang pemalam.

Sertakan direktori🎜 🎜Seterusnya, mari kita alihkan perhatian kita kepada semua fail dalam direktori sertakan. 🎜 🎜Memandangkan fail ini diperlukan sebelum apa-apa boleh diuruskan dalam direktori, masuk akal untuk melihat setiap fail ini secara individu dan kemudian melengkapkan perbincangan kita dengan fail yang tinggal dalam direktori terurus. 🎜

Pengurus meta siaran tunggal

<?php

/**
 * The Single Post Meta Manager Admin defines all functionality for the dashboard
 * of the plugin
 *
 * @package SPMM
 */

/**
 * The Single Post Meta Manager Admin defines all functionality for the dashboard
 * of the plugin.
 *
 * This class defines the meta box used to display the post meta data and registers
 * the style sheet responsible for styling the content of the meta box.
 *
 * @since    1.0.0
 */
class Single_Post_Meta_Manager_Admin {

    /**
	 * A reference to the version of the plugin that is passed to this class from the caller.
	 *
	 * @access private
	 * @var    string    $version    The current version of the plugin.
	 */
	private $version;

	/**
	 * Initializes this class and stores the current version of this plugin.
	 *
	 * @param    string    $version    The current version of this plugin.
	 */
	public function __construct( $version ) {
		$this->version = $version;
	}

	/**
	 * Enqueues the style sheet responsible for styling the contents of this
	 * meta box.
	 */
	public function enqueue_styles() {

		wp_enqueue_style(
			'single-post-meta-manager-admin',
			plugin_dir_url( __FILE__ ) . 'css/single-post-meta-manager-admin.css',
			array(),
			$this->version,
			FALSE
		);

	}

	/**
	 * Registers the meta box that will be used to display all of the post meta data
	 * associated with the current post.
	 */
	public function add_meta_box() {

		add_meta_box(
			'single-post-meta-manager-admin',
			'Single Post Meta Manager',
			array( $this, 'render_meta_box' ),
			'post',
			'normal',
			'core'
		);

	}

	/**
	 * Requires the file that is used to display the user interface of the post meta box.
	 */
	public function render_meta_box() {
		require_once plugin_dir_path( __FILE__ ) . 'partials/single-post-meta-manager.php';
	}

}
🎜Jelas sekali, 🎜banyak 🎜komen baharu telah diperkenalkan dalam fail khusus ini, bagaimanapun, peranan setiap atribut kelas, pembina dan fungsi dalaman sepatutnya cukup jelas. 🎜 🎜Selain cara maklumat diselaraskan melalui pemalam, perkara utama yang perlu diberi perhatian ialah cara kami mematuhi piawaian yang ditakrifkan dalam artikel sebelumnya. 🎜 🎜Tetapi sila ambil perhatian bahawa jika teg dan/atau ciri tertentu dalam dokumentasi tidak digunakan apabila tidak relevan, kami mengambil kebebasan 🎜🎜 menggunakannya. Kami akan terus berbuat demikian dalam baki artikel ini. 🎜

Pemuat pengurus meta siaran tunggal

<?php
/**
 * Displays the user interface for the Single Post Meta Manager meta box.
 *
 * This is a partial template that is included by the Single Post Meta Manager
 * Admin class that is used to display all of the information that is related
 * to the post meta data for the given post.
 *
 * @package    SPMM
 */
?>
<div id="single-post-meta-manager">

    <?php $post_meta = get_post_meta( get_the_ID() ); ?>
	<table id="single-post-meta-manager-data">
	<?php foreach ( $post_meta as $post_meta_key => $post_meta_value ) { ?>
		<tr>
			<td class="key"><?php echo $post_meta_key; ?></td>
			<td class="value"><?php print_r( $post_meta_value[0] ); ?></td>
		</tr>
	<?php } ?>
	</table>

</div><!-- #single-post-meta-manager -->
🎜Sila ambil perhatian bahawa kelas ini adalah lebih kurang komponen teras pemalam, kerana ia menyelaraskan semua tindakan dan penapis yang digunakan sepanjang pemalam. Pemalam ini memusatkan semua pendaftaran dan penyelarasan cangkuk yang digunakan di seluruh pemalam. 🎜 🎜Akhir sekali, apabila run dipanggil, semua cangkuk didaftarkan dengan WordPress, jadi apabila pemalam bermula, ia akan memanggil setiap tindakan dan penapis yang didaftarkan. 🎜 🎜 direktori admin🎜 🎜Pada ketika ini, kami bersedia untuk mengalihkan perhatian kami kepada fail yang terdapat dalam direktori pengurusan pemalam. 🎜 🎜Walaupun fail terdiri daripada beberapa fail PHP, ia juga mengandungi fail CSS. Untuk tujuan artikel ini, kami tidak akan mendokumenkan fail CSS; kami akan menulis fail CSS. Walau bagaimanapun, Codex WordPress 🎜 🎜 mentakrifkan dokumentasi untuk ini. 🎜 🎜Sekarang, mari kita beralih kepada mendokumentasikan kelas dan fail yang ada dalam direktori admin. 🎜 🎜Pentadbir pengurus meta jawatan tunggal🎜 🎜Kelas Pentadbiran Pengurus Meta Tunggal mempunyai satu tanggungjawab: fungsi yang ditentukan untuk memaparkan kotak meta dan gayanya untuk papan pemuka. 🎜
<?php

/**
 * The Single Post Meta Manager Admin defines all functionality for the dashboard
 * of the plugin
 *
 * @package SPMM
 */

/**
 * The Single Post Meta Manager Admin defines all functionality for the dashboard
 * of the plugin.
 *
 * This class defines the meta box used to display the post meta data and registers
 * the style sheet responsible for styling the content of the meta box.
 *
 * @since    1.0.0
 */
class Single_Post_Meta_Manager_Admin {

    /**
	 * A reference to the version of the plugin that is passed to this class from the caller.
	 *
	 * @access private
	 * @var    string    $version    The current version of the plugin.
	 */
	private $version;

	/**
	 * Initializes this class and stores the current version of this plugin.
	 *
	 * @param    string    $version    The current version of this plugin.
	 */
	public function __construct( $version ) {
		$this->version = $version;
	}

	/**
	 * Enqueues the style sheet responsible for styling the contents of this
	 * meta box.
	 */
	public function enqueue_styles() {

		wp_enqueue_style(
			'single-post-meta-manager-admin',
			plugin_dir_url( __FILE__ ) . 'css/single-post-meta-manager-admin.css',
			array(),
			$this->version,
			FALSE
		);

	}

	/**
	 * Registers the meta box that will be used to display all of the post meta data
	 * associated with the current post.
	 */
	public function add_meta_box() {

		add_meta_box(
			'single-post-meta-manager-admin',
			'Single Post Meta Manager',
			array( $this, 'render_meta_box' ),
			'post',
			'normal',
			'core'
		);

	}

	/**
	 * Requires the file that is used to display the user interface of the post meta box.
	 */
	public function render_meta_box() {
		require_once plugin_dir_path( __FILE__ ) . 'partials/single-post-meta-manager.php';
	}

}

请注意,上面的类只有很少的功能细节。主要是,该类维护对插件版本的引用、用于设置元框样式的样式表以及实际渲染元框所需的函数。

回想一下,所有这些都是在核心插件文件和加载器中设置的。这有助于解耦插件中存在的逻辑,以便每个类都可以专注于其主要目的。

当然,插件的最后一部分依赖于包含显示元框所需标记的实际部分文件。

单个帖子元管理器部分

<?php
/**
 * Displays the user interface for the Single Post Meta Manager meta box.
 *
 * This is a partial template that is included by the Single Post Meta Manager
 * Admin class that is used to display all of the information that is related
 * to the post meta data for the given post.
 *
 * @package    SPMM
 */
?>
<div id="single-post-meta-manager">

    <?php $post_meta = get_post_meta( get_the_ID() ); ?>
	<table id="single-post-meta-manager-data">
	<?php foreach ( $post_meta as $post_meta_key => $post_meta_value ) { ?>
		<tr>
			<td class="key"><?php echo $post_meta_key; ?></td>
			<td class="value"><?php print_r( $post_meta_value[0] ); ?></td>
		</tr>
	<?php } ?>
	</table>

</div><!-- #single-post-meta-manager -->

这应该是相对不言自明的;但是,为了完整起见,请注意此文件获取当前帖子 ID(通过使用 get_the_ID() 函数),读取帖子元数据,然后迭代它构建一个表显示键和值。

完成插件

至此,我们已经完成了插件的实现。从实施面向对象的编程实践,到记录代码。

您可以在 GitHub 上获取该插件的最终版本;但是,我们将在更多帖子中继续进行面向对象的讨论,以便我们可以探索一些更高级的主题,例如继承、抽象和其他主题。

同时,如果您对该插件有疑问或意见,请随时在评论中留下!

Atas ialah kandungan terperinci Plugin WordPress Teruskan Dokumentasi: Pengaturcaraan Berorientasikan Objek II. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn