• CSS
    • ПРОГРАММИРОВАНИЕ (CODING)
    • Emmet, ul, li, table, form
    • Style, hover, child
    • CSS Hat, font, background
    • Reset, margin, padding, float
    • Base64, relative, z-index
    • Google Fonts, PSD
    • Brackets, Bootstrap
    • Script, src, comments
    • jQuery, Slick Js, Tooltip
    • Bootstrap, Slick Nav, @media
    • Mobile Vew, Font Awesome
    • SASS, Bootstrap
    • Flexbox, Slider
  • Word Press
    • #1. Introduction to WordPress
    • #2. WordPress Files Configuration
    • #3. Kernel Review. Codex
    • #4. Standards of Encoding
    • #5. Develop a plugin, introduction
    • #6. Hooks, Filters, InterNation
    • #7. Adding Admin Menus, JS, CSS
    • #8. HTTP API, Shortcodes, Transients
    • #9. Options API, Settings API
    • #10. Database API, $wpdb object
    • #11. Ajax. Widget API. Dashboard API
    • #12. Post Type. Taxonomies. Metadata
    • #13. Theme Development. Basics
    • #14. Loop. Template. WP_Query
    • #15. File functions.php – I
    • #16. File functions.php – II
    • #17. Child Theme. Shortcode. TinyMCE
    • #18. Frameworks. Blank Theme
    • #19. Framework. Underscores. Unyson
    • #20: Framework Unyson. Options
    • #21. Extensions, Components, Manifest
    • #22. Unyson: Built-in Extensions
    • #23. Unyson: Helpers, Filters & Actions
    • #24. WC: Installation & Updating
    • #25. WC: Settings & Options
    • #26. WC: Product Setup
    • #27. WC: Sell Products, Order
    • #28. WC: Theming
    • #29. WC: Extending
    • #30. WC: Extending
  • PHP
    • Laravel, MVC, Composer
    • FW Yii2
  • JS
    • JS
    • React, Angular
  • Freelance
  • Projects
    • Useful Products
      • Free WordPress Themes (WP)
      • Free CSS templates (CSS, HTML)
      • Стартовая тема Word Press (WP)
    • Project
      • Practic Task
      • Real Democracy Game
      • Research Journal
      • Qubot
      • Cyber-street
      • Amatue

#5. Develop a plugin, introduction

Rostyslav - 7 декабря, 2017 - One comment

    Создание плагина

    Компоновка плагина

    Имя плагина

    Файлы плагина

    Файл Readme

    Заголовки плагина

    Стандартная информация о плагине

    Лицензия

    Программирование плагина

    Класс плагина

    Паттерн Singleton

    Определение путей

    Функции активации, деактивации и удаление

    Автоматическая загрузка классов

    Создать публичный репозиторий на github

    Создать свой плагин

    Проект вести на github

    Документация для разработчика

    Написание плагина

    Стандарты кодирования WordPress

    Plugin Resources

    Plugin API

    Plugins

    Plugin Handbook

    File Header

    Design Patterns in WordPress: The Singleton Pattern

    Паттерн проектирования Singleton на PHP

    register_activation_hook

    register_deactivation_hook

    register_uninstall_hook

    Основы Git

    Git — для новичков

     

    Создание плагина

    • Компоновка плагина

    • Заголовки плагина

    • Программирование плагина

    Пример плагина: github.com/SolomashenkoRoman

    Компоновка плагина:

    • /step-by-step-development-plugin (директория плагина)
      • step-by-step-development-plugin.php (основной php-файл плагина )
      • uninstall.php (файл отмены установок плагина)
      • /includes (папка для включений PHP)
      • /assets
        • /js (папка для файлов JavaScript)
        • /css (папка для файлов стилей)
        • /images (папка для изображений плагина)

    Файл Readme

    Заголовок плагина:

    <?php
    /*
    Plugin Name: Название плагина
    Plugin URI: http://страница_с_описанием_плагина_и_его_обновлений
    Description: Краткое описание плагина.
    Version: Номер версии плагина, например: 1.0
    Author: Имя автора плагина
    Author URI: http://страница_автора_плагина
    */
    ?>

    Например:

    /*
    Plugin Name: Step By Step Development Plugin
    Plugin URI: https://github.com/SolomashenkoRoman/step-by-step-development-plugin
    Description: Step by step development of the plugin.
    Version: 1.0
    Author: romansolomashenko
    Author URI: https://www.linkedin.com/in/solomashenkoroman/
    License: A «Slug» license name e.g. GPL2
    */

    Лицензия:

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

    <?php
    /*  Copyright ГОД  ИМЯ_АВТОРА_ПЛАГИНА  (email: E-MAIL_АВТОРА)

       This program is free software; you can redistribute it and/or modify
       it under the terms of the GNU General Public License as published by
       the Free Software Foundation; either version 2 of the License, or
       (at your option) any later version.

       This program is distributed in the hope that it will be useful,
       but WITHOUT ANY WARRANTY; without even the implied warranty of
       MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
       GNU General Public License for more details.

       You should have received a copy of the GNU General Public License
       along with this program; if not, write to the Free Software
       Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
    */
    ?>

    Паттерн Singleton:

    namespace includes;
    class StepByStepPlugin
    {
       private static $instance = null;
       private function __construct() {   }
       public static function getInstance() {
           if ( null == self::$instance ) {
               self::$instance = new self; }
           return self::$instance;   } 

    }
    StepByStepPlugin::getInstance();

    Для определения URL к любому файлу в директории плагина существует функция plugins_url() :

    <?php echo ‘<img src=»’ .plugins_url( ’images/icon.png’, __FILE__ ). ?>

    Видно, что функция plugins_url( ) принимает два параметра. Первый параметр это путь относительно URL плагина, второй  файл плагина, на который вы хотите
    сослаться

    WordPress снабжен различными функциями для определения URL:

    • admin_url() — администраторский URL (http://…/my-first-site-en/wp-admin/).
    • site_url() — URL сайта для текущего сайта (http://…/my-first-site-en/).
    • home_url() — домашний URL текущего сайта (http://…/my-first-site-en/).
    • includes_url() — URL директории Includes (http://…/my-first-site-en/wp-includes/).
    • content_url() — URL директории Content ( http:/…/my-first-site-en/wp-content/).
    • wp_upload_dir() — возвращает массив с локальной информацией по сконфигурированной директории загрузок.

    Categories : Word Press, www

    • « Previous Post
    • Next Post »

    Discussions

    1. admin 8 декабря, 2017

      Скомпоновал файловую систему плагина (из папок и отдельных файлов):

      — wp-my-homework.php (в папке плагина основной php-файл)
      — uninstall.php (файл отмены установок плагина)
      — /includes (папка включений PHP)
      — /assets/js (папка для файлов JavaScript)
      — /assets/css (папка для файлов стилей)
      — /assets/images (папка для изображений)
      — /includes/common/MyHomeWorkAutoload.php (автоматическая загрузка классов)
      — /includes/MyHomeWorkPlugin.php (первый класс ядра плагина)
      — readme.txt (стандартная информация)
      — config-path.php (конфигурация путей плагина)
      — /languages (папка локализации языков плагина)

      Разместил стандартный заголовок плагина в основном файле wp-my-homework.php,
      подключил следующие файлы:

      require_once plugin_dir_path(__FILE__) . ‘/config-path.php’;
      require_once HOMEWORK_PlUGIN_DIR.’/includes/common/MyHomeWorkAutoload.php’;
      require_once HOMEWORK_PlUGIN_DIR.’/includes/MyHomeWorkPlugin.php’;

      Установил конфигурацию путей плагина в config-path.php:

      define(«HOMEWORK_PlUGIN_DIR», plugin_dir_path(__FILE__));
      define(«HOMEWORK_PlUGIN_URL», plugin_dir_url( __FILE__ ));
      зачистил ярлык плагина:
      define(«HOMEWORK_PlUGIN_SLUG», preg_replace( ‘/[^\da-zA-Z]/i’, ‘_’, basename(HOMEWORK_PlUGIN_DIR)));
      define(«HOMEWORK_PlUGIN_TEXTDOMAIN», str_replace( ‘_’, ‘-‘, HOMEWORK_PlUGIN_SLUG ));
      локализовал версию, опции, папку с переводами
      define(«HOMEWORK_PlUGIN_OPTION_VERSION», HOMEWORK_PlUGIN_SLUG.’_version’);
      define(«HOMEWORK_PlUGIN_OPTION_NAME», HOMEWORK_PlUGIN_SLUG.’_options’);
      define(«HOMEWORK_PlUGIN_DIR_LOCALIZATION», plugin_basename(HOMEWORK_PlUGIN_DIR.’/languages/’));

      Определил следующие инструкции в файле первого класса плагина (/includes/MyHomeWorkPlugin.php):

      namespace includes;

      class MyHomeWorkPlugin
      {
      protected function __construct() {
      }
      }

      — добавил в этот класс паттерн Singleton

      — добавил в этот класс функцию activation с влючением лога ошибок (дебага) и хук активации:

      function homework_activate() {
      // debug.log
      error_log(‘plugin ‘.HOMEWORK_PlUGIN_NAME.’ activation’);
      }

      — добавил в этот класс функцию homework_deactivate с выключением лога ошибок:

      static public function homework_deactivate() {
      // debug.log
      error_log(‘plugin ‘.HOMEWORK_PlUGIN_NAME.’ deactivation’);
      }

      — а также хуки активации и дезактивации в wp-my-homework.php (в папке плагина основной php-файл):

      register_activation_hook( __FILE__, ‘homework_activate’ );
      register_deactivation_hook( __FILE__, ‘homework_deactivate’ );

      — в завершение описания класса (MyHomeWorkPlugin) реализовал команду возврата singleton (одиночного экземпляра):

      MyHomeWorkPlugin::getInstance();

      — подключил автоматическую загрузку классов в файле /includes/common/MyHomeWorkAutoload.php:

      namespace includes\common;
      class HomeWorkAutoload
      {
      private static $instance = null;
      private function __construct() {
      spl_autoload_register(array($this, ‘autoloadNamespace’));
      }

      public static function getInstance(){
      if ( null == self::$instance ) {
      self::$instance = new self;
      }
      return self::$instance;
      }

      /**
      * @param $HomeWorkAutoload
      */
      public function autoloadNamespace($HomeWorkAutoload){
      $fileClass = HOMEWORK_PlUGIN_DIR.’/’.str_replace(«\\»,»/»,$HomeWorkAutoload).’.php’;
      if (file_exists($fileClass)) {
      if (!class_exists($fileClass, FALSE)) {
      require_once $fileClass;
      }
      }
      }
      }
      HomeWorkAutoload::getInstance();

      Активировал новый плагин

    • Word Press
      • #1. Introduction to WordPress
      • #2. WordPress Files Configuration
      • #3. Kernel Review. Codex
      • #4. Standards of Encoding
      • #5. Develop a plugin, introduction
      • #6. Hooks, Filters, InterNation
      • #7. Adding Admin Menus, JS, CSS
      • #8. HTTP API, Shortcodes, Transients
      • #9. Options API, Settings API
      • #10. Database API, $wpdb object
      • #11. Ajax. Widget API. Dashboard API
      • #12. Post Type. Taxonomies. Metadata
      • #13. Theme Development. Basics
      • #14. Loop. Template. WP_Query
      • Lecture #15. functions.php – I
      • Lecture #16. functions.php – II
      • #17. Child Theme. Shortcode. TinyMCE
      • #18. Frameworks. Blank Theme
      • #19. Framework. Underscores. Unyson
      • #20: Framework Unyson. Options
      • #21. Extensions, Components, Manifest
      • #22. Unyson: Built-in Extensions
      • #23. Unyson: Helpers, Filters & Actions
      • #24. WC: Installation & Updating
      • #25. WC: Settings & Options
      • #26. WC: Product Setup
      • #27. WC: Sell Products, Order
      • #28. WC: Theming
      • #29. WC: Extending
      • #30. WC: Extending
    • CSS
      • ПРОГРАММИРОВАНИЕ (CODING)
      • Emmet, ul, li, table, form
      • Style, hover, child
      • CSS Hat, font, background
      • Reset, margin, padding, float
      • Base64, relative, z-index
      • Google Fonts, PSD
      • Brackets, Bootstrap
      • Script, src, comments
      • jQuery, Slick Js, Tooltip
      • Bootstrap, Slick Nav, @media
      • Mobile Vew, Font Awesome
      • Flexbox, Slider
      • SASS, Bootstrap
    • Cron
    • Framework Yii2
    • React, Angular
    • JavaScript
    • Freelance

    Generic selectors
    Exact matches only
    Search in title
    Search in content
    Search in posts
    Search in pages
    Filter by Categories
    CSS
    JavaScript
    Word Press
    www

    2019 Rostyslav N Design © Уроки программирования