Создать плагин для WordPress не так сложно, особенно если вы знаете, что делаете. Иногда это может быть сложно, хотя при работе с несколькими сценариями, стилями и новыми функциями, которые иногда требуют некоторого воображения.
В этом уроке мы рассмотрим способ создания простого плагина таймера обратного отсчета. Мы рассмотрим его интеграцию в установку WordPress в виде виджета и шорткода в контенте, используя настройки из мета-окна внутри редактора администратора WordPress.
Предварительный просмотр конечного результата этого урока выглядит следующим образом:
Виджет и шорткод контента:

Интерфейс администратора виджета и Meta-Box:
Краткий пример скриншота того, как будет выглядеть администратор и мета-поле виджета в интерфейсе редактирования страницы / поста в конце урока:


Шаг 1 Заголовок файла плагина
Каждый плагин WordPress имеет совместимый, обновленный код в своих заголовках, так что он может функционировать и распознаваться WordPress. Это позволяет его устанавливать, активировать и удалять. Тип информации, которая доступна в информации заголовка, имеет решающее значение для плагина, но также содержит информацию о нем, такую как заголовок, версия, описание, теги, информация об авторе, лицензия и т. Д.
Во-первых, плагин представляет собой файл, помещенный в каталог. Мы назовем наш плагин Timer Plugin и поместим его в нашу папку wp-content / plugins в каталоге timer_plugin . Тогда внутри этого файла timer_plugin.php будет наш основной файл плагина, в который мы вставляем исходный код заголовка.
|
1
2
3
4
5
6
7
|
<?php
/*
Plugin Name: Timer Plugin
Description: A timer plugin tutorial
Author: Ciprian Turcu
Version: 1.0
*/
|
Мы просто собираемся использовать основные переменные, необходимые для запуска и запуска плагина. Одной из переменных является Имя плагина, которое очень важно для идентификации плагина на странице установки плагина. Для целей этого урока мы просто назовем его Timer Plugin . Далее описание представляет собой короткую строку текста, описывающую плагин. Это также будет видно на странице установки плагина рядом с плагином, наряду со следующими переменными, Автор и Версия .
«Все переменные плагина заголовка — это строки текста, написанные после: перед именами переменных заголовка».
Шаг 2 Добавление действий
В WordPress действия — это привязки к конкретным функциям, которые вы можете использовать в своих функциях. В этом уроке мы будем использовать несколько хуков, чтобы получить желаемый результат.
Во-первых, действия будут добавляться с использованием функции add_action для каждого действия, и мы собираемся добавить их в конец файла PHP, как в следующем примере:
|
1
2
3
4
5
|
add_action(‘widgets_init’, ‘TP_widgets_init’);
add_action(‘admin_print_scripts’, ‘TP_admin_register_scripts’);
add_action(‘admin_print_styles’, ‘TP_admin_register_styles’);
add_action(‘wp_print_scripts’, ‘TP_register_scripts’);
add_action(‘wp_print_styles’, ‘TP_register_styles’);
|
Затем в приведенном выше примере wp_print_scripts и wp_print_styles добавляют действия к функциям, которые используются для регистрации, и включают стили и сценарии, необходимые в интерфейсе WordPress. Точнее в теме сайта, для функциональности таймера виджета боковой панели и шорткода контента. admin_print_scripts и admin_print_styles используются для регистрации сценария панели администратора WordPress и файлов стилей CSS, которые будут использованы в дальнейшем в руководстве.
|
1
2
|
add_action(‘admin_init’, ‘TP_admin_init’);
add_action(‘save_post’, ‘TP_save_postdata’);
|
Наконец, ловушка admin_init, указывающая на функцию, которая выполняется до того, как заголовки сгенерированы и запущены Хук, который мы рассмотрим в конце урока, это save_post . Этот хук необходим для работы с отправленной информацией поста или страницы в админке WordPress.
«Для более подробной информации о том, как использовать функцию
add_actionсмотритеAdd_Actionв Кодексе WordPress ».
Шаг 3 Регистрация и включение скриптов и стилей
Для этого урока нам понадобится несколько файлов скриптов и стилей, которые необходимы для хорошей функциональности, и мы рассмотрим реализацию админа и темы для плагина Timer. Вот как мы собираемся сделать это:
Включая стили для функциональности администратора WordPress:
Плагину Timer требуется несколько элементов в панели администратора, которые нам нужно будет немного стилизовать, так как внешний вид по умолчанию не совсем радует. Для этого на шаге 3 мы вызвали хуки тегов, которые нам в этом помогают, теперь мы рассмотрим функции, которые запускаются при вызове хуков, и как они работают точно.
Во-первых, функция TP_admin_register_styles для зарегистрированных и включенных стилей панели администратора.
|
1
2
3
|
function TP_admin_register_styles() {
}
|
Загрузка стилей
Поскольку мы создаем плагин таймера обратного отсчета, нам требуется определенная дата и время для обратного отсчета с настоящего момента. Для этого, помимо других интеграций, мы используем функцию wp_register_style чтобы зарегистрировать последний пользовательский стиль пользовательского интерфейса jQuery, чтобы мы могли использовать его дизайн должным образом в его функциональности при создании ползунков и выбора даты в календаре позже. Файл CSS генерируется путем загрузки последней версии пользовательского интерфейса jQuery с http://jqueryui.com/download с выбором Core, Widget, Mouse, Slider, DatePicker из списка параметров, jQuery Ui 1.8.20 в разделе версий и UI Lightness. в раскрывающемся разделе темы.
Регистрация стилей
Там будет файл CSS с именем jquery-ui-1.8.20.custom.css и папка с изображениями внутри папки css / jquery-ui в пользовательском сгенерированном и загруженном архиве, который вы получите из предыдущих инструкций. Мы заменим имя файла jquery-ui-1.8.20.custom.css на jquery-ui.css для более дружественного имени и скопируем его вместе с папкой images со всеми файлами в нашей папке плагинов.
После этого мы можем начать добавлять функции регистрации и включения в функцию TP_admin_register_styles упомянутую ранее.
|
1
2
3
|
// register
wp_register_style(‘jquery-ui-theme’, plugins_url(‘jquery-ui.css’, __FILE__));
wp_register_style(‘tp-admin-style’, plugins_url(‘admin-style.css’, __FILE__));
|
Предыдущий пример использует wp_register_style для регистрации файла jquery-ui.css по имени jquery-ui-theme, который позже используется в функции wp_register_style в следующем примере. Тот же подход используется для включения основного файла admin style.css, используя на этот раз имя tp-admin-style используемое в следующих примерах с функцией wp_enqueue_style чтобы правильно включить его в заголовки WordPress.
Включая стили
|
1
2
3
|
// enqueue
wp_enqueue_style(‘jquery-ui-theme’);
wp_enqueue_style(‘tp-admin-style’);
|
Стиль tp-admin используется для регистрации и включения файла style.css, который будет использоваться для стилизации дизайна виджета и мета-блока, который поставляется по умолчанию в реализации пользовательского интерфейса jQuery и в стиле WordPress по умолчанию.
Включая стили для функциональности темы:
Используя тот же подход, что и раньше, для регистрации и включения файлов стилей, мы собираемся включить в тему WordPress файлы стилей, необходимые для оформления таймера виджета и шорткода.
|
1
2
3
4
5
6
7
|
function TP_register_styles() {
// register
wp_register_style(‘tp-style’, plugins_url(‘style.css’, __FILE__));
// enqueue
wp_enqueue_style(‘tp-style’);
}
|
В этом случае мы включаем простой файл style.css из нашего каталога плагинов, который мы добавим позже.
Включая скрипты для функциональности администратора WordPress:
Поскольку мы собираемся создать виджет и мета-блок с функциональностью календаря jQuery UI и средства выбора даты и времени, нам понадобятся jQuery, jQuery UI и все плагины, необходимые для включения и использования ползунка и средства выбора даты, которые мы будем реализовывать. потом. Чтобы сделать это, мы должны использовать ранее написанное действие для admin_print_scripts . Следующая функция будет реализовывать необходимую нам функциональность.
|
1
2
3
4
5
6
7
8
9
|
function TP_admin_register_scripts() {
// register
wp_register_script(‘tp-admin-script’, plugins_url(‘admin-script.js’, __FILE__));
// enqueue
wp_enqueue_script(‘jquery-ui-core’);
wp_enqueue_script(‘jquery-ui-datepicker’);
wp_enqueue_script(‘jquery-ui-slider’);
wp_enqueue_script(‘tp-admin-script’);
}
|
Поскольку мы работаем внутри админ-панели WordPress, у нас уже есть jQuery и jQuery UI, которые уже зарегистрированы и включены в заголовок, а также необходимые нам зависимости и плагины: jquery-ui-mouse и jquery-ui-widget . Все, что мы сейчас включаем, это jquery-ui-core который не включен по умолчанию, и плагины datepicker и слайдера, которые нам нужны, и последний, файл admin-script.js, который содержит все пользовательские правила для нашего jquery- даты и времени. Пользовательский интерфейс.
Включая сценарии для функциональности темы:
Нам нужно иметь во внутреннем интерфейсе веб-сайта таймер, который уменьшается до 0 где-то на боковой панели в качестве виджета, а контент — в виде шорткода. В качестве очень простого способа сделать это я выбрал jQuery и простой JavaScript для работы таймера. В результате мы собираемся включить файл script.js в функцию, которая регистрирует сценарии для ранее объявленного внешнего обработчика.
|
1
2
3
4
5
6
7
|
function TP_register_scripts() {
// register
wp_register_script(‘tp-script’, plugins_url(‘script.js’, __FILE__), ‘jquery’);
// enqueue
wp_enqueue_script(‘tp-script’);
}
|
Мы также собираемся указать jQuery как зависимость, так как интерфейс не включает его по умолчанию.
Шаг 4 Создание виджета
Предполагается, что плагин использует виджет как один из двух методов для интеграции таймера в тему, в частности, боковую панель в этом случае. Чтобы иметь возможность добавить таймер на боковую панель, нам нужно реализовать функциональность виджетов для нашего плагина в WordPress.
Строим класс
Чтобы реализовать функциональность виджетов в плагине, мы должны включить класс виджетов с именем TP_Widget . Это имя, конечно, не обязательно, но для этого класса обязательно расширить класс WP_Widget , чтобы унаследовать его функциональность. Поэтому мы создаем класс, как в следующем примере:
|
1
2
3
|
class TP_Widget extends WP_Widget {
// the following code will be here
}
|
Далее следует код, который мы добавляем в класс, чтобы мы работали с виджетом так, как он предназначен в WordPress, используя все необходимые функции, необходимые для создания функционального виджета, созданного в WordPress.
Сначала мы напишем функцию __construct для начальной интеграции необходимого кода. Функция __construct — это место, где фактически обрабатывается виджет. Мы собираемся дать виджету имя и описание внутри этой функции путем наследования и использования метода __construct родительского __construct как в следующем примере:
|
1
2
3
4
|
public function __construct() {
// widget actual processes
parent::__construct(‘TP_Widget’, ‘Timer Widget’, array(‘description’ => __(‘A Timer Plugin Widget’, ‘text_domain’)));
}
|
Первый параметр — это идентификатор виджета, второй — имя виджета, третий — массив с описанием. Следующая функция будет функцией form . Мы собираемся создать и использовать эту функцию для настройки и работы с формой контента виджета панели администратора. Следующий код будет выполняться внутри заполнителя виджета на странице виджетов панели администратора:
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
|
public function form() {
if (!$_POST) {
$tp_arr = unserialize(get_option(‘tp_ID_’ . $this->number));
}
else {
if ($_POST[‘tp-hidd’] == ‘true’) {
$tp_arr[‘tp-title’] = $_POST[‘tp-title’];
$tp_arr[‘tp-date’] = $_POST[‘tp-date’];
$tp_arr[‘tp-hour’] = $_POST[‘tp-hour-val’];
$tp_arr[‘tp-minute’] = $_POST[‘tp-minute-val’];
update_option(‘tp_ID_’ . $this->number, serialize($tp_arr));
}
}
// outputs the options form on admin
|
В этой части у нас есть информация о виджетах, таких как название, дата, час и минута Эта информация извлекается из строки сериализованного массива, которая сохраняется в базе данных с именем tp_ID_X , где X — уникальный идентификатор виджета, используемый для идентификации данных, извлекаемых относительно используемого виджета.
В этой части значения виджетов также сохраняются в массиве один за другим, сериализуются и сохраняются в базе данных как поле параметров для последующего использования.
Следующая часть — это элементы формы виджета администратора, которые используются во внешнем интерфейсе.
|
01
02
03
04
05
06
07
08
09
10
11
|
<label>Title:</label><br/>
<input type=»text» name=»tp-title» class=»tp-title» value=»<?php echo $tp_arr[‘tp-title’]; ?>» /><br/><br/>
<a class=»tp-time-edit» href=»javascript:void(0);»>[ Edit ]</a><br/><br/>
<label>Select a date:</label><br/>
<input type=»text» name=»tp-date» class=»tp-date» readonly=»true» value=»<?php echo $tp_arr[‘tp-date’]; ?>» />
<p><div class=»tp-time»><label>Hours</label>
<input name=»tp-hour-val» class=»tp-hour-val» value=»<?php echo $tp_arr[‘tp-hour’]; ?>» readonly=»true» /><div class=»tp-hour»></div>
</p>
<p><label>Minutes</label>
<input name=»tp-minute-val» class=»tp-minute-val» readonly=»true» value=»<?php echo $tp_arr[‘tp-minute’]; ?>»><div class=»tp-minute»></div></div></p>
<input type=»hidden» name=»tp-hidd» value=»true» />
|
В этом конкретном разделе нужно рассмотреть два аспекта:
Во-первых, классы тегов, такие как tp-date , tp-hour , tp-minute , с которыми позже работают в javascript, и, во- вторых, поля ввода . Во-первых, есть некоторый PHP-код, вставленный в поля ввода, которые существуют в приведенном выше коде, код, который используется для хранения данных либо для форм для отправки, либо для реализации JavaScript в jQuery и работы с ним.
В конце HTML-кода выше функция form закрывается.
Обновление данных виджета
Когда кнопка « Сохранить» виджета нажата на панели администратора, информация о форме передается и обрабатывается следующей функцией:
|
01
02
03
04
05
06
07
08
09
10
11
12
|
public function update() {
// processes widget options to be saved
if ($_POST[‘tp-hidd’] == ‘true’) {
$tp_Arr[‘tp-title’] = $_POST[‘tp-title’];
$tp_Arr[‘tp-date’] = $_POST[‘tp-date’];
$tp_Arr[‘tp-hour’] = $_POST[‘tp-hour-val’];
$tp_Arr[‘tp-minute’] = $_POST[‘tp-minute-val’];
$tp_Arr[‘tp-date’] = $_POST[‘tp-date’];
update_option(‘tp_ID_’ . $this->number, serialize($tp_Arr));
}
}
|
Функция update — это функция, используемая для обновления информации в виджете в виджетах WordPress.
Запись вывода виджета на боковой панели
Следующая часть — это код, который генерирует и выводит виджет на боковой панели как виджет. По сути, это содержимое уже сгенерированного кода виджета, цель которого — совместимая оболочка.
Вот пример только половины функции, а именно кода PHP, который используется для получения необходимой информации для вывода виджета.
|
01
02
03
04
05
06
07
08
09
10
|
public function widget($args, $instance) {
$tp_arr = unserialize(get_option(‘tp_ID_’ . $this->number));
$temp_date = explode(«/», $tp_arr[‘tp-date’]);
$tp_arr[‘tp-date’] = $temp_date[2] .
extract($args);
$title = apply_filters(‘widget_title’, $tp_arr[‘tp-title’]);
echo $before_widget;
if (!empty($title))
echo $before_title .
|
Итак, мы извлекаем данные виджета, ранее сохраненные в панели администратора. Следующая часть — это HTML и PHP-код, который представляет таймер и / или имеет значения, используемые позже jQuery для вычисления времени и функционирования в качестве таймера.
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
|
<div class=»timer-main»>
<input type=»hidden» class=»tp-widget-date» value=»<?php echo $tp_arr[‘tp-date’]; ?>» />
<input type=»hidden» class=»tp-widget-time» value=»<?php echo $tp_arr[‘tp-hour’] . «:» . $tp_arr[‘tp-minute’]; ?>:0″ />
<ul class=»tp-head»>
<ol>YY</ol>
<ol>DD</ol>
<ol>HH</ol>
<ol>MM</ol>
<ol>SS</ol>
</ul>
<ul>
<li>-</li>
<li>-</li>
<li>-</li>
<li>-</li>
<li>-</li>
</ul>
</div>
|
Тег UL используется для более позднего создания стиля строки и столбца, чтобы таймер имел упорядоченный вид и получил класс, чтобы впоследствии можно было легко управлять тегами LI с помощью jQuery.
Также вы можете заметить элементы ввода с данными PHP в них. Эти элементы также используются jQuery для хранения значений сохраненной даты и времени.
Функция заканчивается после HTML-кода динамической переменной, которая закрывает виджет, используя значения, совместимые с WordPress.
|
1
2
3
4
|
<?php
echo $after_widget;
// outputs the content of the widget
}
|
Интеграция класса
И последнее, но не менее важное: если вы помните, одним из действий, написанных на шаге 1, было использование тега widgets_init и указание на функцию TP_widgets_init . Нам нужно написать его функциональность, чтобы правильно связать класс с WordPress.
|
1
2
3
|
function TP_widgets_init() {
register_widget(«TP_Widget»);
}
|
«Для более полного взгляда на функциональность стандартного виджета WordPress, проверьте WordPress Widget API »
Шаг 5 Создание мета-бокса
Мета-блок — это блок, расположенный на одной из боковых панелей, расположенных в редакторе администратора любой страницы или сообщения. Поскольку мы используем почти тот же код HTML, CSS и JavaScript, мы собираемся использовать почти тот же код PHP и HTML, что и виджет. Некоторые модификации некоторых классов родительских элементов необходимы для функциональности jQuery. Но сначала, мета-бокс должен быть создан и внедрен в WordPress из настроек плагина. Еще одно из действий, написанных на шаге 1, которые мы не завершили, — это тэг admin init hook. Этот хук запускается до появления заголовков и будет использоваться нами для реализации функциональности add_meta_box с add_meta_box функции add_meta_box как в примере ниже:
|
1
2
3
4
|
function TP_admin_init() {
add_meta_box(‘TP_metaid’, __(‘Timer Plugin Post Settings’, ‘TP_textdomain’), ‘TP_inner_custom_box’, ‘post’, ‘side’);
add_meta_box(‘TP_metaid’, __(‘Timer Plugin Page Settings’, ‘TP_textdomain’), ‘TP_inner_custom_box’, ‘page’, ‘side’);
}
|
Этот код создает настраиваемое поле на каждой странице поста и страницы редактирования в панели администратора с содержанием и функциональностью функции TP_inner_custom_box . Для более полного представления о том, как использовать add_meta_box , см. add_meta_box in WordPress Codex .
Функциональность и код переднего конца
Мета-блок имеет похожий внешний интерфейс с виджетом, а внутренний код не так уж отличается, просто немного отличаются имена полей параметров базы данных для сохранения. Как и в форме администратора виджета, он сделан из функций PHP и HTML. Начиная с функции TP_inner_custom_box мы создаем интерфейсную и административную функциональность TP_inner_custom_box как в следующем примере:
|
1
2
3
4
5
|
function TP_inner_custom_box() {
global $post;
// Use nonce for verification
wp_nonce_field(plugin_basename(__FILE__), ‘cuschost_noncename’);
$tp_arr = unserialize(get_option(‘tp_pp_ID_’ . $post->ID));
|
После этого пример кода HTML поразительно похож. Единственными отличиями являются дополнительная кнопка ввода, после которой функция заключена в точку с запятой и заканчивается.
|
01
02
03
04
05
06
07
08
09
10
|
<a class=»tp-time-edit» href=»javascript:void(0);»>[ Edit ]</a><br/><br/>
<label>Select a date:</label><br/>
<input type=»text» name=»tp-date» class=»tp-date» readonly=»true» value=»<?php echo $tp_arr[‘tp-date’]; ?>» />
<p><div class=»tp-time»><label>Hours</label>
<input name=»tp-hour-val» class=»tp-hour-val» value=»<?php echo $tp_arr[‘tp-hour’]; ?>» readonly=»true» /><div class=»tp-hour»></div>
</p>
<p><label>Minutes</label>
<input name=»tp-minute-val» class=»tp-minute-val» readonly=»true» value=»<?php echo $tp_arr[‘tp-minute’]; ?>»><div class=»tp-minute»></div></div></p>
<input type=»hidden» name=»tp-hidd» value=»true» />
<input type=»button» class=»tp-insert-shortcode button-primary» id=»publish» value=»Insert Short-Code» />
|
Сохранение данных
Предыдущая форма отправляет данные при обновлении сообщения или страницы, и нам нужно получить эти данные и сохранить их для последующего пользователя. Для этого мы используем другой хук, который мы уже реализовали, в основном save_post хука save_post который указывает на функцию обратного вызова TP_save_postdata . Функция обратного вызова получает данные из почтовых переменных и сохраняет их в базе данных под сформированным именем уникального идентификатора почтового идентификатора, и это выглядит так:
|
1
2
3
4
5
6
7
8
9
|
function TP_save_postdata() {
global $post;
if ( $_POST[‘tp-hidd’] == ‘true’ ) {
$tp_arr[‘tp-date’] = $_POST[‘tp-date’];
$tp_arr[‘tp-hour’] = $_POST[‘tp-hour-val’];
$tp_arr[‘tp-minute’] = $_POST[‘tp-minute-val’];
update_option( ‘tp_pp_ID_’ . $post->ID, serialize( $tp_arr ) );
}
}
|
Шаг 6 Реализация шорткода
Для реализации шорткода нам нужно добавить новое действие в список функций add_action . Следующий пример расскажет об этом:
|
1
|
add_shortcode(‘tp-shortcode’, ‘tp_shortcode’);
|
Само собой разумеется, что мы должны создать функцию tp_shortcode которая обрабатывает новый шорткод.
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
function tp_shortcode($atts,$content=»») {
global $post;
$tp_arr = unserialize(get_option(‘tp_pp_ID_’ . $post->ID));
$temp_date = explode(«/», $tp_arr[‘tp-date’]);
$tp_arr[‘tp-date’] = $temp_date[2] .
return ‘<div class=»timer-content»><input type=»hidden» class=»tp-widget-date» value=»‘.$tp_arr[«tp-date»].'» />
<input type=»hidden» class=»tp-widget-time» value=»‘.$tp_arr[«tp-hour»].’:’.$tp_arr[«tp-minute»].’:0″ />
<ul class=»tp-head»>
<ol>YY</ol>
<ol>DD</ol>
<ol>HH</ol>
<ol>MM</ol>
<ol>SS</ol>
</ul>
<ul>
<li>-</li>
<li>-</li>
<li>-</li>
<li>-</li>
<li>-</li>
</ul>
</div>’;
}
|
Знакомый код? Это TP_Widget интерфейс для кода виджета боковой панели, использованного ранее в функции widget внутри класса TP_Widget .
«Для более подробной информации о том, как использовать функцию
add_shortcodeсмотритеadd_shortcodeв Кодексе WordPress ».
Шаг 7 Редактирование файлов стилей, стилизация таймера
Это очень простой и быстрый шаг, поскольку он охватывает всего 2 небольших файла, которые обрабатывают дизайн виджета таймера, шорткода и раздела администратора.
Раздел администратора:
В этом разделе файл стиля, добавленный на первом этапе, который мы собираемся редактировать, называется admin-style.css, и он должен выглядеть следующим образом:
|
1
2
3
4
5
|
.tp-hour, .tp-minute { padding: 0px !important;
.tp-hour-val, .tp-minute-val { font-weight:bold;
.tp-time { margin-top: 10px;
.widget .editable, .inside .editable { background-color:#FED22F;
.widget .ui-slider-horizontal, .inside .ui-slider-horizontal { background:#FED22F;
|
Этот файл таблицы стилей обрабатывает ширину, высоту, цвета и положение ползунков виджета администратора и всплывающего окна jQuery UI календаря при выборе часов и минут из внешнего интерфейса.
Стиль внешнего интерфейса таймера:
Файл style.css — это файл CSS, который охватывает дизайн UL, LI, OL таймера во внешнем интерфейсе. Смотрите следующий пример:
|
1
2
3
4
5
|
.timer-content { width:300px;
.timer-main ul, .timer-content ul { float:left;
.timer-main ul.tp-head, #content .timer-content ul.tp-head { margin:0px;
.timer-main ul ol, .timer-content ul ol { float:left;
.timer-main ul li, .timer-content ul li { float:left;
|
Некоторые элементы плавают, изменяются в размерах и располагаются с полями, чтобы они выглядели как задумано. Результатом этого стиля является дизайн на следующей картинке:

Шаг 8 Виджет администратора и код Javascript для MetaBox
Администраторский виджет требует очень специфической функциональности jQuery, которая идеально сочетается с HTML-классами для тегов. Весь следующий код должен быть помещен в файл admin-script.js .
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
|
jQuery(document).ready(function($){
$(‘.tp-insert-shortcode’).click(function(){
send_to_editor(‘[tp-shortcode]’);
});
$(‘.tp-time-edit’).live(‘click’,function(){
$(‘.tp-date’).datepicker({
format:’m/d/Y’,
hourGrid: 4,
minuteGrid: 10,
position: ‘right’,
onBeforeShow: function(){
$(this).DatePickerSetDate($(this).val(), true);
}
});
$(‘.tp-date’).addClass(‘editable’);
$( «.tp-hour»).slider({
value:0,
min: 0,
max: 23,
step: 1,
slide: function( event, ui ) {
$(«.tp-hour-val» ).val(ui.value);
}
});
$( «.tp-minute» ).slider({
value:0,
min: 0,
max: 59,
step: 1,
slide: function( event, ui ) {
$(«.tp-minute-val» ).val(ui.value);
}
});
});
});
|
В этом примере после инициализации jQuery и события загрузки документа весь код, который работает с виджетом и шорткодом, загружается для использования.
Теперь, поскольку в виджете есть динамическое содержимое, загружаемое ajax, все его содержимое невидимо для jQuery, если не используется с активным действием. Для этого была создана ссылка с именем класса функции tp-time-edit и javascript опции тега void(0) при нажатии запускает живой хук и делает доступными все теги HTML в вызове функции события.
Внутри функции обратного вызова мы используем функциональность, необходимую для создания указателя даты для текстового поля даты с помощью CSS-класса tp-date .
И последнее, но не менее важное: фактически в начале кода находится функциональность javascript шорткода, в частности вставка jQuery значения CSS-класса tp-insert-shortcode найденного в поле ввода внутри функции шорткода, ранее написанной на шаге 6. Когда нажата кнопка с классом tp-insert-shortcode , она должна добавить строковое значение [tp-schortcode] в редактор WYSIWYG.
«Очень важно! JQuery UI требует, чтобы классы в свойствах тега использовались для ползунков и плагинов DatePicker. Он не работает с идентификаторами»
Шаг 9 Таймер Javascript Код
Это самый важный и немного сложнейший для визуализации фрагмент кода во всем учебном пособии, поскольку в нем рассматривается много математики.
Эта часть относится исключительно к файлу script.js, в котором содержится исходный код javascript, относящийся к фактическому таймеру как в части виджета, так и в части шорткода во внешнем интерфейсе.
|
01
02
03
04
05
06
07
08
09
10
11
|
jQuery(document).ready(function($) {
function start_by_parent(tp_parentClass){
var tp_timer =»;
tp_date=$(tp_parentClass+’ input.tp-widget-date’).val();
tp_time=$(tp_parentClass+’ input.tp-widget-time’).val();
tp_timer = setInterval(«tp_set(‘»+tp_parentClass+»‘,'»+tp_date+»‘,'»+tp_time+»‘);», 1000);
}
start_by_parent(‘.timer-main’);
start_by_parent(‘.timer-content’);
});
|
Родительский класс, обрабатывающий виджет, является timer-main , так как для короткого кода CSS-класс с timer-content используется в качестве родительского тега, который используется для воздействия на элементы тега li содержащие значения таймера для DD (дней), HH (часов). ), MM (минуты) и SS (секунды). Вышеуказанная реализация представляет собой динамический подход к ним обоим в jQuery после того, как значения отправлены в функцию calc_data для обработки всей математики.
Функция tp_set фактически использует метод calc_data для вычисления значений перед тем, как вставить их в соответствующие элементы HTML-тега. Вот реализованный метод tp_set который должен tp_set внутри того же файла, script.js .
|
01
02
03
04
05
06
07
08
09
10
11
12
|
function tp_set(tp_parentClass,tp_date, tp_time){
calc_data(tp_date, tp_time);
jQuery(tp_parentClass+’ ul’).find(‘li:nth-child(1)’).html(tp_years);
jQuery(tp_parentClass+’ ul’).find(‘li:nth-child(2)’).html(tp_days);
jQuery(tp_parentClass+’ ul’).find(‘li:nth-child(3)’).html(tp_hours);
jQuery(tp_parentClass+’ ul’).find(‘li:nth-child(4)’).html(tp_minutes);
jQuery(tp_parentClass+’ ul’).find(‘li:nth-child(5)’).html(tp_seconds);
var tp_timer = setInterval(‘tp_set(\»+tp_parentClass+’\’,\»+tp_date+’\’,\»+tp_time+’\’);’, 1000 );
clearTimeout(tp_timer);
}
|
Наконец, одна из наиболее важных частей этого файла сценария, метод calc_data , который вычисляет количество секунд между текущей и выбранной пользователем датой и возвращает соответствующие значения, чтобы таймер отображал количество времени, оставшегося до этой даты.
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
|
function calc_data(tp_date,tp_time){
tempdate = tp_date.split(«/»);
temptime = tp_time.split(«:»);
var seconds=1000;
var minutes=seconds*60;
var hours=minutes*60;
var days=hours*24;
var years=days*365;
var db_time = new Date(tempdate[0], tempdate[1]-1, tempdate[2], temptime[0], temptime[1], 00);
var now_time = new Date();
db_time = db_time.getTime();
now_time = now_time.getTime();
var tp_result = db_time-now_time;
if(tp_result < 0) {
tp_years=tp_days=tp_hours=tp_minutes=tp_seconds=0;
}
else{
tp_years = Math.floor(tp_result/years);
tp_days = Math.floor(tp_result/days)-(tp_years*365);
tp_hours = Math.floor(tp_result/hours)-(tp_days*24)-(tp_years*365*24);
tp_minutes = Math.floor(tp_result/minutes)-(tp_hours*60)-(tp_days*24*60)-(tp_years*365*24*60);
tp_seconds = Math.floor(tp_result/seconds)-(tp_minutes*60)-(tp_hours*60*60)-(tp_days*60*24*60)-(tp_years*365*24*60*60);
singlebox=false;
if(tp_years > 99){
tp_years=99;
}
if(tp_days > 99){
singlebox=true;
}
if(tp_years < 0)tp_years=0;
if(tp_days < 0)tp_days=0;
if(tp_hours < 0)tp_hours=0;
if(tp_minutes > 60)tp_minutes=60;
if(tp_minutes < 0)tp_minutes=0;
if(tp_seconds < 0)tp_seconds=0;
}
}
|
Очень важный аспект, который необходимо упомянуть, состоит в том, что эти функции используют глобальные переменные, которые еще не были упомянуты. Рекомендуется добавить следующий код с глобальными переменными вверху файла script.js перед любым другим кодом:
|
1
2
3
4
|
tp_days = 0;
tp_hours = 0;
tp_minutes = 0;
tp_seconds = 0;
|
Вывод
Построение таймера обратного отсчета в jQuery не совсем быстрый и простой проект, так как есть много аспектов, которые необходимо учитывать при запуске. Такие вещи, как то, какие классы javascript, плагины и стили будут использоваться, какой дизайн он будет иметь в передней и задней части, как он хранит данные и как он их извлекает. Также совместимость всех этих с другими плагинами или скриптами и как точно все рассчитывается и что он выводит.
Дайте нам знать, что вы думаете, и если у вас есть какие-либо дополнительные рекомендации, в комментариях ниже!
Обновление: это сообщение было обновлено, чтобы исправить проблемы, упомянутые в комментариях.
Обновление № 2: Исходные файлы теперь доступны для скачивания в верхней части этого руководства.