наран / билдплатформа
Билдплатформа кода Naran для плагинов/тем WordPress.
Установки: 74
Зависимости: 0
Безопасность: 0
Звезды: 3
Наблюдатели: 1
Вкладки: 1
Тип:wordpress-plugin
Requires (Dev)
README
Билдплатформа кода для разработки плагинов WordPress. Включает в себя общие опыт, накопленный при разработке множества плагинов, чтобы предоставить основную структуру плагина.
Начало
Проверка требований
- WordPress 5.x и выше. Предпочтительно использовать последнюю версию.
- PHP 7.4 и выше.
Установка
Установка может быть выполнена с помощью composer. Ниже приведен пример создания директории 'boilerplate' в 'wp-content/plugin' и установки шаблонного кода.
composer create-project --no-dev naran/boilerplate
Если вы хотите создать директорию с другим именем, добавьте аргумент.
composer create-project --no-dev naran/boilerplate my-plugin
Если установка прошла успешно, composer запросит ввод пользователя для применения новых префиксов.
Please enter your new prefix (Enter 'exit' to skip):
Введите подходящий префикс. Если вы введете 'foo' в качестве префикса, вы получите проверку, как показано ниже. Нажмите 'y', чтобы выполнить изменения префиксов в именах файлов и коде.
Replace prefix from `npbc` to `foo`. Are you sure? [Y/n]
Префиксы должны соответствовать следующим правилам.
- При вводе можно использовать только строчные и прописные буквы, цифры, дефис (-) и подчеркивание (_).
- Первый символ префикса может быть только строчной или прописной буквой.
- Дефис или подчеркивание не могут использоваться дважды подряд.
- Префикс не может заканчиваться дефисом или подчеркиванием.
- Новый префикс не может содержать слово 'nbpc' или 'cpbn'.
- Максимальная длина префикса составляет 25 символов.
Префикс используется при замене кода или имен файлов следующим образом.
- Имена классов и констант состоят из прописных и строчных букв и подчеркиваний. Дефис заменяется подчеркиванием. (например: ABC_DEF)
- Имена функций и обычных строк состоят из строчных и прописных букв и подчеркиваний. Дефис заменяется подчеркиванием. (например: abc_def)
- Для правильной замены префикса в строках, заключенных в одинарные или двойные кавычки, используйте строчные и прописные буквы и дефисы. Подчеркивание заменяется дефисом. (например 'abc-def')
В будущем для выполнения можно запустить скрипт wp-content/plugin/boilerplate/bin/prefix-change.php
через CLI.
$ cd boilerplate
$ php bin/prefix-change.php myplugin # 접두 npbc를 myplugin 으로 변경.
$ php bin/prefix-change.php my-new-prefix myplugin # 접두 myplugin를 my-new-prefix 으로 변경.
Подробнее см. php bin/prefix-change.php --help
.
Массовое изменение версий
Версию можно синхронизировать на основе информации о версии в основном заголовке плагина. Например, если заголовок файла главного файла выглядит следующим образом,
<?php /* * Plugin Name: Sample * Description: Sample plugin. * Version: 1.4.2 */ // 이하 생략
Текущая версия плагина указана как 1.4.2. Однако это версия билдплатформы, и версия, которую вам нужно создать, может отличаться. Отредактируйте это число и, если необходимо, измените соответствующие переменные в файлах package.json
, composer.json
или в самом главном файле.
$ php bin/sync-version.php
* Target version: 1.4.2
...
Скрипт bin/sync-version.php
автоматически обнаружит файл, если в корневой директории плагина или темы существует файл style.css (тема), index.php (плагин) или {имя_директории}.php (плагин).
Если используется другое имя главного файла, введите путь в качестве первого аргумента.
$ php bin/sync-version.php /path/to/main/file.php # 메인 파일의 절대 혹은 상대 경로
...
В composer.json
уже настроена команда version
.
$ composer version
Использование очень просто.
Пример плагина
Установка билдплатформы
Рассмотрим создание плагина 'FOO' в качестве примера.
В директории 'wp-content/plugin' выполните следующее.
$ composer create-project naran/boilerplate foo
Creating a "naran/boilerplate" project at "./foo"
(...)
Please enter your new prefix (Enter 'exit' to skip): foo
Replace prefix from `nbpc` to `foo`. Are you sure? [Y/n] y
(...)
Все файлы будут заменены.
Редактирование файлов в корне
В корне содержатся различные файлы конфигурации плагина. Эти файлы содержат много информации о плагине и поэтому должны быть изменены сразу после установки.
Файл README.me
Файл README.md содержит базовый шаблон билдплатформы. Измените его.
Файл index.php
В файле index.php содержится заголовок плагина. Некоторые изменения уже выполнены, но还有一些 части требуют корректировки.
- Название плагина
- URI плагина
- Описание
- Версия
- Автор
- URI автора
И также измените число в const FOO_PRIORITY = 100;
на разумное значение. Это число используется в качестве базового приоритета для действий и фильтров в модуле.
Файл composer.json
composer.json также содержит базовые значения. Измените несколько пунктов.
- имя
- описание
- авторы
Файл package.json
Этот файл можно использовать, если используется Node. Измените несколько пунктов.
- имя
- описание
Заключение
После того как все файлы отредактированы, обновите все файлы в соответствии с версионным номером, определенным в заголовке плагина.
$ composer version
Конфигурация модуля
В файле foo/includes/class-foo-main.php
определен класс Foo_Main
. Этот файл является основным файлом плагина.
Перейдите к методу get_early_modules()
в классе. Этот метод возвращает связный массив, ключи которого являются идентификаторами модулей, а значениями — экземплярами модулей или классами, или анонимными функциями.
Создание модуля 'bar'
尝试创建bar模块。
创建文件 foo/includes/modules/class-foo-bar.php
。按照以下内容编写文件。为了明确效果,使用了wp_die()函数,请在非运行中的网站上执行。
<?php /** * FOO: Bar module */ if ( ! defined( 'ABSPATH' ) ) { exit; } if ( ! class_exists( 'FOO_Bar' ) ) { class FOO_Bar extends FOO_Main_Base { use FOO_Hook_Impl; public function __construct() { $this->add_action( 'init', 'init_callback' ); } public function init_callback() { wp_die( 'Intentionally stopped.' ); } } }
注册'bar'模块
目前bar模块还未工作。要使其工作,需要在主类中注册该模块。在FOO_Main类的get_early_modules()方法中注册模块。
protected function get_early_modules(): array { return [ /* 생략 */ 'bar' => FOO_Bar::class, ]; }
此外,在Foo_Main类的注释中添加有关bar模块访问的提示。添加如下@property-read Foo_Bar $bar
行。
/** * Class FOO_Main * * @property-read FOO_Admins $admins * @property-read FOO_Registers $registers * @property-read Foo_Bar $bar */ final class FOO_Main extends FOO_Main_Base
然后更新自动加载设置。
@composer dump-autoload
如果激活了插件,则由于wp_die()函数的原因,网站将输出“有意停止。”的消息并停止工作。
转换为动态模块
将bar模块以类名传递时,模块总是处于激活状态。但是,有时可能只想在有需要时才启用模块。
此时,修改Foo_Main::get_early_modules()
方法的内容如下。
protected function get_early_modules(): array { return [ /* 생략 */ 'bar' => function () { return new FOO_Bar(); }, ]; }
将类名字符串更改为创建Foo_Bar()实例的匿名函数。现在网站将按原样运行。也就是说,在明确调用bar模块之前,模块不会创建。
现在让我们加载bar模块。通过发送任意值作为GET参数来使其工作。在index.php中,在foo();
下方添加以下代码。
if ( isset( $_GET['foo'] ) && 'bar' === $_GET['foo'] ) { foo()->bar; }
网站可以正常工作,但如果在URL地址的GET参数中添加'foo=bar',则网站将再次输出“有意停止。”的消息并停止工作。
首先,介绍模块(早期模块)和后续模块(晚期模块)的区别。
早期模块,通过get_early_modules()
方法注册的模块的注册方式与后续模块,通过get_late_modules()
方法注册的模块的注册方式相同。但是,后续模块是在init
动作的低优先级回调中被调用的。
虽然这些模块会自动启动,但如果某些功能在核心注册后才能保证正常工作,则最好在get_late_modules()
方法中注册。
将Boilerplate作为主题使用
通过一些修改,可以轻松将其转换为主题的基本代码。
创建style.css文件
主题必须在主题的顶级目录中放置style.css
文件。以下是一个创建style.css
文件的示例。
/* Theme Name: Naran Boilerplate Code Theme URI: https://github.com/chwnam/naran-boilerplate-code Description: Naran boilerplate code for WordPress plugins/themes. Version: 1.3.4 Requires at least: 5.1.0 Requires PHP: 7.0 Tested up to: 5.4 Author: changwoo Author URI: https://blog.changwoo.pe.kr/ License: GPL v2 or later License URI: https://gnu.ac.cn/licenses/gpl-2.0.html Text Domain: npbc CPBN Version: 1.3.4 */
(可选) 添加Screenshot.png文件
默认图像大小为1200px * 900px。此图像用于主题列表。
创建functions.php文件
主题中PHP代码的入口点是functions.php
。因此,在主题顶级目录中创建functions.php文件,并将index.php
中的内容剪切粘贴。
然后进行重要收尾。在调用nbpc()
函数之前,插入{PREFIX}_THEME = true;
代码。如下所示。
<?php /* ABSPATH check */ if ( ! defined( 'ABSPATH' ) ) { exit; } require_once __DIR__ . '/vendor/autoload.php'; const NBPC_MAIN_FILE = __FILE__; const NBPC_VERSION = '1.3.4'; const NBPC_PRIORITY = 100; const NBPC_THEME = true; nbpc();
删除插件中的头部注释。这些内容已经移动到主题的style.css中。
创建index.php, header.php, footer.php
现在index.php是主题的模板。将其更改为主题模板,并创建header.php和footer.php文件。
使用{PREFIX}_Register_Theme_Support
在{PREFIX}_Registers类构造函数中调用assign_module()方法的参数中,取消注释以下部分。
// 'theme_support' =>{PREFIX}_Register_Theme_Support::class, // Only for themes.
解除注释。
前端模块映射
在{PREFIX}_Register_Theme_Support::map_front_modules()
方法中映射前端模块。映射的模块可以通过{prefix}_get_front_module()
函数获取。