Разбираем моменты создания плагина WordPress.
Создание плагина, основы
В директории wp-content/plugins/ создаем папку с названием плагина.
В ней создаем файл .php с названием плагина (не обязательно). В начале файла помещаем информацию:
<?php /* Plugin Name: Site slider Description: Плагин создает слайдер. Version: 1.0 Author: Opttour Author URI: https://opttour.ru/ Plugin URI: */
if ( ! defined( ‘ABSPATH’ ) ) { exit; }
Это защитит файл от прямого доступа через URL
Далее подключаем скрипты и стили. Можно создавать для этого отдельные папки, можно прямо в корень.
function addsiteslider() {
wp_enqueue_script( 'siteslider-scripts', plugins_url('/site-slider.js', __FILE__), array('jquery'), null, true );
wp_enqueue_style( 'siteslider-style', plugins_url('/site-slider.css', __FILE__) );
}
add_action( 'wp_footer', 'addsiteslider' );
Далее помещаем функции относящиеся к данному плагину.
Если при подключении скрипта, указать порядковый номер, то можно контролировать приоритет вывода
add_action( 'wp_footer', 'addsitegreeting', 5 );
Можно создать файлы включения и в них делать подробный функционал, либо разбивать их по назначению
require __DIR__ . '/functions.php';
Ссылка на изображения плагина
<img src="<?php echo plugins_url( 'images/x-image-wt.gif', __FILE__ ); ?>" alt="close">
Другие функции вывода относительных путей WordPress:
| home_url | Home URL | http://www.example.com |
| site_url | Site directory URL | http://www.example.com or http://www.example.com/wordpress |
| admin_url | Admin directory URL | http://www.example.com/wp-admin |
| includes_url | Includes directory URL | http://www.example.com/wp-includes |
| content_url | Content directory URL | http://www.example.com/wp-content |
| plugins_url | Plugins directory URL | http://www.example.com/wp-content/plugins |
| theme_url | Themes directory URL | http://www.example.com/wp-content/themes |
| wp_upload_dir() | Upload directory URL (returns an array) | http://www.example.com/wp-content/uploads |
Включить шаблон из плагина
Если мы создаем плагин таксономии (например) и хотим чтобы у этой таксономии был специфический шаблон. Нужно поместить шаблон (taxonomy-label.php) в плагин и инициализировать его
function labeltaxonomies_template($template){
if ( is_tax('label') ) {
$template = plugin_dir_path( __FILE__ ) . '/taxonomy-label.php';
}
return $template;
}
add_filter('template_include','labeltaxonomies_template');
Условия внутри плагина
Условия типа if( !is_front_page() || !is_home() ) внутри плагина работать не будут, т.к. в момент подключения плагина еще не сформирован объект $wp_query и данные проверки будут выдавать wp_debug.
Чтобы проверки начали работать нужно добавить следующий код
function addsitehovergallery() {
$d = is_home();
if( !is_home() ) {
wp_enqueue_script( 'hovergallery', plugins_url('/site-hovergallery.js', __FILE__), array('jquery'), null, true );
wp_enqueue_style( 'hovergallery', plugins_url('/site-hovergallery.css', __FILE__) );
}
}
add_action( 'wp_footer', 'addsitehovergallery' );
Бывает так, что не отключаются плагин при данном условии. Это происходит из-за того что основной запрос изменен таки образом что он уже не подпадает ни под is_home ни под is_front_page. Чтобы этого не случалось после изменения запроса нужно не забывать вставлять wp_reset_query();
А чтобы выявить это, нужно в шапке и подвале поставить проверки и посмотреть сохранилась ли определение основного запроса:
<?php if( is_home() ) { echo 'HOME';} ?>
<?php if( is_front_page() ) { echo 'FRONT PAGE';} ?>
[site-socialshare]

