Intereting Posts
Измените $ content_width на основе размера экрана (functions.php) Есть ли плагины, которые мешают административной части виджета Rss? Функция Javascript, вызванная слишком рано в PHP-скрипте Как сделать миниатюру Post Stay Animated Сравните старый get_theme_mod ($ name) с новым значением get_theme_mod ($ name) Как использовать функцию checked () для проверки непустого var Получить атрибуты shortcode вне функции shortcode Найдите фильтр pre_get_posts, который может обрабатывать несколько типов сообщений и категорий? Удалять изображения (файлы), которые были сгенерированы при использовании add_image_size () Запретить пользователям в бэкэнде видеть уведомления WP / Plugin и обновлять аннуитеты? Если для функции требуется add_action ('init'), как я могу запустить ее только один раз при активации плагина? Пользовательский архив типа сообщения и файлы single.php не работают Пять сообщений из категории в нижнем колонтитуле add_action, содержащий первый аргумент admin_print_scripts- $ page Лучшая практика – страницы – ACF или встроенное кодирование

Советы по структуре плагина

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

На данный момент плагин OOP основан на одном классе. Тем не менее, он становится весьма неуклюжим с множеством функций в одном файле. Мне интересно, было бы лучше разделить отдельные аспекты на разные классы, например, один класс для front end, один для back end и один для проверки параметров.

Трудность, с которой я сталкиваюсь, – лучший способ вызвать каждый класс и как обрабатывать вспомогательные функции. Мое первоначальное мышление состояло в том, чтобы иметь «родительский» класс, который затем «требовал» соответствующего класса в зависимости от ряда проверок (например, is_admin ). Моя трудность заключается в том, что делать со вспомогательными методами и переменными. Если я поместил их в родительский класс, как мне получить доступ к ним в дочернем классе?

Любые мысли были бы оценены.

Solutions Collecting From Web of "Советы по структуре плагина"

Вы должны ограничить свои вспомогательные функции. В довольно большом плагине, который я пишу сейчас (~ 50 классов), у меня есть только три вспомогательные функции, помещенные в основной файл плагина:

 /** * Delete plugin option on deactivation. * * @return boolean */ function t5_delete_option() { return delete_site_option( 'plugin_t5' ); } /** * Load a class from /inc/ directory. * * @since 2012.10.26 * @param string $class Class name * @param boolean $create_object Return an object or nothing * @return bool|$class */ function t5_load_class( $class, $create_object = FALSE ) { $path = plugin_dir_path( __FILE__ ) . "inc/class-$class.php"; if ( ! file_exists( $path ) ) return FALSE; class_exists( $class ) || require_once $path; if ( $create_object ) return new $class; return TRUE; } if ( ! function_exists( 'pre_print' ) ) { /** * Print debug output * * @since 2012.11.03 * @param mixed * @return void */ function pre_print( $var, $before = '' ) { $export = var_export( $var, TRUE ); $escape = htmlspecialchars( $export, ENT_QUOTES, 'utf-8', FALSE ); print "$before<pre>$escape</pre>"; } } 

Все остальные классы помещаются в каталог /inc/ (не мой выбор, я должен работать в рамках существующих правил для этого).

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

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

Основной контроллер собирает некоторые данные (URL-адрес плагина, текущий IP-адрес пользователя, экземпляр класса пользовательской базы данных …) и передает эти данные как объект списка свойств вызываемым классам. Таким образом, никогда не требуется глобальный доступ к чему-либо, кроме загрузчика классов (я не использую автозагрузчик) и крошечную функцию отладки.