Вам не кажется, что некоторые WordPress плагины повезло? WooCommerce, Легко Digit Скачать, Гравитация формы : каждый из этих плагинов поддерживается целой компанией с десятками сторонних расширений и все больше и больше функций, добавленных ими, которые увеличивают потенциал плагина. В это время большинство других плагинов не работают.

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

Сегодня мы будем использовать пример Плагин Wordpress чтобы охватить две ключевые функции, которые придают плагину статус расширяемости, а именно: apply_filters() и do_action().

Расширения: Расширения для плагинов

Поэтому ясно, что когда мы говорим о «расширениях», мы имеем в виду плагины, созданные для других. Возьмем пример: " Полоса для WooCommerce .

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

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

Как работают функции apply_filters () и do_action ()?

Следующий вопрос: как WooCommerce видит свою расширенную функциональность? В конце концов, легко представить себе плагин электронной коммерции, который « работает только с несколькими платежными системами ». Затем, если вы действительно хотите Stripe, вам придется полностью изменить WooCommerce и, возможно, в конечном итоге создать свой собственный инструмент под названием StripeCommerce, который либо станет конкурентом WooCommerce, либо просто живет на сайте одного из ваших клиентов, которые могут позволить себе платить персональная помощь.

Это беспорядок, но, к счастью, WooCommerce делает что-то намного лучше. Он использует две функции: apply_filters () и do_action (). Эти две функции позволяют создавать скобки в WordPress, и это является основной частью системы WordPress Hooks в целом.

apply_filters () и do_action () Довольно простая разница:

  • apply_filters () позволяет вам подключать фильтры к функциям.
  • do_action () позволяет вам связывать действия с функциями.

Давайте посмотрим на пример, чтобы увидеть, как они работают.

Пример использования хуков WooPress.

В нашем примере мы будем использовать плагин «Цитата дня» плюс расширение, которое изменяет этот плагин определенным образом. Чтобы следовать и увидеть полный код, загрузите плагины в виде ZIP-файла https://wpshout.com/media/2016/10/plugins.zip.

Оригинальный плагин

Этот плагин использует API, предоставляемый внешней библиотекой цитат, и сохраняет полученную цитату как временные данные WordPress, которые обновляются каждые 24 часа. Вернитесь к этой статье в любое время, и вы увидите случайную цитату из этого дня на тему «жизни», которая должна быть достаточно широкой.

расширение плагина

Как мы знаем, проблема большинства цитат в том, что они не произнесены «Карлом Саганом». Наше расширение исправляет эту проблему с помощью ряда инструментов:

  • Большой бланк с сегодняшней датой и цитатой Карла Сагана,
  • Некоторые конкретные замены слов, чтобы превратить цитату в слова Карла Сагана.
  • Авторы оригинальных цитат изменены, и цитаты теперь правильно приписываются Карлу Сагану.

Вот плагин и расширение в действии:

Цитирование в действии

Le код

Чтобы это произошло, необходимо выполнить два шага:

Исходный плагин определяет перехватчики - перехватчики действий и перехватчики фильтров - позволяющие внешнему коду изменять или добавлять свой собственный код в ключевых точках. Плагин для этого использует apply_filters () и do_action ().

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

Код ключа в оригинальном плагине

Самая важная часть кода для нас - это то, что мы делаем после того, как получаем данные из API. Эти данные доступны в виде массива с двумя элементами: текст: текст цитаты; и автор: человек, сказавший цитату. Поэтому наш код будет выглядеть так:

add_shortcode ('extension_plugin_demo', 'bpc_output_extensible_plugin'); функция bpc_output_extensible_plugin () {ob_start (); // Перехватываем перед отображением! do_action ('bpc_before_get_qod_text'); $ qod_data = bpc_get_qod_data (); if (is_array ($ qod_data)) {эхо ' '; $ qod_text = $ qod_data ['текст']; $ qod_author = $ qod_data ['автор']; // Фильтруем контент! $ qod_text = apply_filters ('bpc_qod_text', $ qod_text); $ qod_author = apply_filters ('bpc_qod_author', $ qod_author); echo $ qod_text; эхо ' '; echo $ qod_author; эхо ' '; } // Перехватчик действия после остатка вывода! do_action ('bpc_after_get_qod_text'); вернуть ob_get_clean (); }

Код ключа в расширении

Плагин не содержит ничего, кроме действий и фильтров для изменения исходного плагина. Вот код расширения:

add_filter( 'bpc_qod_text', 'bpc_filter_qod_text' );
// Filter: remplacer des mots spécifique
function bpc_filter_qod_text( $text ) {
    $text = str_replace( 
        array( ' I ', ' me ', ' the ', ' is ', ' am ', ' are ' ),
        array( ' I, a descendent of savannah-dwelling hominids that somehow evolved an astounding capacity for self-reflection, ', ' the cooled-off stellar matter I call "me" ', ' the trillions of atoms that make up the ', ' seems, without the mind-boggling perspective of quantum physics, to be ', ' cannot, due to the Heisenberg Uncertainty Principle, be determined not to be ', ' appear to our best scientific instruments to be ' ),
        $text
    );
    return $text;
}

// Filter: barré le texte qui précède le nom de l'auteur et ajouter Carl Sagan à la suite
add_filter( 'bpc_qod_author', 'wpshout_filter_qod_author' );
function wpshout_filter_qod_author( $text ) {
    $text = '<strike>' . $text . '</strike> Carl Sagan';
    return $text;
}

// Action: Ajouter un titre
add_action( 'bpc_before_get_qod_text', 'bpc_set_up_quote' );
function wpshout_set_up_quote() {
    echo '<h4>Carl Sagan Quote of the Day for ' . date( 'F j, Y') . ':</h4>';
}

// Action: Ajouter une image
add_action( 'bpc_after_get_qod_text', 'bpc_add_carl_boom' );
function bpc_add_carl_boom() {

    echo '<div><img class="aligncenter" src="' . plugin_dir_url( __FILE__ ) . 'carl_sagan_mind_blown.gif"></div>';
}

Как видите, это довольно стандартное использование add_action () "И" add_filter () И обе функции привязаны к квадратным скобкам, которые мы назвали «bpc_qod_text».

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

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

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