Разбираем моменты создания плагина 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]