SlideShare a Scribd company logo
1 of 113
Download to read offline
Discovering the capabilities of
the Theme Customizer API
Tomasz Dziuda
WordCamp Praha 2015
Ahoj!
Tomasz Dziuda
Lead Developer @
Co-organizer of WordCamp Poland 2014
Twitter: @dziudek
http://dziudek.pl -> https://www.gavick.com/blog
Mail: dziudek@gavick.com
Why's it worth using the
Theme Customizer?
Live preview for setting changes
Easy theme-option implementation
Test configuration options easily without
affecting the live website
A user doesn’t have to learn how to use the
theme settings page
4 practical bits of
advice from me to you
As the number of options grows, the potential number of
users requesting assistance will grow exponentially too
1
0
Number of options
Giving a user full control over colors, in
most cases, ends with dramatic results
The Dashboard will accept everything,
but the user won't
Solutions implemented in the official APIs
generally work better
How does it work?
<iframe>
<iframe>
refresh
or
JavaScript data binding
is_preview()
<iframe>
refresh
or
JavaScript data binding
is_preview()
wp_head
<iframe>
refresh
or
JavaScript data binding
is_preview()
customize_register
wp_head
<iframe>
refresh
or
JavaScript data binding
is_preview()
customize_register
wp_head
<iframe>
customize_preview_init
refresh
or
JavaScript data binding
is_preview()
customize_register
wp_head
<iframe>
customize_preview_init
customize_controls_enqueue_scripts
refresh
or
JavaScript data binding
Customize Manager
Customize Manager
Panel
Customize Manager
Panel
Section
Customize Manager
Panel
Section
Control
Customize Manager
Panel
Section
Control
Setting
Customize Manager
Panel
Section
Control
Setting
Context
Context
Context
Syntax
function PREFIX_customize_register($wp_customizer){
// Theme Customizer code
}
function PREFIX_customize_register($wp_customizer){
// Theme Customizer code
}
add_action(
'customize_register',
‘PREFIX_customize_register’
);
function PREFIX_customize_register($wp_customizer){
// Theme Customizer code
}
add_action(
'customize_register',
‘PREFIX_customize_register’
);
$wp_customizer->add_X(
);
$wp_customizer->add_X(
);
X = setting, panel, section, control
$wp_customizer->add_X(
‘name’,
);
X = setting, panel, section, control
$wp_customizer->add_X(
‘name’,
array(
‘setting_1’ => ‘value’,
‘setting_2’ => ‘value’,
…
‘setting_N’ => ‘value’
)
);
X = setting, panel, section, control
$wp_customizer->get_X(‘name’)
$wp_customizer->get_X(‘name’)
$wp_customizer->remove_X(‘name’)
Available params
param / element panel section control setting
type ✔ ✔ ✔ ✔
description ✔ ✔ ✔
priority ✔ ✔ ✔
capability ✔ ✔ ✔
theme_supports ✔ ✔ ✔
title ✔ ✔
panel ✔
section ✔
label ✔
choices ✔
input_attrs ✔
active_callback ✔
sanitize_callback ✔
sanitize_js_callback ✔
default ✔
transport ✔
Types of controls
text
radio
checkbox
textarea
select
dropdown-pages
WP_Customize_Color_ControlWP_Customize_Image_Control
More controls
$wp_customize->add_control(
‘mytheme_layout_width’,
array(
'type' => 'range',
'section' => 'layout',
'label' => ‘Layout width',
'input_attrs' => array(
'min' => 720,
'max' => 1280,
'step' => 1,
'class' => ‘layout-width-control‘
)
)
);
$wp_customize->add_control(
‘mytheme_layout_width’,
array(
'type' => 'range',
'section' => 'layout',
'label' => ‘Layout width',
'input_attrs' => array(
'min' => 720,
'max' => 1280,
'step' => 1,
'class' => ‘layout-width-control‘
)
)
);
$wp_customize->add_control(
‘mytheme_layout_width’,
array(
'type' => 'range',
'section' => 'layout',
'label' => ‘Layout width',
'input_attrs' => array(
'min' => 720,
'max' => 1280,
'step' => 1,
'class' => ‘layout-width-control‘
)
)
);
But there is a small
problem…
Source: http://caniuse.com/#search=date
Custom controls
class My_Customize_Textarea_Control extends WP_Customize_Control {
}
class My_Customize_Textarea_Control extends WP_Customize_Control {
public $type = 'textarea';
}
class My_Customize_Textarea_Control extends WP_Customize_Control {
public $type = 'textarea';
public function render_content() {
?>
<?php
}
}
class My_Customize_Textarea_Control extends WP_Customize_Control {
public $type = 'textarea';
public function render_content() {
?>
<label>
<?php if(!empty($this->label)) : ?>
<span class=“customize-control-title">
<?php echo esc_html( $this->label ); ?>
</span>
<?php endif; ?>
</label>
<?php
}
}
class My_Customize_Textarea_Control extends WP_Customize_Control {
public $type = 'textarea';
public function render_content() {
?>
<label>
<?php if(!empty($this->label)) : ?>
<span class=“customize-control-title">
<?php echo esc_html( $this->label ); ?>
</span>
<?php endif; ?>
<?php if(!empty($this->description)) : ?>
<span class="description customize-control-description”>
<?php echo $this->description ; ?>
</span>
<?php endif; ?>
</label>
<?php
}
}
class My_Customize_Textarea_Control extends WP_Customize_Control {
public $type = 'textarea';
public function render_content() {
?>
<label>
<?php if(!empty($this->label)) : ?>
<span class=“customize-control-title">
<?php echo esc_html( $this->label ); ?>
</span>
<?php endif; ?>
<?php if(!empty($this->description)) : ?>
<span class="description customize-control-description”>
<?php echo $this->description ; ?>
</span>
<?php endif; ?>
<textarea rows=“5" cols=“20” <?php $this->link(); ?>>
<?php echo esc_textarea($this->value()); ?>
</textarea>
</label>
<?php
}
}
class My_Customize_Textarea_Control extends WP_Customize_Control {
public $type = 'textarea';
public function render_content() {
?>
<label>
<?php if(!empty($this->label)) : ?>
<span class=“customize-control-title">
<?php echo esc_html( $this->label ); ?>
</span>
<?php endif; ?>
<?php if(!empty($this->description)) : ?>
<span class="description customize-control-description”>
<?php echo $this->description ; ?>
</span>
<?php endif; ?>
<textarea rows=“5" cols=“20” <?php $this->link(); ?>>
<?php echo esc_textarea($this->value()); ?>
</textarea>
</label>
<?php
}
}
$wp_customize->add_control(
);
$wp_customize->add_control(
new My_Customize_Textarea_Control(
)
);
$wp_customize->add_control(
new My_Customize_Textarea_Control(
$wp_customize,
‘theme_copyright_text’,
)
);
$wp_customize->add_control(
new My_Customize_Textarea_Control(
$wp_customize,
‘theme_copyright_text’,
array(
'label' => __(‘Copyright text', 'theme'),
'section' => 'features',
'settings' => ‘theme_copyright_text’,
'priority' => 2
)
)
);
How to use context?
• Hiding unnecessary options
• Hiding unnecessary options
• Options dedicated to specific
subpages
• Hiding unnecessary options
• Options dedicated to specific
subpages
• Creating dependencies between
options
$wp_customize->add_control(
'mytheme_google_font',
array(
'section' => 'mytheme_font_options',
'label' => __('Google Font URL', 'mytheme'),
'type' => 'text',
'active_callback' => 'mytheme_show_font_field'
)
);
function mytheme_show_font_field($control) {
}
function mytheme_show_font_field($control) {
$option = $control->manager->get_setting(‘mytheme_font');
}
function mytheme_show_font_field($control) {
$option = $control->manager->get_setting(‘mytheme_font');
return $option->value() == 'google';
}
Problems with
active_callback
is_front_page will work fine as:
“active_callback” => “is_front_page”
Problems with
active_callback
is_front_page will work fine as:
“active_callback” => “is_front_page”
but is_single or is_singular won’t, because they
take an argument which in this case is a handler to
the panel/section/control
Problems with
active_callback
function PREFIX_is_single() {
return is_single();
}
Live preview
$wp_customize->add_setting(
'mytheme_primary_color',
array(
'default' => '#5cc1a9',
'capability' => 'edit_theme_options',
'transport' => 'postMessage',
'sanitize_callback' => 'sanitize_hex_color'
)
);
$wp_customize->add_setting(
'mytheme_primary_color',
array(
'default' => '#5cc1a9',
'capability' => 'edit_theme_options',
'transport' => 'postMessage',
'sanitize_callback' => 'sanitize_hex_color'
)
);
function mytheme_customize_preview_js() {
wp_enqueue_script(
'mytheme-customize-preview',
get_template_directory_uri() . '/js/customize-preview.js',
array(),
‘1.0',
true
);
}
function mytheme_customize_preview_js() {
wp_enqueue_script(
'mytheme-customize-preview',
get_template_directory_uri() . '/js/customize-preview.js',
array(),
‘1.0',
true
);
}
add_action(
'customize_preview_init',
‘mytheme_customize_preview_js'
);
(function($){
})(jQuery);
(function($){
wp.customize(
'mytheme_primary_color',
function(value) {
}
);
})(jQuery);
(function($){
wp.customize(
'mytheme_primary_color',
function(value) {
value.bind(function(to) {
});
}
);
})(jQuery);
(function($){
wp.customize(
'mytheme_primary_color',
function(value) {
value.bind(function(to) {
jQuery('a').css('color', to || '#5cc1a9');
});
}
);
})(jQuery);
Optimisation
wp.customize(
'mytheme_primary_color',
function(value) {
value.bind( function( to ) {
}
);
});
wp.customize(
'mytheme_primary_color',
function(value) {
value.bind( function( to ) {
to = to || '#5cc1a9';
}
);
});
wp.customize(
'mytheme_primary_color',
function(value) {
value.bind( function( to ) {
to = to || '#5cc1a9';
var new_css = 'a { color: ' + to + '; }';
}
);
});
wp.customize(
'mytheme_primary_color',
function(value) {
value.bind( function( to ) {
to = to || '#5cc1a9';
var new_css = 'a { color: ' + to + '; }';
if($('#new-css').length) {
$('#new-css').remove();
}
}
);
});
wp.customize(
'mytheme_primary_color',
function(value) {
value.bind( function( to ) {
to = to || '#5cc1a9';
var new_css = 'a { color: ' + to + '; }';
if($('#new-css').length) {
$('#new-css').remove();
}
$(document).find('head')
.append($('<style id="new-css">' + new_css + '</style>'));
}
);
});
Results
BEFORE
• potentially thousands
of DOM operations
• manipulations with
style attributes
AFTER
• maximum 2 DOM
operations
• no manipulations
with style attributes
JavaScript API
Possibilities
• Access to all elements
Possibilities
• Access to all elements
• Re-render of existing elements
Possibilities
• Access to all elements
• Re-render of existing elements
• Modification of existing elements
Possibilities
• Access to all elements
• Re-render of existing elements
• Modification of existing elements
• Event tracking and control over the preview area
function PREFIX_theme_customizer_tooltips() {
?>
<?php
}
add_action(
'customize_controls_print_scripts',
‘PREFIX_theme_customizer_tooltips'
);
function PREFIX_theme_customizer_tooltips() {
?>
<script type="text/javascript">
jQuery(document).ready(function() {
});
</script>
<?php
}
add_action(
'customize_controls_print_scripts',
‘PREFIX_theme_customizer_tooltips'
);
function PREFIX_theme_customizer_tooltips() {
?>
<script type="text/javascript">
jQuery(document).ready(function() {
wp.customize.bind('ready', function() {
// Your Theme Customizer Code
});
});
</script>
<?php
}
add_action(
'customize_controls_print_scripts',
‘PREFIX_theme_customizer_tooltips'
);
Examples
wp.customize.section("colors").expand();
Examples
wp.customize.section("colors").expand();
wp.customize.control("blogname").priority(100);
Examples
wp.customize.section("colors").expand();
wp.customize.control("blogname").priority(100);
wp.customize.control("blogname").section("colors");
Examples
wp.customize.section("colors").expand();
wp.customize.control("blogname").priority(100);
wp.customize.control("blogname").section("colors");
var ctrl = wp.customize.control("background_color");
ctrl.params.label = "New label";
ctrl.renderContent();
ctrl.ready();
Examples
Reading list
• https://www.gavick.com/blog/live-preview-themes-colors-changes-theme-
customizer
• https://www.gavick.com/blog/contextual-controls-theme-customizer
• https://www.gavick.com/blog/theme-customization-controls
• https://www.gavick.com/blog/custom-control-wordpress-theme-customizer
• https://www.gavick.com/blog/custom-category-selection-controls
• https://www.gavick.com/blog/using-javascript-theme-customization-screen
• https://www.gavick.com/blog/using-tooltips-instead-option-descriptions-
wordpress-theme-customizer
• https://www.gavick.com/blog/internal-linking-wordpress-theme-customizer
Děkuji!
Questions?
This presentation is available under the GPL license:
http://www.gnu.org/copyleft/gpl.html

More Related Content

What's hot

[convergese] Adaptive Images in Responsive Web Design
[convergese] Adaptive Images in Responsive Web Design[convergese] Adaptive Images in Responsive Web Design
[convergese] Adaptive Images in Responsive Web Design
Christopher Schmitt
 
腾讯大讲堂09 如何建设高性能网站
腾讯大讲堂09 如何建设高性能网站腾讯大讲堂09 如何建设高性能网站
腾讯大讲堂09 如何建设高性能网站
areyouok
 
High Performance Ajax Applications
High Performance Ajax ApplicationsHigh Performance Ajax Applications
High Performance Ajax Applications
Julien Lecomte
 

What's hot (20)

WordPress and Ajax
WordPress and AjaxWordPress and Ajax
WordPress and Ajax
 
HTML 5 - Overview
HTML 5 - OverviewHTML 5 - Overview
HTML 5 - Overview
 
Building an HTML5 Video Player
Building an HTML5 Video PlayerBuilding an HTML5 Video Player
Building an HTML5 Video Player
 
Front End Performance
Front End PerformanceFront End Performance
Front End Performance
 
Front end performance tip
Front end performance tipFront end performance tip
Front end performance tip
 
Front end performance optimization
Front end performance optimizationFront end performance optimization
Front end performance optimization
 
Progressive Enhancement 2.0 (jQuery Conference SF Bay Area 2011)
Progressive Enhancement 2.0 (jQuery Conference SF Bay Area 2011)Progressive Enhancement 2.0 (jQuery Conference SF Bay Area 2011)
Progressive Enhancement 2.0 (jQuery Conference SF Bay Area 2011)
 
HTML5: friend or foe (to Flash)?
HTML5: friend or foe (to Flash)?HTML5: friend or foe (to Flash)?
HTML5: friend or foe (to Flash)?
 
The Need for Speed - SMX Sydney 2013
The Need for Speed - SMX Sydney 2013The Need for Speed - SMX Sydney 2013
The Need for Speed - SMX Sydney 2013
 
[convergese] Adaptive Images in Responsive Web Design
[convergese] Adaptive Images in Responsive Web Design[convergese] Adaptive Images in Responsive Web Design
[convergese] Adaptive Images in Responsive Web Design
 
Realize mais com HTML 5 e CSS 3 - 16 EDTED - RJ
Realize mais com HTML 5 e CSS 3 - 16 EDTED - RJRealize mais com HTML 5 e CSS 3 - 16 EDTED - RJ
Realize mais com HTML 5 e CSS 3 - 16 EDTED - RJ
 
A web perf dashboard up & running in 90 minutes presentation
A web perf dashboard up & running in 90 minutes presentationA web perf dashboard up & running in 90 minutes presentation
A web perf dashboard up & running in 90 minutes presentation
 
Responsive Design: Mehr als CSS
Responsive Design: Mehr als CSSResponsive Design: Mehr als CSS
Responsive Design: Mehr als CSS
 
Keypoints html5
Keypoints html5Keypoints html5
Keypoints html5
 
What you need to know bout html5
What you need to know bout html5What you need to know bout html5
What you need to know bout html5
 
腾讯大讲堂09 如何建设高性能网站
腾讯大讲堂09 如何建设高性能网站腾讯大讲堂09 如何建设高性能网站
腾讯大讲堂09 如何建设高性能网站
 
PageSpeed and SPDY
PageSpeed and SPDYPageSpeed and SPDY
PageSpeed and SPDY
 
Nahlédněte za oponu VersionPressu
Nahlédněte za oponu VersionPressuNahlédněte za oponu VersionPressu
Nahlédněte za oponu VersionPressu
 
High Performance Ajax Applications
High Performance Ajax ApplicationsHigh Performance Ajax Applications
High Performance Ajax Applications
 
HTML5와 모바일
HTML5와 모바일HTML5와 모바일
HTML5와 모바일
 

Viewers also liked (6)

Wprowadzenie do WP-API
Wprowadzenie do WP-APIWprowadzenie do WP-API
Wprowadzenie do WP-API
 
Word up łódź kwiecień 2015
Word up łódź   kwiecień 2015Word up łódź   kwiecień 2015
Word up łódź kwiecień 2015
 
Word up warszawa 2015
Word up warszawa 2015Word up warszawa 2015
Word up warszawa 2015
 
Statycznie czy dynamicznie? v.2.0
Statycznie czy dynamicznie? v.2.0Statycznie czy dynamicznie? v.2.0
Statycznie czy dynamicznie? v.2.0
 
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
 
Dokąd zmierza WordPress?
Dokąd zmierza WordPress?Dokąd zmierza WordPress?
Dokąd zmierza WordPress?
 

Similar to WordCamp Praga 2015

Gail villanueva add muscle to your wordpress site
Gail villanueva   add muscle to your wordpress siteGail villanueva   add muscle to your wordpress site
Gail villanueva add muscle to your wordpress site
references
 
Your Custom WordPress Admin Pages Suck
Your Custom WordPress Admin Pages SuckYour Custom WordPress Admin Pages Suck
Your Custom WordPress Admin Pages Suck
Anthony Montalbano
 
10 Things Every Plugin Developer Should Know (WordCamp Atlanta 2013)
10 Things Every Plugin Developer Should Know (WordCamp Atlanta 2013)10 Things Every Plugin Developer Should Know (WordCamp Atlanta 2013)
10 Things Every Plugin Developer Should Know (WordCamp Atlanta 2013)
arcware
 

Similar to WordCamp Praga 2015 (20)

WordPress customizer for themes and more
WordPress customizer for themes and moreWordPress customizer for themes and more
WordPress customizer for themes and more
 
Building Potent WordPress Websites
Building Potent WordPress WebsitesBuilding Potent WordPress Websites
Building Potent WordPress Websites
 
WordPress 3.4 Theme Customizer
WordPress 3.4 Theme CustomizerWordPress 3.4 Theme Customizer
WordPress 3.4 Theme Customizer
 
Gail villanueva add muscle to your wordpress site
Gail villanueva   add muscle to your wordpress siteGail villanueva   add muscle to your wordpress site
Gail villanueva add muscle to your wordpress site
 
Image manipulation in WordPress 3.5
Image manipulation in WordPress 3.5Image manipulation in WordPress 3.5
Image manipulation in WordPress 3.5
 
Your Custom WordPress Admin Pages Suck
Your Custom WordPress Admin Pages SuckYour Custom WordPress Admin Pages Suck
Your Custom WordPress Admin Pages Suck
 
Theme customization
Theme customizationTheme customization
Theme customization
 
HTML5 New and Improved
HTML5   New and ImprovedHTML5   New and Improved
HTML5 New and Improved
 
Apostrophe (improved Paris edition)
Apostrophe (improved Paris edition)Apostrophe (improved Paris edition)
Apostrophe (improved Paris edition)
 
Unit testing zend framework apps
Unit testing zend framework appsUnit testing zend framework apps
Unit testing zend framework apps
 
Working With The Symfony Admin Generator
Working With The Symfony Admin GeneratorWorking With The Symfony Admin Generator
Working With The Symfony Admin Generator
 
Unit testing with zend framework PHPBenelux
Unit testing with zend framework PHPBeneluxUnit testing with zend framework PHPBenelux
Unit testing with zend framework PHPBenelux
 
Geek Moot '09 -- Smarty 101
Geek Moot '09 -- Smarty 101Geek Moot '09 -- Smarty 101
Geek Moot '09 -- Smarty 101
 
Uniface Lectures Webinar - Building Responsive Applications with Uniface: Dev...
Uniface Lectures Webinar - Building Responsive Applications with Uniface: Dev...Uniface Lectures Webinar - Building Responsive Applications with Uniface: Dev...
Uniface Lectures Webinar - Building Responsive Applications with Uniface: Dev...
 
How to make a WordPress theme
How to make a WordPress themeHow to make a WordPress theme
How to make a WordPress theme
 
The Settings API
The Settings APIThe Settings API
The Settings API
 
10 Things Every Plugin Developer Should Know (WordCamp Atlanta 2013)
10 Things Every Plugin Developer Should Know (WordCamp Atlanta 2013)10 Things Every Plugin Developer Should Know (WordCamp Atlanta 2013)
10 Things Every Plugin Developer Should Know (WordCamp Atlanta 2013)
 
PHPConf-TW 2012 # Twig
PHPConf-TW 2012 # TwigPHPConf-TW 2012 # Twig
PHPConf-TW 2012 # Twig
 
WordPress Theme Design and Development Workshop - Day 3
WordPress Theme Design and Development Workshop - Day 3WordPress Theme Design and Development Workshop - Day 3
WordPress Theme Design and Development Workshop - Day 3
 
WordPress basic fundamental of plugin development and creating shortcode
WordPress basic fundamental of plugin development and creating shortcodeWordPress basic fundamental of plugin development and creating shortcode
WordPress basic fundamental of plugin development and creating shortcode
 

More from Tomasz Dziuda

More from 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
 
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
 
Statycznie czy dynamicznie?
Statycznie czy dynamicznie?Statycznie czy dynamicznie?
Statycznie czy dynamicznie?
 
WordUp Gdynia - Jak tworzyć motywy przyjazne użytkownikom i programistom
WordUp Gdynia - Jak tworzyć motywy przyjazne użytkownikom i programistomWordUp Gdynia - Jak tworzyć motywy przyjazne użytkownikom i programistom
WordUp Gdynia - Jak tworzyć motywy przyjazne użytkownikom i programistom
 
Jak nadążyć za światem front-endu?
Jak nadążyć za światem front-endu?Jak nadążyć za światem front-endu?
Jak nadążyć za światem front-endu?
 

Recently uploaded

Russian Escort Abu Dhabi 0503464457 Abu DHabi Escorts
Russian Escort Abu Dhabi 0503464457 Abu DHabi EscortsRussian Escort Abu Dhabi 0503464457 Abu DHabi Escorts
Russian Escort Abu Dhabi 0503464457 Abu DHabi Escorts
Monica Sydney
 
在线制作约克大学毕业证(yu毕业证)在读证明认证可查
在线制作约克大学毕业证(yu毕业证)在读证明认证可查在线制作约克大学毕业证(yu毕业证)在读证明认证可查
在线制作约克大学毕业证(yu毕业证)在读证明认证可查
ydyuyu
 
原版制作美国爱荷华大学毕业证(iowa毕业证书)学位证网上存档可查
原版制作美国爱荷华大学毕业证(iowa毕业证书)学位证网上存档可查原版制作美国爱荷华大学毕业证(iowa毕业证书)学位证网上存档可查
原版制作美国爱荷华大学毕业证(iowa毕业证书)学位证网上存档可查
ydyuyu
 
Russian Call girls in Abu Dhabi 0508644382 Abu Dhabi Call girls
Russian Call girls in Abu Dhabi 0508644382 Abu Dhabi Call girlsRussian Call girls in Abu Dhabi 0508644382 Abu Dhabi Call girls
Russian Call girls in Abu Dhabi 0508644382 Abu Dhabi Call girls
Monica Sydney
 
一比一原版(Curtin毕业证书)科廷大学毕业证原件一模一样
一比一原版(Curtin毕业证书)科廷大学毕业证原件一模一样一比一原版(Curtin毕业证书)科廷大学毕业证原件一模一样
一比一原版(Curtin毕业证书)科廷大学毕业证原件一模一样
ayvbos
 
Indian Escort in Abu DHabi 0508644382 Abu Dhabi Escorts
Indian Escort in Abu DHabi 0508644382 Abu Dhabi EscortsIndian Escort in Abu DHabi 0508644382 Abu Dhabi Escorts
Indian Escort in Abu DHabi 0508644382 Abu Dhabi Escorts
Monica Sydney
 

Recently uploaded (20)

Russian Escort Abu Dhabi 0503464457 Abu DHabi Escorts
Russian Escort Abu Dhabi 0503464457 Abu DHabi EscortsRussian Escort Abu Dhabi 0503464457 Abu DHabi Escorts
Russian Escort Abu Dhabi 0503464457 Abu DHabi Escorts
 
Trump Diapers Over Dems t shirts Sweatshirt
Trump Diapers Over Dems t shirts SweatshirtTrump Diapers Over Dems t shirts Sweatshirt
Trump Diapers Over Dems t shirts Sweatshirt
 
在线制作约克大学毕业证(yu毕业证)在读证明认证可查
在线制作约克大学毕业证(yu毕业证)在读证明认证可查在线制作约克大学毕业证(yu毕业证)在读证明认证可查
在线制作约克大学毕业证(yu毕业证)在读证明认证可查
 
20240507 QFM013 Machine Intelligence Reading List April 2024.pdf
20240507 QFM013 Machine Intelligence Reading List April 2024.pdf20240507 QFM013 Machine Intelligence Reading List April 2024.pdf
20240507 QFM013 Machine Intelligence Reading List April 2024.pdf
 
原版制作美国爱荷华大学毕业证(iowa毕业证书)学位证网上存档可查
原版制作美国爱荷华大学毕业证(iowa毕业证书)学位证网上存档可查原版制作美国爱荷华大学毕业证(iowa毕业证书)学位证网上存档可查
原版制作美国爱荷华大学毕业证(iowa毕业证书)学位证网上存档可查
 
Real Men Wear Diapers T Shirts sweatshirt
Real Men Wear Diapers T Shirts sweatshirtReal Men Wear Diapers T Shirts sweatshirt
Real Men Wear Diapers T Shirts sweatshirt
 
20240509 QFM015 Engineering Leadership Reading List April 2024.pdf
20240509 QFM015 Engineering Leadership Reading List April 2024.pdf20240509 QFM015 Engineering Leadership Reading List April 2024.pdf
20240509 QFM015 Engineering Leadership Reading List April 2024.pdf
 
Power point inglese - educazione civica di Nuria Iuzzolino
Power point inglese - educazione civica di Nuria IuzzolinoPower point inglese - educazione civica di Nuria Iuzzolino
Power point inglese - educazione civica di Nuria Iuzzolino
 
Nagercoil Escorts Service Girl ^ 9332606886, WhatsApp Anytime Nagercoil
Nagercoil Escorts Service Girl ^ 9332606886, WhatsApp Anytime NagercoilNagercoil Escorts Service Girl ^ 9332606886, WhatsApp Anytime Nagercoil
Nagercoil Escorts Service Girl ^ 9332606886, WhatsApp Anytime Nagercoil
 
Russian Call girls in Abu Dhabi 0508644382 Abu Dhabi Call girls
Russian Call girls in Abu Dhabi 0508644382 Abu Dhabi Call girlsRussian Call girls in Abu Dhabi 0508644382 Abu Dhabi Call girls
Russian Call girls in Abu Dhabi 0508644382 Abu Dhabi Call girls
 
Vip Firozabad Phone 8250092165 Escorts Service At 6k To 30k Along With Ac Room
Vip Firozabad Phone 8250092165 Escorts Service At 6k To 30k Along With Ac RoomVip Firozabad Phone 8250092165 Escorts Service At 6k To 30k Along With Ac Room
Vip Firozabad Phone 8250092165 Escorts Service At 6k To 30k Along With Ac Room
 
APNIC Updates presented by Paul Wilson at ARIN 53
APNIC Updates presented by Paul Wilson at ARIN 53APNIC Updates presented by Paul Wilson at ARIN 53
APNIC Updates presented by Paul Wilson at ARIN 53
 
20240508 QFM014 Elixir Reading List April 2024.pdf
20240508 QFM014 Elixir Reading List April 2024.pdf20240508 QFM014 Elixir Reading List April 2024.pdf
20240508 QFM014 Elixir Reading List April 2024.pdf
 
一比一原版(Curtin毕业证书)科廷大学毕业证原件一模一样
一比一原版(Curtin毕业证书)科廷大学毕业证原件一模一样一比一原版(Curtin毕业证书)科廷大学毕业证原件一模一样
一比一原版(Curtin毕业证书)科廷大学毕业证原件一模一样
 
Story Board.pptxrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr
Story Board.pptxrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrStory Board.pptxrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr
Story Board.pptxrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr
 
"Boost Your Digital Presence: Partner with a Leading SEO Agency"
"Boost Your Digital Presence: Partner with a Leading SEO Agency""Boost Your Digital Presence: Partner with a Leading SEO Agency"
"Boost Your Digital Presence: Partner with a Leading SEO Agency"
 
20240510 QFM016 Irresponsible AI Reading List April 2024.pdf
20240510 QFM016 Irresponsible AI Reading List April 2024.pdf20240510 QFM016 Irresponsible AI Reading List April 2024.pdf
20240510 QFM016 Irresponsible AI Reading List April 2024.pdf
 
Microsoft Azure Arc Customer Deck Microsoft
Microsoft Azure Arc Customer Deck MicrosoftMicrosoft Azure Arc Customer Deck Microsoft
Microsoft Azure Arc Customer Deck Microsoft
 
2nd Solid Symposium: Solid Pods vs Personal Knowledge Graphs
2nd Solid Symposium: Solid Pods vs Personal Knowledge Graphs2nd Solid Symposium: Solid Pods vs Personal Knowledge Graphs
2nd Solid Symposium: Solid Pods vs Personal Knowledge Graphs
 
Indian Escort in Abu DHabi 0508644382 Abu Dhabi Escorts
Indian Escort in Abu DHabi 0508644382 Abu Dhabi EscortsIndian Escort in Abu DHabi 0508644382 Abu Dhabi Escorts
Indian Escort in Abu DHabi 0508644382 Abu Dhabi Escorts
 

WordCamp Praga 2015