wordpress-phoenix/abstract-plugin-base

PHP 类,用于在构建 WordPress 插件时扩展,让您遵循智能插件设置标准。

2.6.4 2020-03-05 16:42 UTC

This package is auto-updated.

Last update: 2024-09-10 03:26:40 UTC


README

作为基类使用,帮助我们标准化构建 WordPress 插件的方式。

CircleCI 构建: CircleCI

目录

安装

您可以使用这个库从头开始创建一个新的插件,或者使用这个库增强现有的插件。阅读完安装说明后,您应该知道该选择哪个方向。

Composer 风格(推荐)

  1. 使用 which composer 确认您的开发环境中已安装 composer。如果 CLI 没有打印任何路径,您需要 安装 Composer
  2. 将 CLI 工作目录设置为 wp-content/plugins/{您的插件名称}
  3. 通过 composer 命令行安装 Abstract_Plugin 类,如下所示:
    composer require wordpress-phoenix/abstract-plugin-base
  4. 请查看下面的示例代码,了解如何将此库包含到您的插件中。

手动安装

  1. https://api.github.com/repos/WordPress-Phoenix/abstract-plugin-base/zipball 下载此存储库的最新副本
  2. 解压 zip 文件,并将 PHP 文件复制到您的插件项目中。
  3. 在您的插件中包含该文件。

使用

为什么在构建插件时要使用这个库呢?

通过使用面向对象原则构建插件,并扩展此 Plugin_Base 类对象,您将能够快速有效地构建插件,使其易于开始,但又能在不改变其架构的情况下扩展复杂功能。

即时功能包括

  • 内置 SPL 自动加载,适用于您的包含文件夹,如果您遵循 WordPress codex 命名标准为类文件命名。
  • 模板类为您提供标准插件初始化的最佳实践。
  • 最小化主插件文件所需的代码和维护。
  • 协助 WordPress 插件开发新手在文件/文件夹架构方面。
  • 通过以相同的架构开始所有插件,我们为开发社区创建了一个更好的标准。

主插件文件和所需的插件类文件的简单示例

custom-my-plugin.php:

<?php
/**
 * Plugin Name: Custom My Plugin
 * Plugin URI: https://github.com/
 */

// Avoid direct calls to this file, because now WP core and framework has been used
if ( ! function_exists( 'add_filter' ) ) {
	header( 'Status: 403 Forbidden' );
	header( 'HTTP/1.1 403 Forbidden' );
	exit();
}

// Create plugin instance on plugins_loaded action to maximize flexibility of wp hooks and filters system.
include_once 'vendor/autoload.php';
include_once 'app/class-my-plugin.php';

Custom\My_Plugin\App::run( __FILE__ );

app/class-app.php:

<?php

namespace Custom\My_Plugin;

use WPAZ_Plugin_Base\V_2_6\Abstract_Plugin;

/**
 * Class App
 */
class App extends Abstract_Plugin {

	public static $autoload_class_prefix = __NAMESPACE__;

	protected static $current_file = __FILE__;

	public static $autoload_type = 'psr-4';

	// Set to 2 when you use 2 namespaces in the main app file
	public static $autoload_ns_match_depth = 2;

	public function onload( $instance ) {
		// Nothing yet
	}

	public function init() {
		do_action( static::class . '_before_init' );

		// Do plugin stuff usually looks something like
		// $subclass = new OptionalAppSubfolder\Custom_Class_Subclass();
		// $subclass->custom_plugin_function();

		do_action( static::class . '_after_init' );
	}

	public function authenticated_init() {
		if ( ! is_user_logged_in() ) {
			return;
		}

		// Ready for wp-admin - but not required
		//$this->admin = new Admin\App( $this );
	}

	protected function defines_and_globals() {
		// None yet.
	}

}