• 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

#8. HTTP API, Shortcodes, Transients

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

    HTTP API

    Что такое HTTP API?

    HTTP методы и ресурсы

    Функции HTTP API и отправка запроса

    Параметры функций

    Работа с API

    Shortcode API

    Что такое Shortcode?

    Функции Shortcode API

    Как создается Шорткод?

    Работа с Shortcode

    Transients API.

    Что такое Transients API?

    Функции Transients API

    Кэширование во временные опции (Transients)

    WordPress APIs

    HTTP API

    HTTP API

    Как работать с WordPress HTTP API

    HTTP API WordPress

    Transients API

    Shortcode API

    Создание шорткодов (shortcodes) WordPress

    Шорткоды WordPress

    Создание собственных шорткодов(shortcodes) для WordPress

    (это шорткод - http://wp.topme.be)

    HTTP API

    Браузер клиента приложения периодически отсылает и принимает HTTP-сообщения и таким образом загружается любая веб-страница. С помощью REST API — HTTP-сообщения позволяют к примеру обновлять записи или удалять данные о пользователе на веб-сайте.

    С версии WP 4.6 ядро WP_Http полностью заменили библиотекой Requests for PHP и теперь все запросы выполняются через нее.

    После установки констант в файле wp-config.php можно включить режим прокси:
    define(‘WP_PROXY_HOST’, ‘192.168.84.101’);
    define(‘WP_PROXY_PORT’, ‘8080’);
    define(‘WP_PROXY_BYPASS_HOSTS’, ‘localhost, www.example.com, *.wordpress.org’); 

    HTTP API можно без особого труда расширить, для работы с Twitter API, Google Maps API и т.д.

    Ресурсы и методы  HTTP API

    Ресурс — это URL, который указывает на объект в интернете (например пост) и есть ряд методов, с помощью которых можно с ним работать:

    GET — метод используется для получения ресурса и запросов к нему

    PUT — используется для изменения ресурса

    POST — для его создания

    DELETE — для удаления

    Использовать HTTP API очень просто и для этого предусмотрены функции API

    Функции отправки запросов:

    • wp_remote_get( $url, $args ) – отправляет HTTP GET запрос
    • wp_remote_post( $url, $args ) – отправляет HTTP POST запрос
    • wp_remote_head( $url, $args ) – отправляет HTTP HEAD запрос
    • wp_get_http_headers( $url ) — получает только HTTP заголовки указанного URL
    • wp_remote_request( $url, $args ) – отправляет запрос любого типа: GET, POST, HEAD, PUT, DELETE
    • wp_safe_remote_request( $url, $args ) — то же что и wp_remote_request(), только $url очищается от опасных символов для предотвращения хакерских атак, требуется при HTTP запросах на заранее неизвестные URL, например, когда URL передается динамически
    • для «safe» предусмотрены функции «обёртки»
      wp_safe_remote_get( $url, $args )
      wp_safe_remote_post( $url, $args )
      wp_safe_remote_head( $url, $args )

    Функции получения результатов запроса:

    • wp_remote_retrieve_body( $response ) — получает только тело (body) ответа
    • wp_remote_retrieve_headers( $response ) — получает весь массив заголовков ответа
    • wp_remote_retrieve_header( $response, $header ) — получает отдельный заголовок, где $header — имя заголовка
    • wp_remote_retrieve_response_code( $response ) — получает HTTP код ответа (статуса ответа), такой код должен быть 200, если все в порядке, в случае ошибки статус будет 4xx или 3xx при редиректах, полный список статусов в описании status_header()
    • wp_remote_retrieve_response_message( $response ) — получает сообщение ответа соответствующее коду ответа (статусу ответа), например при статусе «200», сообщение будет «OK»
    • wp_remote_retrieve_cookies( $response ) — получает все куки ответа
    • wp_remote_retrieve_cookie( $response, $name ) — получает все данные указанной куки, где $name — это название куки
    • wp_remote_retrieve_cookie_value( $response, $name ) — получает значение указанной куки, где $name — это название куки

    Теперь, когда мы знаем все функции запросов давайте попробуем создать простой запрос

    $response = wp_remote_get(‘http://httpbin.org/get?a=b&c=d‘);

    Тут, мы отправили запрос на http://httpbin.org/get и добавили два параметра запроса ?a=b&c=d. В результате, $response будет содержать следующий массив

    результат содержит ключи, каждый ключ — это часть ответа сервера, где

    • headers — содержит заголовки HTTP ответа сервера
    • body — тело ответа, если мы запрашиваем html страницу, то тут будет HTML код, если возвращаются JSON данные, то тут будет JSON строка и т.д
    • response — содержит статус код HTTP ответа. Например 200 — OK
    • cookies — содержит куки, которые просит установить сервер в ответе на запрос
    • filename — содержит расположение или путь файла который был отправлен на сервер и был там размещен. Файл можно отправить POST запросом

    http_response с версии WP 4.6 содержит весь объект результата запроса библиотеки Requests

    Для получения каждой части ответа рекомендуется использовать специальные функции указанные выше. Давайте получим нужные нам заголовки ответа правильно:
    $response = wp_remote_get(‘http://httpbin.org/get?a=b&c=d’);
    echo wp_remote_retrieve_header($response, ‘server’); //> nginx
    echo wp_remote_retrieve_header($response, ‘content-type’); //> application/json
    echo wp_remote_retrieve_header($response, ‘content-length’); //> 316

    Передача параметров запроса в GET и POST

    Для POST запроса параметры передаются в настройке body

    Для GET запроса аргументы передаются в самом URL

    Перед отправкой запроса, можно изменить дефолтные настройки запроса. Например, установить timeout (максимальное время) соединения или указать user agent.
    Полный список параметров (настроек) смотрите в описании wp_remote_request().

    Этот пример демонстрирует, как передавать такие настройки. А этот пример показывает как передать в запрос дополнительный заголовок и получить тело (текст) ответа

    Получение заголовков ответа

    Ответ на такой запрос мы получим быстрее, чем при «полном запросе». Поэтому, если вам не нужно тело ответа, то пользуйтесь таким запросом

    Используя функцию wp_get_http_headers(), мы также можем не создавать полный запрос, а запросить и сразу получить только заголовки (способ №2):

    Получение кода ответа

    $response = wp_remote_get(‘http://httpbin.org/get?a=b&c=d’);
    echo wp_remote_retrieve_response_code( $response ); //> 200
    echo wp_remote_retrieve_response_message( $response ); //> OK

    Произвольный тип запроса

    Кроме GET и POST типов запросов, мы можем отправлять любой другой, например, PUT или DELETE.
    Для этого используем функцию wp_remote_request(), которая лежит в основе всех функций запросов:

    $url = ‘http://httpbin.org’;
    $args = array(
    ‘method’ => ‘PUT’,
    //’method’ => ‘DELETE’
    );
    $response = wp_remote_request( $url, $args );

    Теперь, когда мы знаем все функции запросов я предлагаю сделать класс includes\common\StepByStepRequestApi для работы с Travelpayouts API.

    Теперь вызовем метод getCalendarPricesMonth класса includes\common\StepByStepRequestApi в методе render класса includes\controllers\admin\menu\StepByStepMainAdminMenuController

    $reuestAPI = StepByStepRequestApi::getInstance();
    var_dump($reuestAPI->getCalendarPricesMonth(‘RUB’, ‘MOW’, ‘LED’));

    Использование на примере плагина

    Shortcode API. Что такое Shortcode?

     Разработчикам плагинов шорткоды позволяют создавать специальные виды контента (например формы, генераторы контента) которые пользователи могут прикрепить к определённым страницам добавив соответствующий короткий код в тексте страницы, например [«gallery] (без кавычки).

     Shortcode API упрощает создание коротких кодов которые поддерживают атрибуты вроде этих:
    [«gallery id=»123″ size=»medium»]  
    (без первой кавычки).

    Функции Shortcode API

    add_shortcode()

    Добавляет новый шорткод и хук для него

    do_shortcode()

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

    gallery_shortcode()

    Функция, которая заменяет шорткод [«gallery] в тексте статьи. Эта функция отвечает за отображение WordPress галерей в записи

    get_shortcode_regex()

    Возвращает регулярное выражение которое используется для поиска шорткодов в тексте

    has_shortcode()

    Проверяет есть ли в переданном тексте указанный шоткод

    remove_all_shortcodes()

    Удаляет все зарегистрированные шоткоды

    remove_shortcode()

    Удаляет функцию-обработчик указанного шоткода

    shortcode_atts()

    Объединяет атрибуты (параметры) шорткода с известными атрибутами, остаются только известные атрибуты. Устанавливает значения атрибута по умолчанию, если он не указан

    shortcode_exists()

    Проверяет зарегистрирован ли указанный шорткод

    trip_shortcodes()

    Удаляет/вырезает все шорткоды из переданного текста (контента)

    wp_audio_shortcode()

    Создает HTML код аудио плеера по указанной ссылке на аудио файл и параметрам вывода плеера

    wp_playlist_shortcode()

    Получает HTML код плейлиста из аудио или видео файлов, для вывода в записи. Можно указать параметры вывода

    wp_video_shortcode()

    Выводит HTML код видео по переданной ссылке на видео и другим параметрам

    Для каждого шорткода может быть предусмотрена только одна функция обработчик

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

    Результат, который возвращает функция (обработчик шоткода) всегда должен возвращаться, а не выводиться на экран.

    Шоткоды — это конструкция вида: [somename] или [somename id=»123″ size=»medium»] или [somename]текст[/somename] в тексте, которые будут заменены другим текстом созданным функцией-хуком отвечающим за шоткод.

    Пример регистрации шорткода [footag foo=»bar»]:

    function footag_func( $atts ) {
    return «foo = {$atts[‘foo’]}»;
    }
    add_shortcode(‘footag’, ‘footag_func’);
    // результат:
    // шоткод в тексте будет заменен на «foo = bar»

    Удобная запись атрибута: $foo, а не $atts[‘foo’]:
    function bartag_func( $atts ) {
    $atts = shortcode_atts( array(
     ‘foo’ => ‘no foo’,
     ‘baz’ => ‘default baz’
    ), $atts );
    return «foo = {$atts[‘foo’]}»;
    }
    add_shortcode( ‘bartag’, ‘bartag_func’ );

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

    [baztag]здесь текст[/baztag]

    function baztag_func( $atts, $content = » ) {
    return «content = $content»;
    }
    add_shortcode( ‘baztag’, ‘baztag_func’ );

    Если ваш плагин написан классом
    class MyPlugin {
    function baztag_func( $atts, $content=»» ) {
    return «content = $content»;
    }
    }
    add_shortcode( ‘baztag’, array( ‘MyPlugin’, ‘baztag_func’ ) );

    Этот пример показывает как создать шорткод, чтобы потом через него вставлять iframe
    function Generate_iframe( $atts ) {
    $atts = shortcode_atts( array(
    ‘href’   => ‘http://site.ru’,
    ‘height’ => ‘550px’,
    ‘width’  => ‘600px’,     
    ), $atts );

    return ‘<iframe src=»‘. $atts[‘href’] .'» width=»‘. $atts[‘width’] .'» height=»‘. $atts[‘height’] .'»> <p>Your Browser does not support Iframes.</p></iframe>’;
    }
    add_shortcode(‘iframe’, ‘Generate_iframe’);
    // использование: [iframe href=»http://www.exmaple.com» height=»480″ width=»640″]

    Теперь, когда мы знаем все функции для работы с Shortcode я предлагаю сделать базовый абстрактный класс includes\controllers\site\shortcodes\StepByStepShortcodesController для добавление шорткодов от этого класса мы будем наследоваться 

    namespace includes\controllers\site\shortcodes

    Теперь мы можем сделать шорткод для метода API “Календарь цен на месяц”. Создадим для этого класс includes\controllers\site\shortcodes\StepByStepCalendarPricesMonthShortcodeController. Этот класс будет наследовать базовый класс StepByStepShortcodesController 

    Теперь вызовем этот класс в классе includes\common\StepByStepLoader в методе site

    public function site(){
           StepByStepCalendarPricesMonthShortcodeController::newInstance();
    }

    Пример вставки шорткода

    Результат:

    Transients API. Что такое Transients API?

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

    Теоретически можно обойтись без кэширования, если у вас на странице всего один HTTP запрос и сервер обрабатывающий этот запрос позволяет отправлять ему неограниченное количество запросов. Но, как правило, если вы используете какой-либо API на сервере, где обрабатываются запросы, там стоит ограничение на количество запросов в промежуток времени — «пропускная способность» API. И в какой-то момент, удаленный сервер просто не ответит на ваш запрос, а вы не получите нужных данных.

    На основе этого можно сделать правильный вывод — кэшировать HTTP запросы нужно всегда и сделать это не сложно

    Функции Transients API

    delete_transient()

    Удаляет временную опцию

    get_transient()

    Получает значение временной опции 

    set_transient()

    Устанавливает или обновляет временную опцию

    set_site_transient()
    get_site_transient()

    delete_site_transient()

    Кэширование во временные опции (Transients)

    • set_transient( $transient, $value, $expiration ) — устанавливает/обновляет временную опцию.
    • get_transient( $transient ) — получает значение временной опции.
    • delete_transient( $transient ) — удаляет временную опцию.

    $transient(строка) (обязательный)

    Название временной опции. Максимальная длина 172 знака. Ожидаются данные с экранированными слэшами, очистка слэшей делается автоматически перед записью в БД. Функция автоматически защищает от SQL инъекций.

    $value(смешанный) (обязательный)

    Значение временной опции. Ожидаются данные с экранированными слэшами, очистка слэшей делается автоматически перед записью в БД. Функция защищает от SQL инъекций. Сериализация, если передается массив, также делается автоматически.

    $expiration(строка/массив/число/объект/логический)

    Время жизни опции в секундах, начиная с настоящего момента. Например, чтобы записать опцию на один день, нужно указать 60 * 60 * 24.
    Если указать 0 — опция никогда не удалиться и не будет иметь срока давности. Получается это будет обычная опция, только с префиксом _transient_ в её названии — это будет означать, что она временная и при чистке таблицы wp_options её можно будет смело удалять, без риска, что-то испортить.
    По умолчанию: 0

    Важный момент про временные опции (transients). Они умеют работать с объектным кэшированием. Т.е. они записываются на время в базу данных wp_options. Но если на сайте установлен модуль (плагин) объектного кэширования, то они не записываются в БД, а сохраняются в файлы объектного кэша.

    Создадим класс includes\models\site\StepByStepCalendarPricesMonthShortcodeModel модель для шорткода “Примеры кэширования HTTP запроса во временную опцию” который будет отвечать за запрос данных от сервера и кэшировать во временную опцию https://codeshare.io/2K89xY

    Теперь нужно переделать класс StepByStepCalendarPricesMonthShortcodeController контроллер шорткода под модель https://codeshare.io/a3ABW6

    Categories : Word Press, www

    • « Previous Post
    • Next Post »

    Discussions

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

      — добавил шорткод на фронте и в бэкэнде с помощью специального хука add_shortcode в основном файле плагина wp-home-work/hwwp-cont/plugins/wp-my-homework/wp-my-homework.php
      — в контроллерах сабменю админки добавил подключение API Интеркасса

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