SlideShare une entreprise Scribd logo
1  sur  90
Télécharger pour lire hors ligne
Tworzenie wtyczek dla
TinyMCE 4.*
Tomasz Dziuda
!
WordUp Kraków - Lato 2014
Co warto wiedzieć o
TinyMCE?
• W WordPressie 3.9 zawarto TinyMCE 4.*
• W WordPressie 3.9 zawarto TinyMCE 4.*
• TinyMCE posiada tryb “teeny”
• W WordPressie 3.9 zawarto TinyMCE 4.*
• TinyMCE posiada tryb “teeny”
• Łatwo go rozbudować o własne przyciski
• W WordPressie 3.9 zawarto TinyMCE 4.*
• TinyMCE posiada tryb “teeny”
• Łatwo go rozbudować o własne przyciski
• WordPress posiada sporo filtrów dedykowanych
TinyMCE
• W WordPressie 3.9 zawarto TinyMCE 4.*
• TinyMCE posiada tryb “teeny”
• Łatwo go rozbudować o własne przyciski
• WordPress posiada sporo filtrów dedykowanych
TinyMCE
• Dokumentacja TinyMCE ssie ;)
Dlaczego wtyczki dla
TinyMCE są potrzebne?
• Pozwalają dodać brakujące funkcjonalności
edytora













• Pozwalają dodać brakujące funkcjonalności
edytora
• Możliwe jest dostosowanie UI edytora pod
potrzeby klienta







• Pozwalają dodać brakujące funkcjonalności
edytora
• Możliwe jest dostosowanie UI edytora pod
potrzeby klienta
• Umożliwiają ograniczenie pola manewru klientowi



• Pozwalają dodać brakujące funkcjonalności
edytora
• Możliwe jest dostosowanie UI edytora pod
potrzeby klienta
• Umożliwiają ograniczenie pola manewru klientowi
• Pozwalają zapomnieć o składni shortcode’ów
Podstawowe filtry
mce_buttons[_2,_3,_4]
( http://codex.wordpress.org/Plugin_API/Filter_Reference/mce_buttons,_mce_buttons_2,_mce_buttons_3,_mce_buttons_4 )
teeny_mce_buttons
mce_external_languages
mce_external_plugins
mce_css
( http://codex.wordpress.org/Plugin_API/Filter_Reference/mce_css )
tiny_mce_before_init
( http://codex.wordpress.org/Plugin_API/Filter_Reference/tiny_mce_before_init )
Dodajemy przycisk do
edytora
add_action(
'admin_head',
‘wordup_add_button'
);
*.php
function wordup_add_button() {
!
!
!
!
!
!
!
!
!
!
!
!
!
!
}
*.php
function wordup_add_button() {
global $typenow;
!
!
!
!
!
!
!
!
!
!
!
!
}
*.php
function wordup_add_button() {
global $typenow;
if (
!current_user_can('edit_posts') &&
!current_user_can(‘edit_pages’)
)
return;
!
!
!
!
!
!
!
}
*.php
function wordup_add_button() {
global $typenow;
if (
!current_user_can('edit_posts') &&
!current_user_can(‘edit_pages’)
)
return;
if(!in_array($typenow, array('post', 'page')))
return;
!
!
!
!
}
*.php
function wordup_add_button() {
global $typenow;
if (
!current_user_can('edit_posts') &&
!current_user_can(‘edit_pages’)
)
return;
if(!in_array($typenow, array('post', 'page')))
return;
if (get_user_option('rich_editing') == 'true') {
add_filter(‘mce_external_plugins’, ‘wordup_add_plugin’);
add_filter('mce_buttons', 'wordup_register_button');
}
}
*.php
function wordup_add_plugin($plgs) {
$plgs['wordup_button'] = plugins_url('/btn.js', __FILE__);
return $plgs;
}
!
!
!
!
*.php
function wordup_add_plugin($plgs) {
$plgs['wordup_button'] = plugins_url('/btn.js', __FILE__);
return $plgs;
}
!
function wordup_register_button($buttons) {
array_push($buttons, "wordup_button");
return $buttons;
}
*.php
(function() {
!
!
!
!
!
!
!
!
})();
*.js
(function() {
tinymce.PluginManager.add(‘wordup_button',
!
!
!
!
!
);
})();
*.js
(function() {
tinymce.PluginManager.add(‘wordup_button',
function(editor, url) {
!
!
!
}
);
})();
*.js
(function() {
tinymce.PluginManager.add(‘wordup_button',
function(editor, url) {
editor.addButton(‘wordup_button', {
title: ‘My Test Button',
icon: ‘wp-media-library‘
});
}
);
})();
*.js
icon: ‘wp-media-library’ => .mce-i-wp-media-library
( http://wp.dziudek.pl/dev/dodawanie-wlasnych-przyciskow-w-edytorze-tinymce-4 )
Usuwamy przycisk z
edytora
function wordup_remove_buttons($buttons) {
unset($buttons[0]);
return $buttons;
}
!
!
!
!
function wordup_remove_buttons($buttons) {
unset($buttons[0]);
return $buttons;
}
!
add_filter(
'mce_buttons',
'wordup_remove_buttons'
);
Zmieniamy ikonę oraz
wstawiamy do edytora tekst
( http://melchoyce.github.io/dashicons/ )
!
add_action(
'admin_enqueue_scripts',
‘wordup_add_css'
);
!
function wordup_add_css() {
wp_enqueue_style(
'wordup-tinymce',
plugins_url('/style.css', __FILE__)
);
}
i.mce-i-icon {
font: 400 20px/1 dashicons;
padding: 0;
vertical-align: top;
speak: none;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
margin-left: -2px;
padding-right: 2px
}
style.css
(function() {
tinymce.PluginManager.add(‘wordup_button',
function(editor, url) {
editor.addButton( ‘wordup_button', {
title: ‘My test button',
icon: ‘icon dashicons-dashboard’,
onclick: function() {
editor.insertContent('Hello World');
}
});
}
);
})();
(function() {
tinymce.PluginManager.add(‘wordup_button',
function(editor, url) {
editor.addButton( ‘wordup_button', {
title: ‘My test button',
icon: ‘icon dashicons-dashboard’,
onclick: function() {
editor.insertContent('Hello World');
}
});
}
);
})();
(function() {
tinymce.PluginManager.add(‘wordup_button',
function(editor, url) {
editor.addButton( ‘wordup_button', {
title: ‘My test button',
icon: ‘icon dashicons-dashboard’,
onclick: function() {
editor.insertContent('Hello World');
}
});
}
);
})();
.mce-i-icon
Alternatywa dla
editor.insertContent
var editorFormatterSetup = function(self) {
!
!
!
!
!
!
!
!
!
!
};
var editorFormatterSetup = function(self) {
editor.formatter.register('bigtext', {
inline: 'strong',
styles: {fontSize : '32px'}
});
!
!
!
!
!
!
!
};
var editorFormatterSetup = function(self) {
editor.formatter.register('bigtext', {
inline: 'strong',
styles: {fontSize : '32px'}
});
!
!
!
!
!
!
!
};
var editorFormatterSetup = function(self) {
editor.formatter.register('bigtext', {
inline: 'strong',
styles: {fontSize : '32px'}
});
!
!
!
!
!
!
!
};
var editorFormatterSetup = function(self) {
editor.formatter.register('bigtext', {
inline: 'strong',
styles: {fontSize : '32px'}
});
editor.formatter.formatChanged(
'bigtext',
function(state) {
self.active(state);
}
);
};
var editorFormatterSetup = function(self) {
editor.formatter.register('bigtext', {
inline: 'strong',
styles: {fontSize : '32px'}
});
editor.formatter.formatChanged(
'bigtext',
function(state) {
self.active(state);
}
);
};
onclick: function() {
editor.formatter.toggle('bigtext');
},
!
!
!
!
!
!
!
!
!
!
onclick: function() {
editor.formatter.toggle('bigtext');
},
!
!
!
!
!
!
!
!
!
!
onclick: function() {
editor.formatter.toggle('bigtext');
},
onpostrender: function() {
var self = this;
!
!
!
!
!
!
}
onclick: function() {
editor.formatter.toggle('bigtext');
},
onpostrender: function() {
var self = this;
if(editor.formatter) {
editorFormatterSetup(self);
} else {
editor.on('init', function() {
editorFormatterSetup(self);
});
}
}
onclick: function() {
editor.formatter.toggle('bigtext');
},
onpostrender: function() {
var self = this;
if(editor.formatter) {
editorFormatterSetup(self);
} else {
editor.on('init', function() {
editorFormatterSetup(self);
});
}
}
Dajemy użytkownikowi
wybór
(function() {
tinymce.PluginManager.add(
'wordup_button',
function( ed, url ) {
ed.addButton( 'wordup_button', {
title: 'My test button',
type: 'menubutton',
icon: 'icon dashicons-dashboard',
menu: [{
text: 'Menu item I',
value: 'Text from menu item I',
icon: 'icon dashicons-wordpress',
onclick: function() {
ed.insertContent(this.value());
}
// ..
}]
});
});
})();
(function() {
tinymce.PluginManager.add(
'wordup_button',
function( ed, url ) {
ed.addButton( 'wordup_button', {
title: 'My test button',
type: 'menubutton',
icon: 'icon dashicons-dashboard',
menu: [{
text: 'Menu item I',
value: 'Text from menu item I',
icon: 'icon dashicons-wordpress',
onclick: function() {
ed.insertContent(this.value());
}
// ..
}]
});
});
})();
(function() {
tinymce.PluginManager.add(
'wordup_button',
function( ed, url ) {
ed.addButton( 'wordup_button', {
title: 'My test button',
type: 'menubutton',
icon: 'icon dashicons-dashboard',
menu: [{
text: 'Menu item I',
value: 'Text from menu item I',
icon: 'icon dashicons-wordpress',
onclick: function() {
ed.insertContent(this.value());
}
// ..
}]
});
});
})();
Zaawansowana
konfiguracja w popupie
(function() {
tinymce.PluginManager.add('wordup_button', function(editor, url){
editor.addButton( 'wordup_button', {
title: 'Własny nagłówek',
icon: 'icon dashicons-dashboard',
onclick: function() {
editor.windowManager.open( {
title: 'Wstaw nagłówek',
body: [{
type: 'textbox',
name: 'title',
label: 'Tytuł'
}],
onsubmit: function( e ) {
editor.insertContent( '<h3>' + e.data.title + '</h3>');
}
});
}
});
});
})();
(function() {
tinymce.PluginManager.add('wordup_button', function(editor, url){
editor.addButton( 'wordup_button', {
title: 'Własny nagłówek',
icon: 'icon dashicons-dashboard',
onclick: function() {
editor.windowManager.open( {
title: 'Wstaw nagłówek',
body: [{
type: 'textbox',
name: 'title',
label: 'Tytuł'
}],
onsubmit: function( e ) {
editor.insertContent( '<h3>' + e.data.title + '</h3>');
}
});
}
});
});
})();
editor.windowManager.open( {
title: 'Wstaw nagłówek',
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
});
editor.windowManager.open( {
title: 'Wstaw nagłówek',
body: [{
type: 'textbox',
name: 'title',
label: 'Tytuł',
}]
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
});
editor.windowManager.open( {
title: 'Wstaw nagłówek',
body: [{
type: 'textbox',
name: 'title',
label: 'Tytuł',
}, {
type: 'textbox',
name: 'id',
label: 'Nazwa kotwicy'
}]
!
!
!
!
!
!
!
!
!
!
!
!
!
!
});
editor.windowManager.open( {
title: 'Wstaw nagłówek',
body: [{
type: 'textbox',
name: 'title',
label: 'Tytuł',
}, {
type: 'textbox',
name: 'id',
label: 'Nazwa kotwicy'
}, {
type: 'listbox',
name: 'level',
label: 'Poziom nagłówka',
'values': [
{text: '<h3>', value: '3'},
{text: '<h4>', value: '4'},
{text: '<h5>', value: '5'},
{text: '<h6>', value: '6'}
]
}]
!
!
!
!
});
editor.windowManager.open( {
title: 'Wstaw nagłówek',
body: [{
type: 'textbox',
name: 'title',
label: 'Tytuł',
}, {
type: 'textbox',
name: 'id',
label: 'Nazwa kotwicy'
}, {
type: 'listbox',
name: 'level',
label: 'Poziom nagłówka',
'values': [
{text: '<h3>', value: '3'},
{text: '<h4>', value: '4'},
{text: '<h5>', value: '5'},
{text: '<h6>', value: '6'}
]
}],
onsubmit: function( e ) {
editor.insertContent( '<h' + e.data.level + ' id="' + e.data.id + '">' +
e.data.title + '</h' + e.data.level + '>');
}
});
Wsparcie dla
Wielojęzyczności
wp_localize_script
wp_localize_script
function wordup_add_button_lang($loc) {
$loc['wordup_button'] =
plugin_dir_path(__FILE__).'lang.php';
return $loc;
}
!
add_filter(
'mce_external_languages',
‘wordup_add_button_lang'
);
function wordup_add_button_lang($loc) {
$loc['wordup_button'] =
plugin_dir_path(__FILE__).'lang.php';
return $loc;
}
!
add_filter(
'mce_external_languages',
‘wordup_add_button_lang'
);
<?php
!
if (!defined('ABSPATH')) exit;
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
lang.php
<?php
!
if (!defined('ABSPATH')) exit;
!
if (!class_exists( '_WP_Editors' ))
require( ABSPATH . WPINC . '/class-wp-editor.php' );
!
!
!
!
!
!
!
!
!
!
!
!
!
!
lang.php
<?php
!
if (!defined('ABSPATH')) exit;
!
if (!class_exists( '_WP_Editors' ))
require( ABSPATH . WPINC . '/class-wp-editor.php' );
!
function wordup_button_translation() {
!
!
!
!
!
!
!
!
!
}
!
!
lang.php
<?php
!
if (!defined('ABSPATH')) exit;
!
if (!class_exists( '_WP_Editors' ))
require( ABSPATH . WPINC . '/class-wp-editor.php' );
!
function wordup_button_translation() {
$strings = array(
'label' => __('My test’, 'wordup_button'),
'msg' => __('Hello World!!!!', 'wordup_button')
);
!
!
!
!
}
!
lang.php
<?php
!
if (!defined('ABSPATH')) exit;
!
if (!class_exists( '_WP_Editors' ))
require( ABSPATH . WPINC . '/class-wp-editor.php' );
!
function wordup_button_translation() {
$strings = array(
'label' => __('My test’, 'wordup_button'),
'msg' => __('Hello World!!!!', 'wordup_button')
);
!
$locale = _WP_Editors::$mce_locale;
$translated = 'tinyMCE.addI18n("' . $locale .
'.wordup_button", ' . json_encode( $strings ) . ");n";
!
return $translated;
}
!
lang.php
<?php
!
if (!defined('ABSPATH')) exit;
!
if (!class_exists( '_WP_Editors' ))
require( ABSPATH . WPINC . '/class-wp-editor.php' );
!
function wordup_button_translation() {
$strings = array(
'label' => __('My test’, 'wordup_button'),
'msg' => __('Hello World!!!!', 'wordup_button')
);
!
$locale = _WP_Editors::$mce_locale;
$translated = 'tinyMCE.addI18n("' . $locale .
'.wordup_button", ' . json_encode( $strings ) . ");n";
!
return $translated;
}
!
$strings = wordup_button_translation();
lang.php
editor.getLang('OBIEKT.KLUCZ')
(function() {
tinymce.PluginManager.add(
'wordup_button',
function( editor, url ) {
editor.addButton( 'wordup_button', {
title: editor.getLang('wordup_button.label'),
icon: 'icon dashicons-dashboard’,
onclick: function() {
editor.insertContent(
editor.getLang(‘wordup_button.msg’)
);
}
});
}
);
})();
(function() {
tinymce.PluginManager.add(
'wordup_button',
function( editor, url ) {
editor.addButton( 'wordup_button', {
title: editor.getLang('wordup_button.label'),
icon: 'icon dashicons-dashboard’,
onclick: function() {
editor.insertContent(
editor.getLang(‘wordup_button.msg’)
);
}
});
}
);
})();
Dodatkowe przykłady
Dodawanie przycisków w trybie fullscreen
Kontrolka styleselect
TinyMCE w sekcji komentarzy
Wszystkie materiały:
http://wp.dziudek.pl/kategorie/tinymce
Ukryte przyciski w TinyMCE
Zarządzanie stanami przycisków
Przykłady do Pobrania
Kontakt
• @dziudek
• dziudek@gmail.com
• wp.dziudek.pl
• zebymniezapomnial.tumblr.com
Pytania?

Contenu connexe

Tendances

スマホウェブの本命 jQueryMobile
スマホウェブの本命 jQueryMobileスマホウェブの本命 jQueryMobile
スマホウェブの本命 jQueryMobileManabu Uekusa
 
Programming for joomla - extensions development
Programming for joomla - extensions developmentProgramming for joomla - extensions development
Programming for joomla - extensions developmentEmir Sakic
 
Александр Кашеверов «Пара слов о веб - приложениях и что такое Gulp»
Александр Кашеверов «Пара слов о веб - приложениях и что такое Gulp»Александр Кашеверов «Пара слов о веб - приложениях и что такое Gulp»
Александр Кашеверов «Пара слов о веб - приложениях и что такое Gulp»DataArt
 
Introducción WebComponents y Visual Studio
Introducción WebComponents y Visual StudioIntroducción WebComponents y Visual Studio
Introducción WebComponents y Visual StudioDavid Chavarri
 
ສ້າງລະບົບ Loin ດ້ວຍ php
ສ້າງລະບົບ Loin ດ້ວຍ phpສ້າງລະບົບ Loin ດ້ວຍ php
ສ້າງລະບົບ Loin ດ້ວຍ phpBounsong Byv
 
WordPress Customizer
WordPress CustomizerWordPress Customizer
WordPress Customizerslicejack
 
Concevoir un thème pour Wordpress
Concevoir un thème pour WordpressConcevoir un thème pour Wordpress
Concevoir un thème pour WordpressJean-Luc Houedanou
 

Tendances (14)

スマホウェブの本命 jQueryMobile
スマホウェブの本命 jQueryMobileスマホウェブの本命 jQueryMobile
スマホウェブの本命 jQueryMobile
 
Programming for joomla - extensions development
Programming for joomla - extensions developmentProgramming for joomla - extensions development
Programming for joomla - extensions development
 
Александр Кашеверов «Пара слов о веб - приложениях и что такое Gulp»
Александр Кашеверов «Пара слов о веб - приложениях и что такое Gulp»Александр Кашеверов «Пара слов о веб - приложениях и что такое Gulp»
Александр Кашеверов «Пара слов о веб - приложениях и что такое Gulp»
 
Jquery Framework
Jquery FrameworkJquery Framework
Jquery Framework
 
Introducción WebComponents y Visual Studio
Introducción WebComponents y Visual StudioIntroducción WebComponents y Visual Studio
Introducción WebComponents y Visual Studio
 
DestakNews
DestakNewsDestakNews
DestakNews
 
ສ້າງລະບົບ Loin ດ້ວຍ php
ສ້າງລະບົບ Loin ດ້ວຍ phpສ້າງລະບົບ Loin ດ້ວຍ php
ສ້າງລະບົບ Loin ດ້ວຍ php
 
xe:objectData
xe:objectDataxe:objectData
xe:objectData
 
Wek14 mysql 2
Wek14 mysql 2Wek14 mysql 2
Wek14 mysql 2
 
Blospot
BlospotBlospot
Blospot
 
jQuery for beginners
jQuery for beginnersjQuery for beginners
jQuery for beginners
 
WordPress Customizer
WordPress CustomizerWordPress Customizer
WordPress Customizer
 
Prototype UI
Prototype UIPrototype UI
Prototype UI
 
Concevoir un thème pour Wordpress
Concevoir un thème pour WordpressConcevoir un thème pour Wordpress
Concevoir un thème pour Wordpress
 

En vedette

Widżet GK News Show Pro na 10 sposobów - WordUp Kraków 2013
Widżet GK News Show Pro na 10 sposobów - WordUp Kraków 2013Widżet GK News Show Pro na 10 sposobów - WordUp Kraków 2013
Widżet GK News Show Pro na 10 sposobów - WordUp Kraków 2013Tomasz Dziuda
 
WP-Cron - WordUp Kraków Zima 2014
WP-Cron - WordUp Kraków Zima 2014WP-Cron - WordUp Kraków Zima 2014
WP-Cron - WordUp Kraków Zima 2014Maciek Kuchnik
 
WordPress heartbeat API w praktyce
WordPress heartbeat API w praktyceWordPress heartbeat API w praktyce
WordPress heartbeat API w praktyceMaciek Kuchnik
 
WordUp Kraków - Maciej Kuchnik - WordPress jako baza dla aplikacji internetowej
WordUp Kraków - Maciej Kuchnik - WordPress jako baza dla aplikacji internetowejWordUp Kraków - Maciej Kuchnik - WordPress jako baza dla aplikacji internetowej
WordUp Kraków - Maciej Kuchnik - WordPress jako baza dla aplikacji internetowejMaciek Kuchnik
 
AMP + WP = błyskawiczny związek?
AMP + WP = błyskawiczny związek?AMP + WP = błyskawiczny związek?
AMP + WP = błyskawiczny związek?Tomasz Pawlisiak
 

En vedette (6)

Daj się wyręczyć
Daj się wyręczyćDaj się wyręczyć
Daj się wyręczyć
 
Widżet GK News Show Pro na 10 sposobów - WordUp Kraków 2013
Widżet GK News Show Pro na 10 sposobów - WordUp Kraków 2013Widżet GK News Show Pro na 10 sposobów - WordUp Kraków 2013
Widżet GK News Show Pro na 10 sposobów - WordUp Kraków 2013
 
WP-Cron - WordUp Kraków Zima 2014
WP-Cron - WordUp Kraków Zima 2014WP-Cron - WordUp Kraków Zima 2014
WP-Cron - WordUp Kraków Zima 2014
 
WordPress heartbeat API w praktyce
WordPress heartbeat API w praktyceWordPress heartbeat API w praktyce
WordPress heartbeat API w praktyce
 
WordUp Kraków - Maciej Kuchnik - WordPress jako baza dla aplikacji internetowej
WordUp Kraków - Maciej Kuchnik - WordPress jako baza dla aplikacji internetowejWordUp Kraków - Maciej Kuchnik - WordPress jako baza dla aplikacji internetowej
WordUp Kraków - Maciej Kuchnik - WordPress jako baza dla aplikacji internetowej
 
AMP + WP = błyskawiczny związek?
AMP + WP = błyskawiczny związek?AMP + WP = błyskawiczny związek?
AMP + WP = błyskawiczny związek?
 

Plus de Tomasz Dziuda

Wtyczkowe kompendium - WordUp Warszawa
Wtyczkowe kompendium - WordUp WarszawaWtyczkowe kompendium - WordUp Warszawa
Wtyczkowe kompendium - WordUp WarszawaTomasz Dziuda
 
Wtyczkowe Kompendium - WordUp Łódź #12
Wtyczkowe Kompendium - WordUp Łódź #12Wtyczkowe Kompendium - WordUp Łódź #12
Wtyczkowe Kompendium - WordUp Łódź #12Tomasz Dziuda
 
Wtyczkowe Kompendium - WordUp Lublin
Wtyczkowe Kompendium - WordUp LublinWtyczkowe Kompendium - WordUp Lublin
Wtyczkowe Kompendium - WordUp LublinTomasz Dziuda
 
Wtyczkowe kompendium
Wtyczkowe kompendiumWtyczkowe kompendium
Wtyczkowe kompendiumTomasz Dziuda
 
Jak Twoja strona moze wygenerować niespodziewane koszta? WordUp Kraków
Jak Twoja strona moze wygenerować niespodziewane koszta? WordUp KrakówJak Twoja strona moze wygenerować niespodziewane koszta? WordUp Kraków
Jak Twoja strona moze wygenerować niespodziewane koszta? WordUp KrakówTomasz Dziuda
 
Jak Twoja strona może wygenerować niespodziewane koszta
Jak Twoja strona może wygenerować niespodziewane kosztaJak Twoja strona może wygenerować niespodziewane koszta
Jak Twoja strona może wygenerować niespodziewane kosztaTomasz Dziuda
 
REST API - teoria i praktyka - WordUp Trójmiasto
REST API - teoria i praktyka - WordUp TrójmiastoREST API - teoria i praktyka - WordUp Trójmiasto
REST API - teoria i praktyka - WordUp TrójmiastoTomasz Dziuda
 
REST API - teoria i praktyka - WordUp Warszawa
REST API - teoria i praktyka - WordUp WarszawaREST API - teoria i praktyka - WordUp Warszawa
REST API - teoria i praktyka - WordUp WarszawaTomasz Dziuda
 
Contributor Day - WordCamp Lublin 2017 - przegląd motywów
Contributor Day - WordCamp Lublin 2017 - przegląd motywówContributor Day - WordCamp Lublin 2017 - przegląd motywów
Contributor Day - WordCamp Lublin 2017 - przegląd motywówTomasz Dziuda
 
Electron + WordPress = ❤
Electron + WordPress = ❤Electron + WordPress = ❤
Electron + WordPress = ❤Tomasz Dziuda
 
Jak nadążyć za światem front endu
Jak nadążyć za światem front enduJak nadążyć za światem front endu
Jak nadążyć za światem front enduTomasz Dziuda
 
Statycznie czy dynamicznie - infoMEET Wrocław
Statycznie czy dynamicznie - infoMEET WrocławStatycznie czy dynamicznie - infoMEET Wrocław
Statycznie czy dynamicznie - infoMEET WrocławTomasz Dziuda
 
Motywy dla WordPressa - historia prawdziwa - WordUp Katowice
Motywy dla WordPressa - historia prawdziwa - WordUp KatowiceMotywy dla WordPressa - historia prawdziwa - WordUp Katowice
Motywy dla WordPressa - historia prawdziwa - WordUp KatowiceTomasz Dziuda
 
Motywy dla WordPressa - historia prawdziwa - WordUp Warszawa
Motywy dla WordPressa - historia prawdziwa - WordUp WarszawaMotywy dla WordPressa - historia prawdziwa - WordUp Warszawa
Motywy dla WordPressa - historia prawdziwa - WordUp WarszawaTomasz Dziuda
 
Motywy Wordpressa Historia Prawdziwa
Motywy Wordpressa Historia PrawdziwaMotywy Wordpressa Historia Prawdziwa
Motywy Wordpressa Historia PrawdziwaTomasz Dziuda
 
Dokąd zmierza WordPress?
Dokąd zmierza WordPress?Dokąd zmierza WordPress?
Dokąd zmierza WordPress?Tomasz Dziuda
 
Jak nadążyć za światem front-endu - WordPress Training Day
Jak nadążyć za światem front-endu - WordPress Training DayJak nadążyć za światem front-endu - WordPress Training Day
Jak nadążyć za światem front-endu - WordPress Training DayTomasz Dziuda
 
Statycznie czy dynamicznie? v.2.0
Statycznie czy dynamicznie? v.2.0Statycznie czy dynamicznie? v.2.0
Statycznie czy dynamicznie? v.2.0Tomasz Dziuda
 
Webinar: 5 Tricks for WordPress web administrators
Webinar: 5 Tricks for WordPress web administratorsWebinar: 5 Tricks for WordPress web administrators
Webinar: 5 Tricks for WordPress web administratorsTomasz Dziuda
 

Plus de Tomasz Dziuda (20)

Wtyczkowe kompendium - WordUp Warszawa
Wtyczkowe kompendium - WordUp WarszawaWtyczkowe kompendium - WordUp Warszawa
Wtyczkowe kompendium - WordUp Warszawa
 
Wtyczkowe Kompendium - WordUp Łódź #12
Wtyczkowe Kompendium - WordUp Łódź #12Wtyczkowe Kompendium - WordUp Łódź #12
Wtyczkowe Kompendium - WordUp Łódź #12
 
Trello w praktyce
Trello w praktyceTrello w praktyce
Trello w praktyce
 
Wtyczkowe Kompendium - WordUp Lublin
Wtyczkowe Kompendium - WordUp LublinWtyczkowe Kompendium - WordUp Lublin
Wtyczkowe Kompendium - WordUp Lublin
 
Wtyczkowe kompendium
Wtyczkowe kompendiumWtyczkowe kompendium
Wtyczkowe kompendium
 
Jak Twoja strona moze wygenerować niespodziewane koszta? WordUp Kraków
Jak Twoja strona moze wygenerować niespodziewane koszta? WordUp KrakówJak Twoja strona moze wygenerować niespodziewane koszta? WordUp Kraków
Jak Twoja strona moze wygenerować niespodziewane koszta? WordUp Kraków
 
Jak Twoja strona może wygenerować niespodziewane koszta
Jak Twoja strona może wygenerować niespodziewane kosztaJak Twoja strona może wygenerować niespodziewane koszta
Jak Twoja strona może wygenerować niespodziewane koszta
 
REST API - teoria i praktyka - WordUp Trójmiasto
REST API - teoria i praktyka - WordUp TrójmiastoREST API - teoria i praktyka - WordUp Trójmiasto
REST API - teoria i praktyka - WordUp Trójmiasto
 
REST API - teoria i praktyka - WordUp Warszawa
REST API - teoria i praktyka - WordUp WarszawaREST API - teoria i praktyka - WordUp Warszawa
REST API - teoria i praktyka - WordUp Warszawa
 
Contributor Day - WordCamp Lublin 2017 - przegląd motywów
Contributor Day - WordCamp Lublin 2017 - przegląd motywówContributor Day - WordCamp Lublin 2017 - przegląd motywów
Contributor Day - WordCamp Lublin 2017 - przegląd motywów
 
Electron + WordPress = ❤
Electron + WordPress = ❤Electron + WordPress = ❤
Electron + WordPress = ❤
 
Jak nadążyć za światem front endu
Jak nadążyć za światem front enduJak nadążyć za światem front endu
Jak nadążyć za światem front endu
 
Statycznie czy dynamicznie - infoMEET Wrocław
Statycznie czy dynamicznie - infoMEET WrocławStatycznie czy dynamicznie - infoMEET Wrocław
Statycznie czy dynamicznie - infoMEET Wrocław
 
Motywy dla WordPressa - historia prawdziwa - WordUp Katowice
Motywy dla WordPressa - historia prawdziwa - WordUp KatowiceMotywy dla WordPressa - historia prawdziwa - WordUp Katowice
Motywy dla WordPressa - historia prawdziwa - WordUp Katowice
 
Motywy dla WordPressa - historia prawdziwa - WordUp Warszawa
Motywy dla WordPressa - historia prawdziwa - WordUp WarszawaMotywy dla WordPressa - historia prawdziwa - WordUp Warszawa
Motywy dla WordPressa - historia prawdziwa - WordUp Warszawa
 
Motywy Wordpressa Historia Prawdziwa
Motywy Wordpressa Historia PrawdziwaMotywy Wordpressa Historia Prawdziwa
Motywy Wordpressa Historia Prawdziwa
 
Dokąd zmierza WordPress?
Dokąd zmierza WordPress?Dokąd zmierza WordPress?
Dokąd zmierza WordPress?
 
Jak nadążyć za światem front-endu - WordPress Training Day
Jak nadążyć za światem front-endu - WordPress Training DayJak nadążyć za światem front-endu - WordPress Training Day
Jak nadążyć za światem front-endu - WordPress Training Day
 
Statycznie czy dynamicznie? v.2.0
Statycznie czy dynamicznie? v.2.0Statycznie czy dynamicznie? v.2.0
Statycznie czy dynamicznie? v.2.0
 
Webinar: 5 Tricks for WordPress web administrators
Webinar: 5 Tricks for WordPress web administratorsWebinar: 5 Tricks for WordPress web administrators
Webinar: 5 Tricks for WordPress web administrators
 

Tworzenie wtyczek dla TinyMCE 4.* - WordUp Kraków