Создание плагина в WordPress может быть очень весело, но вы можете создать плагин, который другие разработчики не смогут расширить. Если будут клиенты, которые нуждаются в что – то немного другом, что вы сделали. Создание расширяемых плагинов, чтобы другие разработчики могли добавлять свои собственные функции. В этой статье мы будем идти через пять способов, которые можно использовать сегодня, чтобы сделать свой плагин расширяемым.
1. Использование функций поддержки темы
Что такое функция поддержки тема? При создании темы, вы должны определить, что ваша тема поддерживает функцию. Эта функция может быть признаками изображения. Добавление поддержки темы осуществляется в теме и вы можете прочитать больше об функции add_theme_support можно
здесь.
Но как использовать это в плагине?
Вы хотели бы проект, где вы просто можете удалить некоторые стили из плагина? И по какой-то причине, что не было возможно, не так ли? Ну, вы можете сделать это возможным в пределах вашего плагина!
Мы можем сделать уникальным наш стиль, только если текущая тема не поддерживает наши стили плагинов. Если тема была сделана с плагином и имеет необходимые стили, тема может иметь что-то подобное в своем коде:
<?php add_theme_support( 'my-plugin-style' );
Но от этого не будет никакой пользы, если мы не включили такую поддержку в нашем собственном плагине. Таким образом, для того, чтобы это нам нужно сделать наши стили уникальными, вроде этого:
<?php add_action( 'wp_enqueue_scripts', 'your_plugin_scripts' ); function your_plugin_scripts() { // Если текущая тема поддерживает его, не установит его if( !current_theme_supports( 'my-plugin-style' ) ) { wp_enqueue_style( 'my-plugin-css', plugins_url( 'assets/plugin.css', __FILE__ ) ); } }
Функция current_theme_supports
будет возвращать true
если текущая тема определила поддержку с помощью функции add_theme_support
. Если тема не поддерживает стиль нашего плагина, мы поставим в очередь по умолчанию стиль плагина.
2. Переопределяемые шаблоны
Шаблоны представляют собой способ добавления своего собственного макета для разделов плагина. Чтобы сделать плагин более расширяемым, вы можете сделать возможным перезаписать свои шаблоны. Это можно сделать с помощью фильтра template_include
.
<?php add_filter( 'template_include', 'my_plugin_templating' ); function my_plugin_templating( $template ) { $file = false; if( is_singular( 'my-cpt' ) ) { $file = 'single-my-cpt.php'; } if( is_page( $page_id_from_our_settings ) ) { $file = 'page-my-page.php'; } // Есть файл, создать новый путь к шаблону if( $file ) { // Check in Theme for folder my-plugin/templates/ and the file inside $template = locate_template( 'my-plugin/templates/' . $file ); //Нет шаблона в теме if( ! $template ) { // Добраться из папки плагина 'templates' $template = untrailingslashit( plugin_dir_path( __FILE__ ) ) . '/templates/' . $file; } } return $template; }
Переменная $file
фактически является переменной проверки. Если эта переменная не получает заполнять и выводиться false
, мы будем возвращать оригинал $template
. После этого мы проверяем, если мы на нашей собственной странице пользовательского типа поста или на странице, которая извлекается из настроек.
Вы должны создать свою собственную шаблонную систему и осуществить ее здесь. Эти два сценария только для того чтобы показать, как вы можете заполнить переменную $file
.
Если она заполнена, мы затем проверить шаблона в текущей теме. Так как мы добавили my-plugin/templates/
, эти папки должны быть в теме. В противном случае, этот поиск будет возвращать false
.
Если нет такого шаблона в текущей теме, мы строим путь к файлу в нашей папке плагина.
Вы должны проверить популярные плагины и узнать, как они делают это, чтобы получить представление об этом.
WooCommerce имеет свою собственную шаблонную систему, построенную в классе WC_Template_Loader
который вы можете найти в файле includes/class-wc-template-loader.php
. Если вы заинтересованы в изучении шаблонов, мы вам советуем посмотреть код в этом файле.
Еще один интересный подход можно найти в плагине SportsPress в своем классе SP_Template_Loader
, вы можете прочитать код в файле includes/class-sp-template-loader.php
.
3. Применить фильтры
Для того, чтобы ваш плагин был расширяемым, вы должны использовать API WordPress Plugin. Теперь мы узнаем о том, как использовать фильтр крючок и в следующем разделе, вы также увидите, как использовать действия.
Отличный пример того, почему фильтры полезны в собственном плагине, мы делали пример ранее. Если ядро WordPress не включает фильтр template_include
, мы не смогли бы изменить шаблон.
Когда мы привязываем наши функции с другими фильтрами, мы не делаем наш плагин расширяемым. Мы просто расширяем другой плагин, тему или основную функцию.
Наш плагин будет расширяемым, если применить фильтры на собственных значениях. Мы можем сделать это с помощью функции apply_filters
. Вы можете узнать больше об этом на ресурсе разработчиков WordPress. Вы можете пройти столько параметров, сколько вы хотите apply_filters, но только первый из них будут возвращен в качестве значения.
Другие параметры передаются только для других функций, чтобы использовать их так, чтобы они могли расширить их. Давайте посмотрим пример из плагина Easy Digital Downloads. Этот плагин использует функцию apply_filters
для фильтрации цены для товара в корзине.
<?php // класс EDD_Cart // способ get_item_price return apply_filters( 'edd_cart_item_price', $price, $download_id, $options ); // Передается только вернув параметр add_filter( 'edd_cart_item_price', 'change_item_price' ); function change_item_price( $price ) { // Сделать что-то с ценой // Всегда возвращаются! return $price; } // 2 параметра add_filter( 'edd_cart_item_price', 'change_item_price', 20, 2 ); function change_item_price( $price, $download_id ) {} // 3 параметра add_filter( 'edd_cart_item_price', 'change_item_price', 20, 3 ); function change_item_price( $price, $download_id, $options ) {}
Другие функции не от EDD, но только для целей презентации. Как функции будут подключены не ваша забота, ваша забота, это просто сделать это возможным.
4. Выполнение действия
Действия похожи на фильтры при создании расширяемых плагинов. Они не имеют функции, такие как apply_filters
так как они не должны ничего фильтровать и возвращать данные.
Они используются для создания событий до или после того когда что – то случится. Для этого вы будете использовать функцию do_action
. Чтобы узнать больше об этой функции, проверьте ресурс для разработчиков WordPress.
Таким образом, вы передаете имя действия и это все. Если вы хотите, чтобы другие функции получали больше данных, вы можете передать некоторые параметры.
Я буду использовать Easy Digital Downloads снова для этого примера. Мы увидим, как этот плагин настроит действие после того, как покупка была завершена.
<?php // функция edd_complete_purchase do_action( 'edd_complete_purchase', $payment_id );
После того, как покупка будет завершена, вы можете подключить в вашей собственной функции и делать все, что вы хотите. У вас есть $payment_id
, так что вы можете получить информацию об оплате, подключиться к API третьей партии и собирать данные или все, что нужно.
5. Шорткоды
Шорткоды? Я знаю, он чувствует, что не принадлежит здесь. Но шорткоды дают нам отличный способ отображения данных постов, страниц и т.д. Это также делает другие пользователи не технологий, способных показать много сложных данных в своих страницах.
В общем, шорткоды уже расширяемые с их атрибутами. Вы можете добавить столько атрибутов, сколько вы хотите, чтобы шорткод отображал различные данные. Атрибуты предопределены внутри кода, но это не делает плагин расширяемым.
Но, знаете ли вы, что вы можете сделать эти атрибуты довольно расширяемым с помощью простого изменения в коде?
<?php function my_plugin_shortcode( $atts ) { $atts = shortcode_atts( array( 'foo' => 'no foo', 'bar' => 'default bar', ), $atts, 'my_plugin_shortcode' ); // Третий параметр делает Расширяемый плагин return $output; } add_shortcode( 'my_plugin', 'my_plugin_shortcode' ); // Расширение apply_filter( 'shortcode_atts_my_plugin_shortcode', 'extending_shortcode_atts' ); function extending_shortcode_atts( $atts ) { $atts['foo'] = 'Yes Foo'; return $atts; }
Просто добавив третий параметр, WordPress будет вызывать фильтр , shortcode_atts_{$shortcode}
где {$shortcode}
заменяется третьим параметром.
Вы также можете добавить фильтр крюк перед возвращением шорткода. Таким образом, если есть необходимость, разработчик может изменить вывод вашего шорткода. Действие и крючки могут быть также полезны. С действиями, другие разработчики могут добавлять свои собственные части контента.
<?php function my_plugin_shortcode( $atts ) { $atts = shortcode_atts( array( 'foo' => 'no foo', 'bar' => 'default bar', ), $atts, 'my_plugin_shortcode' ); // Третий параметр делает Расширяемый плагин $output = ''; ob_start(); ?> <strong>My Awesome Shortcode</strong> <?php do_action( 'my_plugin_shortcode_after_title', $atts ); // Добавление крюка действий и атрибутами ?> <p>Some content</p> <?php do_action( 'my_plugin_shortcode_end', $atts ); $output = ob_get_clean(); // Enable Filtering return apply_filters( 'my_plugin_shortcode', $output, $atts ); } add_shortcode( 'my_plugin', 'my_plugin_shortcode' );
Вывод
Если вы пишете свой собственный плагин, то используйте некоторые из этих подходов, чтобы сделать плагин расширяемым. Не обманывайтесь, что вы никогда не будете нуждаться в этих вещах. Вы действительно могли бы и вы не можете знать, когда это произойдет.
WordPress является действительно мощным и он построен вокруг Plugin API, так что вы легко можете сделать свой собственный плагин расширяемым или просто продлить другой.
Вы пробовали сделать свой плагин расширяемым? Или же вы просто создаете возможности за счет расширения других плагинов?