Создание поддерживаемых мета-полей WordPress

17 января 2018

В настоящее время одним из наиболее распространенных шаблонов проектирования, если не самым распространенным шаблоном проектирования, используемым в веб-разработке, является тот, который используется MVC (или Model View Controller), но настолько популярен, что это не единственный способ,, фонды и другие библиотеки.

Пример: WordPress использует шаблон дизайна, управляемый событиями, для управления своей системой крюков. И хотя шаблоны проектирования не являются взаимоисключающими, вы скорее узнаете этот конкретный шаблон, потому что это делает WordPress такой гибкой, как есть.

Чтобы быть ясным, это не означает, что другие шаблоны не используются во всей его кодовой базе (или любой другой прикладной кодовой базе), они просто не так легко узнаваемы.

Кроме того, одна из вещей, к которой стремятся профессиональные разработчики, - это написать поддерживаемый код. Но поскольку кодовая база возраста и все больше и больше людей получают свою работу в кодовой базе, становится все труднее поддерживать одинаковый уровень организации, ясности и ремонтопригодности в соответствии с возрастом проекта.

Все вышеперечисленные идеи относятся к WordPress независимо от того, работаете ли вы над темами, плагинами, расширениями или каким-либо другим типом проекта. Дело в том, что важно убедиться, что вы следуете стандартам кодирования и соглашениям, изложенным для создания этих проектов.

Предположим, что вы работаете над плагином, который вводит настраиваемый мета-поле; однако этого недостаточно, чтобы ввести мета-поле. Вместо этого будут созданы группы связанных опций.

Здесь он начинает становиться более сложным. Всюду в этой серии мы собираемся сделать один способ, чтобы мы могли написать поддерживаемый код в WordPress с помощью примерного плагина, который вводит мета-поля, различные параметры и вкладку навигации на панели инструментов WordPress.

Организация мета-боксов

Когда вы планируете планировать варианты мета-боксов, у вас есть несколько доступных вариантов:

    Введите один мета-ящик для каждого параметра Введите один мета-ящик с вкладками, которые логически группируют все параметры

Для тех, кто использовал WordPress в течение длительного времени, вы, вероятно, знакомы с просмотром навигации с вкладками в панели управления, по крайней мере, в некоторой степени. Для тех, кто интересуется тем, как реализовать это не только программно, но и в удобной форме, мы будем смотреть, как это сделать в этой серии.

В частности, мы собираемся написать небольшой плагин WordPress, который вводит несколько полей, связанных с ними вариантов, которые сгруппированы по вкладкам, а затем мы представим еще несколько элементов, чтобы показать, как правильно и безопасно сохранять, дезинформировать и извлекать данные.

Где мы возглавили

Как и в большинстве сообщений, которые я пишу, мне нравится пытаться описать, что мы будем делать на высоком уровне, прежде чем мы действительно перейдем к коду. Это помогает обеспечить концептуальную основу того, куда мы направляемся, и помогает описать предстоящую серию статей, а также то, что мы будем делать на уровне кода.

Если ничего другого, это дает место для обозначения, поскольку мы продолжаем продвигаться по всей серии.

Прежде чем взглянуть на схему, я хочу упомянуть, что самый важный взнос этой конкретной статьи будет означать разделение проблем, а также то, почему мы решили сделать то, что мы «Мы сделали это, чтобы понять, как это помогает в ремонтопригодности.

С этой целью мы рассмотрим следующие несколько статей:

    Задание основы для плагина Определение всех параметров и их упорядочение в вкладках Чтобы реализовать каждый из параметров и вкладки вместе с мерами безопасности Все все это в действии

Как и в случае с разработкой, разбивка на более мелкие компоненты является абсолютно ключевой, так что для остальной части этого поста мы будем смотреть на шаги, необходимые для того, чтобы мы начали работать над плагином, который вводит мета-поле в стандартный почтовый тип Post.

Скелет плагина

Прежде чем двигаться дальше, давайте установим каталог нашего плагина. Это должно включать в себя следующее:

A файл для загрузки плагина Основный класс плагина Удаление того, как организованы исходные файлы Программа README

И, очевидно, мы должны убедиться, что каталоги хорошо организованы и что код ясен.

Чтобы сделать это хотя бы несколько практичным, мы будем называть этот плагин «Комментарий автора», который позволяет нам делиться несколькими откровенными заметками о том, что мы думали, использовали и записывали при написании сообщения.

Мы можем сделать это публично в будущем посте, основываясь на ваших отзывах, но пока мы планируем оставить его в бэкэнд.

С учетом сказанного, давайте начнем.

Начало работы с комментарием автора

Подготовка каталога

То, что нам нужно сделать, - это заглушить структуру каталогов, которую мы будем использовать для проекта. Вы увидите скриншот для этого ниже, после чего я опишу цель каждого каталога.

Корень каталога содержит два файла:

    README.md, который является стандартным README, который поставляется с плагином WordPress.
    authors-commentary.php, который отвечает за запуск плагина. Это файл начальной загрузки.

Затем у нас есть папка администратора. Этот каталог включает в себя:

    assets, который включает подкаталоги для обоих наших файлов JavaScript и CSS (мы будем использовать ванильный CSS в этой серии.
    class-authors-commentary.php, который будет в первую очередь класс, чем инкапсулирует большую часть нашей функциональности. views, который включает в себя подкаталог с именем partials. Директория представлений будет отвечать за отображение вкладок и включение всего содержимого для каждой вкладки на основе частичного. То есть каталог partials включает содержимое каждой вкладки.

Обратите внимание, что мы можем добавлять дополнительные каталоги для плагина по мере продвижения серии. То есть эта структура может быть изменена тем, что мы, вероятно, добавим или даже немного переместим контента, основанного на том, как продвигается плагин, но это базовая структура, которую нам нужно начать.

Создать файлы

Поскольку у нас есть основная структура каталогов и необходимые файлы на месте, мы «Готовы начать стабби некоторые из кода. Обратите внимание, что хотя плагин будет функционировать с точки зрения активации, он фактически не будет делать ничего, пока мы не начнем добавлять код в следующий набор статей.

С учетом сказанного мы продолжим и заполняем файлы, необходимые для того, чтобы подключить плагин и запустить его на панели инструментов WordPress.

Первое, что нам нужно сделать, это заполнить заголовок плагина, чтобы он включал в себя необходимый блок документации для WordPress для отображения плагина на панели управления:

<?php
/**
 * The plugin bootstrap file
 *
 * This file is responsible for starting the plugin using the main plugi
 * class file.
 *
 * @link              http://.tutsplus.com/tutorials/creating-maintainable-wordpress-meta-boxes--cms-22189
 * @since             0.1.0
 * @package           Author_Commentary
 *
 * @wordpress-plugi
 * Plugin Name:       Author Commentary
 * Plugin URI:        http://.tutsplus.com/tutorials/creating-maintainable-wordpress-meta-boxes--cms-22189
 * Description:       Allows authors to keep notes and track information and resources when drafting posts.
 * Version:           0.1.0
 * Author:            Tom McFarli
 * Author URI:        http://tommcfarlin.com
 * License:           GPL-2.0+
 * License URI:       http://www.gnu.org/licenses/gpl-2.0.txt
 * Text Domain:       author-commentary
 */
// If this file is called directly, abort.
if ( ! defined( 'WPINC' ) ) {
    die;
}

Конечный условный код гарантирует, что если кто-либо попытается получить доступ к файлу напрямую, сценарий прекратит выполнение.

Затем нам нужно убедиться, что основной файл плагина, который мы начали выше, знает о первом классе, который мы создали на предыдущем шаге. Для этого нам просто нужен простой оператор require_once.

Но прежде чем мы назовем require_once, нам нужен файл для включения, правильно? Для этого позвольте вам перейти в подкаталог admin и в классе class-author-commentary.php, мы добавим следующий код.

Комментарии не требуют пояснений, но я обязательно расскажу обо всем, что происходит после завершения кода кода:

<?php
/**
 * The dashboard-specific functionality of the plugin.
 *
 * @link       http://tutsplus.com/tutorials/creating-maintainable-wordpress-meta-boxes--cms-22189
 * @since      1.0.0
 *
 * @package    Author_Commentary
 * @subpackage Author_Commentary/admi
 */
/**
 * The dashboard-specific functionality of the plugin.
 *
 * Defines the plugin name, version, and two examples hooks for how to
 * enqueue the dashboard-specific stylesheet and JavaScript.
 *
 * @package    Author_Commentary
 * @subpackage Author_Commentary/admi
 * @author     Tom McFarlin <tom@tommcfarlin.com>
 */
class Author_Commentary_Admin {
    /**
     * The ID of this plugin.
     *
     * @since    0.1.0
     * @access   private
     * @var      string    $name    The ID of this plugin.
     */
    private $name;
    /**
     * The version of this plugin.
     *
     * @since    0.1.0
     * @access   private
     * @var      string    $version    The current version of this plugin.
     */
    private $version;
    /**
     * Initialize the class and set its properties.
     *
     * @since    0.1.0
     * @var      string    $name       The name of this plugin.
     * @var      string    $version    The version of this plugin.
     */
    public function __construct( $name, $version ) {
        $this->name = $name;
        $this->version = $version;
    }
}

Обратите внимание, что в приведенном выше коде все, что мы действительно сделали - помимо предоставления документации для нашего класса, свойств и конструктора, - это установить конструктор, который принимает параметр $ name и $ version.

Это будет полезно позже, когда мы импортируем зависимости и таблицы стилей JavaScript. На данный момент, однако, это все, что нам нужно для начала.

С этим мы можем вернуться к авторам commentary.php и написать код для запуска плагина.

Во-первых, мы будем использовать require_once для импорта класса, который мы только что создали:

<?php
/**
 * The core plugin class that is used to define the meta boxes, their tabs,
 * the views, and the partial content for each of the tabs.
 */
require_once plugin_dir_path( __FILE__ ) . 'admin/class-authors-commentary.php';

Затем мы создадим простую функцию и вызов функции для запуска процесса:

<?php
/**
 * Begins execution of the plugin.
 *
 * Everything for this particular plugin will be done so from within the
 * Author_Commentary/admin subpackage. This means that there is no reason to setup
 * any hooks until we're in the context of the Author_Commentary_Admin class.
 *
 * @since    0.1.0
 */
function run_author_commentary() {
    $author_commentary = new Author_Commentary_Admin( 'acme-plugin-name', '0.1.0' );
}
run_author_commentary();

Обратите внимание, что мы не определяем никаких крючков в этом файле. В конечном итоге все будет в субпакете - это помогает нам более эффективно отделять наши проблемы, тем самым делая код более пригодным для обслуживания, и это позволяет нам максимально приблизить наш код объектно-ориентированным.

Обратите внимание, что это определяет простую функцию, которая при вызове, как только активируется плагин, создает экземпляр класса Author_Commentary_Admin после передачи необходимых параметров $ name и $ version.

Прокладка фундамента

На этом этапе была заложена вся основа, которая поможет нам продвинуться вперед, работая над нашим плагином. Вы должны иметь возможность загрузить файл из GitHub, установить его в WordPress и активировать его.

Опять же, это ничего не отображает, но готовит базу кода для работы, которую мы начнем в следующей статье.

Если у вас есть какие-либо вопросы выше приведенного выше кода или в главе серии, не стесняйтесь оставлять комментарий; в противном случае я с нетерпением жду встречи с вами в следующем выпуске.