Поиск по сайту:
Кто повторяет старое и узнает новое, тот может быть предводителем (Конфуций).

5 способов сделать ваш плагин в WordPress действительно расширяемым

07.05.2017
5 способов сделать ваш WordPress плагин действительно расширяемым

Создание плагина в 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;
}

 

Читать  Миграция с MariaDB на MySQL в CentOS

Переменная $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, но только первый из них будут возвращен в качестве значения.

Читать  Учебник по использованию AJAX в WordPress

Другие параметры передаются только для других функций, чтобы использовать их так, чтобы они могли расширить их. Давайте посмотрим пример из плагина 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. Шорткоды

Шорткоды? Я знаю, он чувствует, что не принадлежит здесь. Но шорткоды дают нам отличный способ отображения данных постов, страниц и т.д. Это также делает другие пользователи не технологий, способных показать много сложных данных в своих страницах.

Читать  Как установить и настроить W3 Total Cache

В общем, шорткоды уже расширяемые с их атрибутами. Вы можете добавить столько атрибутов, сколько вы хотите, чтобы шорткод отображал различные данные. Атрибуты предопределены внутри кода, но это не делает плагин расширяемым.

Но, знаете ли вы, что вы можете сделать эти атрибуты довольно расширяемым с помощью простого изменения в коде?

<?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, так что вы легко можете сделать свой собственный плагин расширяемым или просто продлить другой.

Вы пробовали сделать свой плагин расширяемым? Или же вы просто создаете возможности за счет расширения других плагинов?

 

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (Пока оценок нет)
Загрузка...
Поделиться в соц. сетях:


0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

**ссылки nofollow

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии

Это может быть вам интересно


Рекомендуемое
Это очень быстрый учебник о некоторых полезных запросах WordPress MySQL.…

Спасибо!

Теперь редакторы в курсе.