SlideShare a Scribd company logo
JAVASCRIPT
WORDPRESS UTILS
JAVASCRIPT УТИЛИТЫ В ЯДРЕ
WORDPRESS, КОТОРЫЕ МОГУТ
СДЕЛАТЬ ЖИЗНЬ РАЗРАБОТЧИКА
ПРОЩЕ.
Докладчик: /Viktor Kuliebiakin victor@pingbull.no
О ЧЕМ ПОЙДЕТ РЕЧЬ?
/**
* Namespace
*/
wp.{ object }
КАК ПОДКЛЮЧИТЬ?
wp_enqueue_script( 'script_name' );
Зачем изобретать велосипед, если кто-то уже это
сделал?
ГДЕ ИСКАТЬ ОПИСАНИЕ?
WP.MEDIA
wp_enqueue_media();
var frame;
// some magic
frame = wp.media({
title: 'Insert Image(s)',
multiple: true,
library: {
type: 'image'
},
button: {
text: 'Insert into gallery'
}
});
// some magic
frame.open();
WP.AJAX
wp_enqueue_script( 'wp-util' );
ПЕРЕД ТЕМ КАК НАЧАТЬ
$some_function = function () {
// do something
};
/**
* For logged in users
*/
add_action( 'wp_ajax_some_action', $some_function );
/**
* For not logged in users
*/
add_action( 'wp_ajax_nopriv_some_action', $some_function );
КОЕ-ЧТО ЕЩЕ
wp_send_json( [
'success' => false,
'data' => [
'email' => __( 'Email is invalid.' )
]
] );
wp_send_json_success();
...
wp_send_json_success( [
// some answer
] );
...
wp_send_json_error( [
'email' => __( 'Invalid email address.' )
] );
JQUERY ONLY
jQuery.ajax('http://site.com/wp-admin/admin-ajax.php', {
data: {
action: 'some_action',
email: 'some@mail.com',
...
},
method: 'POST',
success: function (response) {
if (response.success) {
// do something with response.data
} else {
// show error etc. from response.data
}
}
});
WP.AJAX
wp.ajax.send('some_action', {
data: {
email: 'some@mail.com',
...
},
success: function (response) {
// do something with response
},
error: function (error) {
// show error etc.
}
});
WP.TEMPLATE
wp_enqueue_script( 'wp-util' );
<script type="text/html" id="tmpl-post">
// Your template
</script>
Шаблон оборачивается тегом <script>
Тип тега должен быть text/html
Значение id должно иметь префикс tmpl-
НЕСКОЛЬКО ПРАВИЛ ПРИ РАБОТЕ С
ШАБЛОНОМ
Синтаксис похож на
Для вывода данных используется {{{ ... }}}
Для вывода HTML-безопасных данных {{ ... }}
Для вычислений <# ... #>
Данные доступны из объекта data
Mustache
<article>
<h3>{{{data.title}}}</h3>
<# if (data.image) { #>
<figure>
<img src="{{data.image}}" alt="thumbnail">
</figure>
<# } #>
{{{data.excerpt}}}
<a href="{{data.permalink}}">Read more</a>
</article>
var tmpl = wp.template('post');
$('.post-list').append(template({
title: 'Hello World!',
image: 'path/to/image.jpg',
excerpt: '<p>Welcome to WordPress. This is your first post.</p>'
permalink: 'https://site.com/2015/05/29/hello-world/'
}));
<article>
<h3>Hello World!</h3>
<figure>
<img src="path/to/image.jpg" alt="thumbnail">
</figure>
<p>Welcome to WordPress. This is your first post.</p>
<a href="https://site.com/2015/05/29/hello-world/">Read more</a>
</article>
WP.HTML
wp_enqueue_script( 'shortcode' );
wp.html.string({
tag: 'input',
single: true,
attrs: {
type: 'email',
id: 'contact-email-1',
name: 'email',
'class': 'input-field',
placeholder: 'Your Email'
}
});
<input type="email" id="contact-email-1" name="email"
class="input-field" placeholder="Your Email" />
WP.SHORTCODE
wp_enqueue_script( 'shortcode' );
var button = new wp.shortcode({
tag: 'button',
type: 'closed', // closed - default, single, self-closed
attrs: {
title: 'Click me!',
type: 'primary',
icon: 'palmtree'
},
content: 'Click me!'
});
button.string();
[button title="Click me!"
type="primary" icon="palmtree"]Click me![/button]
ЕЩЕ ПАРУ ПОЛЕЗНЫХ МЕТОДОВ
wp.shortcode.next(tag, text, index);
wp.shortcode.replace(tag, text, callback);
someText = wp.shortcode.replace('button', someText,
function (shortcode) {
return wp.html.string({
tag: 'button',
content: shortcode.content,
attrs: {
'class': shortcode.get('type')
+ '-button dashicons-' + shortcode.get('icon'),
title: shortcode.get('title')
}
});
}
);
some text
...
<button class="primary-button dashicons-palmtree"
title="Click me!">Click me!</button>
...
some text
WP.MCE
wp_enqueue_script( 'mce-view' );
wp.mce.views.register('view_id', { object });
WP.HEARTBEAT
wp_enqueue_script( 'heartbeat' );
ДОБАВЛЯЕМ ДАННЫЕ ДЛЯ
ОТПРАВКИ НА СЕРВЕР
newData = {
some: 'data'
};
data = wp.heartbeat.isQueued('your-key');
if (data) {
newData = jQuery.extend(data, newData);
}
wp.heartbeat.enqueue(
'your-key',
newData,
true
);
ПОЛУЧАЕМ ЗАПРОС НА СЕРВЕРЕ С
ПОМОЩЬЮ ЭКШЕНОВ И ФИЛЬТРОВ
heartbeat_received
$response, $data, $screen_id
heartbeat_send
$response, $screen_id
heartbeat_tick
$response, $screen_id
ПОЛУЧАЕМ ОТВЕТ В БРАУЗЕРЕ С
ПОМОЩЪЮ СОБЫТИЙ
jQuery(document).on('heartbeat-tick', function(event, data) {
if (data.hasOwnProperty('your-key')) {
// do something with data
}
});
ЧТО ХОТЕЛОСЬ БЫ СКАЗАТЬ В
КОНЦЕ
Загрузка дополнительных файлов,
дополнительные запросы
Использование на больших проектах
Использование в админке
СПАСИБО ЗА ВНИМАНИЕ!
E-mail: victor@pingbull.no

More Related Content

What's hot

Frontend весна 2014 лекция 1
Frontend весна 2014 лекция 1Frontend весна 2014 лекция 1
Frontend весна 2014 лекция 1
Technopark
 
Профилирование и оптимизация jQuery–кода
Профилирование и оптимизация jQuery–кодаПрофилирование и оптимизация jQuery–кода
Профилирование и оптимизация jQuery–кода
private_face
 
Профилирование и оптимизация jQuery–кода (Владимир Журавлёв)
Профилирование и оптимизация jQuery–кода (Владимир Журавлёв)Профилирование и оптимизация jQuery–кода (Владимир Журавлёв)
Профилирование и оптимизация jQuery–кода (Владимир Журавлёв)
Ontico
 
Knockout.JS на примере 2ГИС-Онлайн
Knockout.JS на примере 2ГИС-ОнлайнKnockout.JS на примере 2ГИС-Онлайн
Knockout.JS на примере 2ГИС-Онлайн
DevDay
 

What's hot (9)

Frontend весна 2014 лекция 1
Frontend весна 2014 лекция 1Frontend весна 2014 лекция 1
Frontend весна 2014 лекция 1
 
Профилирование и оптимизация jQuery–кода
Профилирование и оптимизация jQuery–кодаПрофилирование и оптимизация jQuery–кода
Профилирование и оптимизация jQuery–кода
 
Профилирование и оптимизация jQuery–кода (Владимир Журавлёв)
Профилирование и оптимизация jQuery–кода (Владимир Журавлёв)Профилирование и оптимизация jQuery–кода (Владимир Журавлёв)
Профилирование и оптимизация jQuery–кода (Владимир Журавлёв)
 
Первые шаги после установки WordPress
Первые шаги после установки WordPressПервые шаги после установки WordPress
Первые шаги после установки WordPress
 
Knockout.JS на примере 2ГИС-Онлайн
Knockout.JS на примере 2ГИС-ОнлайнKnockout.JS на примере 2ГИС-Онлайн
Knockout.JS на примере 2ГИС-Онлайн
 
Я ♥ Svg — Владимир Кузнецов, Engine6
Я ♥ Svg — Владимир Кузнецов, Engine6Я ♥ Svg — Владимир Кузнецов, Engine6
Я ♥ Svg — Владимир Кузнецов, Engine6
 
Сергей Константинов — Что интересного готовит нам W3C
Сергей Константинов — Что интересного готовит нам W3CСергей Константинов — Что интересного готовит нам W3C
Сергей Константинов — Что интересного готовит нам W3C
 
ДАМП 2015 Екатеринбург
ДАМП 2015 ЕкатеринбургДАМП 2015 Екатеринбург
ДАМП 2015 Екатеринбург
 
"Ractive.js — реактивные усы!" Ефим Соловьев, MoscowJS 17
"Ractive.js — реактивные усы!" Ефим Соловьев, MoscowJS 17"Ractive.js — реактивные усы!" Ефим Соловьев, MoscowJS 17
"Ractive.js — реактивные усы!" Ефим Соловьев, MoscowJS 17
 

Viewers also liked

WP Kitchen Meetup Spring 2015 - Владимир Самолетов: WordPress auto-install: п...
WP Kitchen Meetup Spring 2015 - Владимир Самолетов: WordPress auto-install: п...WP Kitchen Meetup Spring 2015 - Владимир Самолетов: WordPress auto-install: п...
WP Kitchen Meetup Spring 2015 - Владимир Самолетов: WordPress auto-install: п...
WordCamp Kyiv
 

Viewers also liked (10)

WP Kitchen Meetup Spring 2015 - Александр Стриха: WordPress в облаках
WP Kitchen Meetup Spring 2015 - Александр Стриха: WordPress в облакахWP Kitchen Meetup Spring 2015 - Александр Стриха: WordPress в облаках
WP Kitchen Meetup Spring 2015 - Александр Стриха: WordPress в облаках
 
WordPress Kitchen MeetUp Summer 2015 - Никита Галкин "Каноны современной разр...
WordPress Kitchen MeetUp Summer 2015 - Никита Галкин "Каноны современной разр...WordPress Kitchen MeetUp Summer 2015 - Никита Галкин "Каноны современной разр...
WordPress Kitchen MeetUp Summer 2015 - Никита Галкин "Каноны современной разр...
 
WP Kitchen Meetup Spring 2015 - Владимир Самолетов: WordPress auto-install: п...
WP Kitchen Meetup Spring 2015 - Владимир Самолетов: WordPress auto-install: п...WP Kitchen Meetup Spring 2015 - Владимир Самолетов: WordPress auto-install: п...
WP Kitchen Meetup Spring 2015 - Владимир Самолетов: WordPress auto-install: п...
 
WordPress Kitchen 2014 - Lars Magnus: How content marketing drives a new dema...
WordPress Kitchen 2014 - Lars Magnus: How content marketing drives a new dema...WordPress Kitchen 2014 - Lars Magnus: How content marketing drives a new dema...
WordPress Kitchen 2014 - Lars Magnus: How content marketing drives a new dema...
 
WP Kitchen Meetup Spring 2015 - Владимир Самолетов: WordPress auto-install: п...
WP Kitchen Meetup Spring 2015 - Владимир Самолетов: WordPress auto-install: п...WP Kitchen Meetup Spring 2015 - Владимир Самолетов: WordPress auto-install: п...
WP Kitchen Meetup Spring 2015 - Владимир Самолетов: WordPress auto-install: п...
 
Нюансы создания интернет-магазина на WordPress
Нюансы создания интернет-магазина на WordPressНюансы создания интернет-магазина на WordPress
Нюансы создания интернет-магазина на WordPress
 
Best Practices for creating WP REST API by Galkin Nikita
Best Practices for creating WP REST API by Galkin NikitaBest Practices for creating WP REST API by Galkin Nikita
Best Practices for creating WP REST API by Galkin Nikita
 
WordPress: React way by Oleksandr Strikha
WordPress: React way by Oleksandr StrikhaWordPress: React way by Oleksandr Strikha
WordPress: React way by Oleksandr Strikha
 
Адаптация TInyMCE редактора под нужды клиента by Vitaly Nikolaev
Адаптация TInyMCE редактора под нужды клиента by Vitaly NikolaevАдаптация TInyMCE редактора под нужды клиента by Vitaly Nikolaev
Адаптация TInyMCE редактора под нужды клиента by Vitaly Nikolaev
 
Customizable Options: Редактирование опций в кастомайзере с фронтенда by Vikt...
Customizable Options: Редактирование опций в кастомайзере с фронтенда by Vikt...Customizable Options: Редактирование опций в кастомайзере с фронтенда by Vikt...
Customizable Options: Редактирование опций в кастомайзере с фронтенда by Vikt...
 

Similar to WP Kitchen Meetup Spring 2015 - Виктор Кулебякин: WordPress JavaScript Utils

Js templating stepan_reznikov
Js templating stepan_reznikovJs templating stepan_reznikov
Js templating stepan_reznikov
yaevents
 
Knockoutjs на примере 2ГИС-Онлайн
Knockoutjs на примере 2ГИС-ОнлайнKnockoutjs на примере 2ГИС-Онлайн
Knockoutjs на примере 2ГИС-Онлайн
2ГИС Технологии
 
Making Scalable JavaScript Application
Making Scalable JavaScript ApplicationMaking Scalable JavaScript Application
Making Scalable JavaScript Application
Mikhail Davydov
 
KnockoutJS на примере 2ГИС-Онлайн
KnockoutJS на примере 2ГИС-ОнлайнKnockoutJS на примере 2ГИС-Онлайн
KnockoutJS на примере 2ГИС-Онлайн
2ГИС Технологии
 
DUMP-2013 Frontend - Knockoutjs на примере 2ГИС-Онлайн - Таратухин Илья
DUMP-2013 Frontend - Knockoutjs на примере 2ГИС-Онлайн - Таратухин ИльяDUMP-2013 Frontend - Knockoutjs на примере 2ГИС-Онлайн - Таратухин Илья
DUMP-2013 Frontend - Knockoutjs на примере 2ГИС-Онлайн - Таратухин Илья
it-people
 
Web осень 2012 лекция 10
Web осень 2012 лекция 10Web осень 2012 лекция 10
Web осень 2012 лекция 10
Technopark
 
"Адаптивный дизайн интерфейса JS API Яндекс.Карт и особенности его реализации...
"Адаптивный дизайн интерфейса JS API Яндекс.Карт и особенности его реализации..."Адаптивный дизайн интерфейса JS API Яндекс.Карт и особенности его реализации...
"Адаптивный дизайн интерфейса JS API Яндекс.Карт и особенности его реализации...
Yandex
 

Similar to WP Kitchen Meetup Spring 2015 - Виктор Кулебякин: WordPress JavaScript Utils (20)

Js templating stepan_reznikov
Js templating stepan_reznikovJs templating stepan_reznikov
Js templating stepan_reznikov
 
Степан Резников "Шаблонизация на клиенте"
Степан Резников "Шаблонизация на клиенте"Степан Резников "Шаблонизация на клиенте"
Степан Резников "Шаблонизация на клиенте"
 
Knockoutjs на примере 2ГИС-Онлайн
Knockoutjs на примере 2ГИС-ОнлайнKnockoutjs на примере 2ГИС-Онлайн
Knockoutjs на примере 2ГИС-Онлайн
 
Looking into WordPress Core, WordCamp Russia 2015
Looking into WordPress Core, WordCamp Russia 2015Looking into WordPress Core, WordCamp Russia 2015
Looking into WordPress Core, WordCamp Russia 2015
 
Making Scalable JavaScript Application
Making Scalable JavaScript ApplicationMaking Scalable JavaScript Application
Making Scalable JavaScript Application
 
KnockoutJS на примере 2ГИС-Онлайн
KnockoutJS на примере 2ГИС-ОнлайнKnockoutJS на примере 2ГИС-Онлайн
KnockoutJS на примере 2ГИС-Онлайн
 
DUMP-2013 Frontend - Knockoutjs на примере 2ГИС-Онлайн - Таратухин Илья
DUMP-2013 Frontend - Knockoutjs на примере 2ГИС-Онлайн - Таратухин ИльяDUMP-2013 Frontend - Knockoutjs на примере 2ГИС-Онлайн - Таратухин Илья
DUMP-2013 Frontend - Knockoutjs на примере 2ГИС-Онлайн - Таратухин Илья
 
Web осень 2012 лекция 10
Web осень 2012 лекция 10Web осень 2012 лекция 10
Web осень 2012 лекция 10
 
"Адаптивный дизайн интерфейса JS API Яндекс.Карт и особенности его реализации...
"Адаптивный дизайн интерфейса JS API Яндекс.Карт и особенности его реализации..."Адаптивный дизайн интерфейса JS API Яндекс.Карт и особенности его реализации...
"Адаптивный дизайн интерфейса JS API Яндекс.Карт и особенности его реализации...
 
Bootstrap 3. Адаптивная верстка для WordPress
Bootstrap 3. Адаптивная верстка для WordPressBootstrap 3. Адаптивная верстка для WordPress
Bootstrap 3. Адаптивная верстка для WordPress
 
Опыт разработки эффективного SPA
Опыт разработки эффективного SPAОпыт разработки эффективного SPA
Опыт разработки эффективного SPA
 
Jsfwdays 2013-2
Jsfwdays 2013-2Jsfwdays 2013-2
Jsfwdays 2013-2
 
WordPress auto-install: просто о сложном
WordPress auto-install: просто о сложномWordPress auto-install: просто о сложном
WordPress auto-install: просто о сложном
 
XSS. Обходы фильтров и защит.
XSS. Обходы фильтров и защит.XSS. Обходы фильтров и защит.
XSS. Обходы фильтров и защит.
 
Экскурсия по Flutter SDK
Экскурсия по Flutter SDKЭкскурсия по Flutter SDK
Экскурсия по Flutter SDK
 
Render API.
Render API.Render API.
Render API.
 
Back to Basics — Как подружить верстку с логикой? | Odessa Frontend Meetup #9
Back to Basics — Как подружить верстку с логикой? | Odessa Frontend Meetup #9Back to Basics — Как подружить верстку с логикой? | Odessa Frontend Meetup #9
Back to Basics — Как подружить верстку с логикой? | Odessa Frontend Meetup #9
 
Bootstrap 3
Bootstrap 3Bootstrap 3
Bootstrap 3
 
Страх и ненависть в исходном коде
Страх и ненависть в исходном кодеСтрах и ненависть в исходном коде
Страх и ненависть в исходном коде
 
WebCamp: Developer Day: Parse'им бэкенд - Аким Халилов
WebCamp: Developer Day: Parse'им бэкенд - Аким ХалиловWebCamp: Developer Day: Parse'им бэкенд - Аким Халилов
WebCamp: Developer Day: Parse'им бэкенд - Аким Халилов
 

More from WordCamp Kyiv

More from WordCamp Kyiv (9)

WP Kitchen Meetup Spring 2015 - Алексей Федоров: Как из наработок сделать пр...
WP Kitchen Meetup Spring 2015 - Алексей Федоров: Как из наработок сделать пр...WP Kitchen Meetup Spring 2015 - Алексей Федоров: Как из наработок сделать пр...
WP Kitchen Meetup Spring 2015 - Алексей Федоров: Как из наработок сделать пр...
 
WordPress и социальные сети
WordPress и социальные сетиWordPress и социальные сети
WordPress и социальные сети
 
Cтандартизация рабочего окружения и автоматизация развертывания рабочей среды
Cтандартизация рабочего окружения и автоматизация развертывания рабочей средыCтандартизация рабочего окружения и автоматизация развертывания рабочей среды
Cтандартизация рабочего окружения и автоматизация развертывания рабочей среды
 
WordPress Kitchen 2014 - Дмитрий Корельский: Ангулярность WordPress бытия
WordPress Kitchen 2014 - Дмитрий Корельский: Ангулярность WordPress бытияWordPress Kitchen 2014 - Дмитрий Корельский: Ангулярность WordPress бытия
WordPress Kitchen 2014 - Дмитрий Корельский: Ангулярность WordPress бытия
 
WordPress Kitchen 2014 - Дмитрий Курикша: WP для клиента. Прячем лишнее под к...
WordPress Kitchen 2014 - Дмитрий Курикша: WP для клиента. Прячем лишнее под к...WordPress Kitchen 2014 - Дмитрий Курикша: WP для клиента. Прячем лишнее под к...
WordPress Kitchen 2014 - Дмитрий Курикша: WP для клиента. Прячем лишнее под к...
 
WordPress Kitchen 2014 - Дмитрий Романенко: Философия создания и использовани...
WordPress Kitchen 2014 - Дмитрий Романенко: Философия создания и использовани...WordPress Kitchen 2014 - Дмитрий Романенко: Философия создания и использовани...
WordPress Kitchen 2014 - Дмитрий Романенко: Философия создания и использовани...
 
WordPress Kitchen 2014 - Александр Стриха: Кеширование в WordPress
WordPress Kitchen 2014 - Александр Стриха: Кеширование в WordPress WordPress Kitchen 2014 - Александр Стриха: Кеширование в WordPress
WordPress Kitchen 2014 - Александр Стриха: Кеширование в WordPress
 
Social networks API + WordPress
Social networks API + WordPressSocial networks API + WordPress
Social networks API + WordPress
 
Multisite in WordPress
Multisite in WordPressMultisite in WordPress
Multisite in WordPress
 

WP Kitchen Meetup Spring 2015 - Виктор Кулебякин: WordPress JavaScript Utils