• 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

#6. Hooks, Filters, InterNation

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

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

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

    Имя плагина

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

    Файл Readme

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

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

    Лицензия

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

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

    Паттерн Singleton

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

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

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

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

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

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

    Ссылку на git репозиторий сбросить на почту

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

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

    Стандарты кодирования 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 — для новичков

    Хуки, Действия и Фильтры

    Как работают фильтры в WordPress

    apply_filters()

    add_filter()

    Пример использования фильтров

    Как работают события в WordPress

    do_action()

    add_action()

    Пример использования события

    Приоритеты выполнения функций

    Передача дополнительных параметров

    Как удалить хук: фильтр или событие

    Все функции хуков

    Loader

    Интернационализация

    Plugin API/Action Reference

    Plugin API/Filter Reference

    Все хуки ядра WordPress

    add_filter()

    add_filter()

    Справочник по функциям/add filter

    add_filter()

    apply_filters()

    apply_filters()

    add_action()

    add_action()

    remove_action()

    remove_filter()

    Как работают хуки в WordPress

    I18n for WordPress Developers

    Internationalization

    Plugin Handbook

    poedit

    Poedit — переводим темы и плагины WordPress

    Специальные функции интернационализации

    plugins_loaded

    plugins_loaded

    Blank-WordPress-Pot

    Хуки в WordPress это фильтры (filter) и события (action).

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

    1. apply_filters() — вызывается там, где применяется фильтр. Запускает добавленные к фильтру PHP функции.
    2. add_filter() — добавляет/прикрепляет PHP функции к указанному фильтру. Используется до того, как фильтр будет применен/вызван/запущен с помощью apply_filters(). Нужно это для того, чтобы, во время срабатывания фильтра, PHP функция уже была подключена к фильтру и обработала переданное значение (отфильтровала его).

    $myvar = apply_filters( $tag, $value, $var1, $var2, … );

    add_filter( $tag, $function_to_add, $priority, $accepted_args );

    Для работы события также используются две функции:

    1. do_action() — это и есть событие. Запускает/вызывает добавленные к событию функции. Вызывается там, где должно сработать событие.
    2. add_action() — добавляет/прикрепляет функции к событию, которое вызывается с помощью do_action(). Функция должна прикрепляться к событию до того, как событие произойдет. Нужно это, чтобы во время срабатывания события PHP функции уже были прикреплены к событию.

    do_action( $tag, $arg_a, $arg_b, … );

    add_action( ‘my_hook’, ‘do_my_hook’, 10, 2 );

    Примеры удаления хуков с приоритетами а также добавленных через PHP класс

    // Пример ——————————
    // Простое удаление
    add_filter(‘my_filter’, ‘function_name’);    // так добавлен
    remove_filter(‘my_filter’, ‘function_name’); // так нужно удалять
    // Пример ——————————
    // Удаление с приоритетом
    add_filter(‘my_filter’, ‘function_name’, 99);    // так добавлен
    remove_filter(‘my_filter’, ‘function_name’, 99); // так нужно удалять — приоритет должен совпадать…
    // Пример ——————————
    // Удаление статического метода класса
    add_filter(‘my_filter’, array(‘My_Class’, ‘method_name’), 15 );   // так добавлен
    remove_filter(‘my_filter’, array(‘My_Class’, ‘method_name’), 15); // так нужно удалять — приоритет должен совпадать…
    // Пример ——————————
    // Удаление не статического метода класса, который добавлен с использованием $this
    class A{
    function __construct(){
    add_action(‘my_action’, array( & $this, ‘method_name’), 15 );   // так добавлен
    }
    function method_name(){  echo ‘Привет!’;  }
    }
    $class = new A; // экземпляр
    // для удаления нужно найти переменную в которую был сохранен экземпляр класса при создании, сейчас это $class
    remove_action(‘my_action’, array( $class, ‘method_name’), 15 );   // так нужно удалять
    // Пример ——————————
    // Удалить хук добавленный лямбда-функцией (замыканием) невозможно!
    add_action(‘my_action’, function(){  echo ‘Привет!’;  } );   // так добавлен
    // никак не удалить, даже так:
    remove_action(‘my_action’, function(){  echo ‘Привет!’;  });

    Все функции хуков

    Функция Описание
    add_action Регистрирует хук-событие. При регистрации указывается PHP функция, которая сработает в момент события, которое вызывается с помощью do_action().
    did_action Получает число, сколько раз было выполнено данное событие (хук).
    do_action Создает событие (зацепку для произвольной функции). Чтобы функция сработала в момент события её нужно подключить к этому событию с помощью функции add_action().
    do_action_ref_array Создает хук (действие) для зацепки функции. Аргументы передаются из массива.
    has_action Проверяет была ли зарегистрирована функция для хука (действия).
    remove_action Удаляет функцию прикрепленную к указанному хуку (событию).
    add_filter Прикрепляет указанную PHP функцию к указанному хукe-фильтру. Так, во время срабатывания фильтра значение будет обработано указанной PHP функцией.
    apply_filters Применяет прикрепленную к указанному фильтру PHP функцию. Прикрепляется функция с помощью add_filter().
    apply_filters_ref_array Выполняет функции прикрепленные к указанному хуку (фильтру). Параметры передаются в массиве.
    current_filter Получает название текущего действия или фильтра.
    doing_filter Проверяет обрабатывается ли указанный хук (фильтр или событие), в текущий момент.
    has_filter Проверяет была указана дли для фильтра какая-нибудь функция, т.е. имеется ли указанный хук.
    remove_all_filters Удаляет все хуки у указанного фильтра.
    remove_filter Удаляет указанную функцию прикрепленную к указанному фильтру.

    Специальные функции интернационализации

    Функция Описание
    __() Переводит указанный текст, используя файл перевода и возвращает его для обработки.
    _e() Переводит указанный текст, используя файл перевода и выводит его на экран.
    _n() Выбирает строку, которая будет использована для перевода единственного или множественного числа переданного в функцию (1 комментарий, 2 комментария). Функция локализации.
    _x() Переводит указанный текст, на основе указанного контекста. Использует файл перевода.
    _ex() Функция _ex() является полным аналогом функции _x(), с единственным исключением, что _x() — возвращает результат, а _ex() выводит его на экран.
    date_i18n() Получает локализованную дату (переведенную на текущий язык) из переданного штампа времени unix. Локализация PHP функции date().
    esc_attr__() Переводит с использованием функции esc_attr().
    esc_attr_e() Выводит переведенный текст, прежде очищенный функцией esc_attr().
    esc_html__() Переводит строку заменяя в ней спецсимволы на HTML сущности. Возвращает текст, которой можно отображать в HTML как HTML код.
    esc_html_e() Переводит строку и заменяет в ней спецсимволы на HTML сущности. Выводит на экран текст, которой можно отображать в HTML как HTML код.
    get_locale() Устанавливает глобальную переменную $locale и получает текущую локаль (индекс языка сайта). По умолчанию ‘en_US’.
    get_user_locale() Получает локаль (язык перевода) текущего или указанного пользователя.
    is_locale_switched() Проверяет была ли переключена локаль (язык перевода), была ли использована функция switch_to_locale().
    load_child_theme_textdomain() Загружает файл перевода дочерней темы (.mo) в память, для дальнейшей работы с ним.
    load_plugin_textdomain() Загружает строку для перевода плагина.
    load_textdomain() Подключает домен и .mo файл в данные локализации.
    load_theme_textdomain() Загружает файл перевода темы (.mo) в память, для дальнейшей работы с ним.
    switch_to_locale() Позволяет программно переключить язык сайта.
    translate() Получает перевод указанного текста.
    unload_textdomain() Выгружает (удаляет, отменяет) подключенный файл перевода.

    Установка заголовков перевода

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

    Text Domain используется для обозначения текста, принадлежащего плагину, это уникальный идентификатор, который обеспечивает возможностью различать все загруженные переводы и должен совпадать со slug плагина. Например, если главный файл плагина называется step-by-step-development-plugin.php и он содержится в папке step-by-step-development-plugin, то Text Domain должен быть step-by-step-development-plugin.

    Domain Path это папка, в которой WordPress будет искать файлы перевода .mo. По умолчанию, WordPress ищет файлы переводов в корневой папке плагина. Однако размещение файла перевода в корневой папке может дезорганизовать структуру плагина.
    Если вы хотите хранить файлы перевода в другой папке, например: /languages, необходимо сообщить об этом WordPress, используя заголовок Domain Path.

    Отредактируем основный файл плагина step-by-step-development-plugin.php

    /*
    Plugin Name: Step By Step Development Plugin

    …

    Author URI: https://www.linkedin.com/in/solomashenkoroman/
    Text Domain: step-by-step-development-plugin
    Domain Path: /languages/
    License: A «Slug» license name e.g. GPL2

    …

    Имя текстового домена также используется для формирования имени MO-файла перевода плагина.

    Загружаем строку для перевода плагина load_plugin_textdomain, на этапе выполнения действия plugins_loaded.

    <?php load_plugin_textdomain( $domain, $deprecated, $plugin_rel_path ) ?>
    Если путь не указан, то им будет корневая директория плагинов.

    .mo файл должен называться: $domain-локаль, где локаль это код языка или страны. Например, немецкая локаль — de_DE, русская — ru_RU. Если $domain (ключ файла переводов) my-plugin, то русские .mo и .po файлы должны назваться: my-plugin-ru_RU.mo и my-plugin-ru_RU.po.

    Вызывать функцию нужно через хук plugins_loaded.

    Генерация POT-файла для плагина или темы

    Для этого предназначена утилита xgettext, как часть функциональности gettext. Сначала необходимо установить пакет gettext (если вы хотите пользоваться функциями интернационализации). Если ваш плагин зарегистрирован в официальном репозитории, для генерации файла используйте инструмент Admin->Generate POT file в админ-панели репозитория.

    Можно скачать пустой шаблон POT файла https://github.com/fxbenard/Blank-WordPress-Pot в папку languages плагина.

    Вместе с шаблоном POT файла идет файлик How-to-use-a-pot-file.txt в нем описано что нужно сделать чтобы создать файл перевода:

    1. Открыть программу Poedit
    2. Теперь нам нужно создать POT файл на основе пустого шаблона POT, который мы скачали: Файл->Создать из POT файла
    3. Выбираем шаблон POT файла
    4. Создадим POT файл для русской локализации ru_RU: step-by-step-development-plugin-ru_RU.po, английской: step-by-step-development-plugin-en_US.po

    Теперь в Poedit откроем файл step-by-step-development-plugin-ru_RU.po или step-by-step-development-plugin-en_US.po. Обновим содержание, добавляем перевод и сохраняем.

    Формат английского языка

    Categories : Word Press, www

    • « Previous Post
    • Next Post »

    Discussions

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

      — в основном файле плагина wp-my-homework.php добавил 2 заголовка: Text Domain и Domain Path

      /*
      Plugin Name: WP My Home Work Plugin

      …

      Author URI: https://www.linkedin.com/in/rostyslav-naryzhniak-839513150/
      Text Domain: wp-my-homework
      Domain Path: /languages/
      License: A “Slug” license name e.g. GPL2

      …

      — подключил класс includes\common\HomeWorkLocalization который будет отвечать за загрузку файлов перевода
      namespace includes\common;

      class HomeWorkLocalization
      {
      private static $instance = null;
      private function __construct() {
      add_action(‘plugins_loaded’, array(&$this, ‘localization’));
      }
      public static function getInstance() {

      if ( null == self::$instance ) {
      self::$instance = new self;
      }

      return self::$instance;

      }

      public function localization(){
      /**
      * load_plugin_textdomain( $domain, $deprecated, $plugin_rel_path )
      * $domain — Уникальный идентификатор для получения строки перевода. (константа STEPBYSTEP_PlUGIN_TEXTDOMAIN
      * заданая в файле config-path.php)
      * $deprecated — Отмененный аргумент, работает до версии 2.7. Путь подобный ABSPATH, до .mo файла.
      * $plugin_rel_path — Путь (с закрывающим слэшем) до каталога .mo файлов относительно WP_PLUGIN_DIR.
      * Этот аргумент следует использовать вместо $abs_rel_path.
      * (константа STEPBYSTEP_PlUGIN_DIR_LOCALIZATION заданая в файле config-path.php)
      */
      load_plugin_textdomain(STEPBYSTEP_PlUGIN_TEXTDOMAIN, false, STEPBYSTEP_PlUGIN_DIR_LOCALIZATION);
      }
      }

      Вызвал класс includes\common\HomeWorkLocalization в загрузчике классов includes\common\HomeWorkAutoLoad в методе all()

      /**
      * Метод будет срабатывать везде
      */
      public function all(){
      HomeWorkLocalization::getInstance();
      HomeWorkExampleAction::newInstance();
      }

      — скачал пустой шаблон POT файла https://github.com/fxbenard/Blank-WordPress-Pot в папку languages плагина

      — сгенерировал файл POT для русской локализации ru_RU (Poedit), обновил сайт и сохранил перевод

    • 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 © Уроки программирования