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

PDF
"VUE.JS как реакт с человеческим лицом" Дулецкий Вольдэмар, Evrone
PDF
Артём Поликарпов - Фоторама - простая и мощная галерея на JS | Happydev'12
PPT
Easy authcache 2 кеширование для pro родионов игорь
PPT
TestGuy - эмулируем вашего тестировщика
PDF
Frontendlab: Фреймворк Duranda js - Виктор Сотов
PPTX
Yeoman generator своими руками
PDF
Зачем нужен EmberJS, если мне хвататет jQuery
PDF
Quick introduction jQuery
"VUE.JS как реакт с человеческим лицом" Дулецкий Вольдэмар, Evrone
Артём Поликарпов - Фоторама - простая и мощная галерея на JS | Happydev'12
Easy authcache 2 кеширование для pro родионов игорь
TestGuy - эмулируем вашего тестировщика
Frontendlab: Фреймворк Duranda js - Виктор Сотов
Yeoman generator своими руками
Зачем нужен EmberJS, если мне хвататет jQuery
Quick introduction jQuery

What's hot (9)

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

Viewers also liked (10)

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

More from WordCamp Kyiv (9)

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

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