Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Embracing the Customizer
Search
Luke Williams
February 21, 2013
Programming
830
2
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Embracing the Customizer
Luke Williams
February 21, 2013
More Decks by Luke Williams
See All by Luke Williams
Useful Mental Models For Product Engineers
redroot
0
170
Genetic Algorithms
redroot
0
110
Unity Talk
redroot
0
60
Neural Networks - a brief introduction by a fan
redroot
0
570
Web Accessibility in 2019
redroot
0
580
redux-saga
redroot
0
690
Redis - Lightning Talk @ RefME
redroot
0
840
Wordpress Multitenancy
redroot
0
1.5k
Other Decks in Programming
See All in Programming
ジョジョの世界をXRで再現する
mofurune
0
150
見えないものを探る要求要件定義に必要な基本的思考 / invisible-requirement-thinking
minodriven
15
8.2k
ハーネス設計入門 〜 基礎知識の整理から実務へのステップアップ 〜
kinopeee
22
22k
C#の現在地 進化の歴史と、AI時代の.NET Everywhere
neuecc
5
5.1k
AI が書く Go コードの品質を劇的に向上させる Linter: “declscope”
mpyw
0
490
[Rails World 2026] Durable orchestration on Rails: from continuation to workflow
palkan
1
710
Workers Cache を知る
syumai
0
350
設計次第でAIコードの読む量は減らせる / designing-for-code-reading
minodriven
34
16k
パスワード再設定メールのURLについて知っておこう
uyuki234
0
130
個人開発者よ、Honoを使え(おじさんver)
tanahiro2010
2
240
Embedded Swiftで作る自作USBデバイス によるiOSデバイスの自動テスト / iOSDC Japan 2026 glassfiber
glassfiber
0
330
コードレビューのボトルネックを"する側"と"される側"の両面から解消する
yub0n
2
1.6k
Featured
See All Featured
Learning to Love Humans: Emotional Interface Design
aarron
275
41k
Bash Introduction
62gerente
615
220k
The Straight Up "How To Draw Better" Workshop
denniskardys
239
140k
Build The Right Thing And Hit Your Dates
maggiecrowley
39
3.5k
We Are The Robots
honzajavorek
0
390
Producing Creativity
orderedlist
PRO
348
41k
Agile that works and the tools we love
rasmusluckow
331
22k
DevOps and Value Stream Thinking: Enabling flow, efficiency and business value
helenjbeal
2
410
Optimizing for Happiness
mojombo
378
71k
Docker and Python
trallard
47
4.2k
4 Signs Your Business is Dying
shpigford
187
23k
Impact Scores and Hybrid Strategies: The future of link building
tamaranovitovic
0
450
Transcript
Embracing The Customizer @luke_redroot red-root.com
None
Then (April 2012)
Now
None
DEMO
Sections
Settings
Controls text text checkbox
# mytheme/functions.php require("lib/customizer.php"); # mytheme/lib/customizer.php add_action("customize_register",function($wpc){ // code here });
// PHP 5.3 add_action("customize_register",function($wpc){ // code here }); // equivalent
to add_action("customize_register","named_function"); function named_function($wpc){ // code here }
add_action("customize_register",function($wpc){ $wpc->add_section(); $wpc->add_setting(); $wpc->add_control(); });
$wpc->add_section("heading_section",array( "title" => "My Heading Section", "priority" => 35, "capability"
=> "edit_theme_options" ));
$wpc->add_setting("mytheme_options[heading]",array( "default" => "Default Heading", "type" => "option", "capability" =>
"edit_theme_options" ));
# mytheme/lib/customizer.php $wpc->add_setting("mytheme_options[heading]",array( "default" => "Default Heading", "type" => "option"
)); # mytheme/index.php $options = get_option("mytheme_options"); $heading = $options["heading"];
# mytheme/lib/customizer.php $wpc->add_setting("mytheme_options_heading",array( "default" => "Default Heading", "type" => "option",
)); # mytheme/index.php $heading = get_option("mytheme_options_heading");
# mytheme/lib/customizer.php $wpc->add_setting("heading",array( "default" => "Default Heading", "type" => "theme_mod"
)); # mytheme/index.php $heading = get_theme_mod("heading");
$wpc->add_control(“mytheme_options[heading]",array( "label" => "Custom Heading", "section" => "heading_section", "setting" =>
"mytheme_options[heading]", "type" => "text" ));
# text $wpc->add_control("mythemes_option[heading]",array( "label" => "Custom Heading", "section" => "heading_section",
"setting" => "mytheme_options[heading]", "type" => "text" )); # checkbox $wpc->add_control("mytheme_options[heading]",array( "label" => "A Checkbox", "section" => "heading_section", "setting" => "mytheme_options[heading]", "type" => "checkbox" ));
# select $wpc->add_control("mytheme_options[heading]",array( "label" => "A Checkbox", "section" => "heading_section",
"setting" => "mytheme_options[heading]", "type" => "select", "choices" => array( "value 1" => "text for 1", "value 2" => "text for 2" ) )); # radio $wpc->add_control("mytheme_options[heading]",array( "label" => "A Checkbox", "section" => "heading_section", "setting" => "mytheme_options[heading]", "type" => "radio", "choices" => array( "value 1" => "text for 1", "value 2" => "text for 2" ) ));
add_action("customize_register",function ($wpc){ $wpc->add_section("heading_section",array( "title" => "My Heading Section", "priority" =>
0 )); $wpc->add_setting("mytheme_options[heading]",array( "default" => "Default Heading", "type" => "option", "capability" => "edit_theme_options" )); $wpc->add_setting("mytheme_options[blue]",array( "default" => "false", "type" => "option", "capability" => "edit_theme_options" )); $wpc->add_setting("mytheme_options[subheading]",array( "default" => "Hot Fuzz", "type" => "option", "capability" => "edit_theme_options" )); $wpc->add_control("mytheme_options[heading]",array( "label" => "Custom Heading", "section" => "heading_section", "setting" => "mytheme_options[heading]", "type" => "text" )); $wpc->add_control("mytheme_options[blue]",array( "label" => "Make It Blue?", "section" => "heading_section", "setting" => "mytheme_options[blue]", "type" => "checkbox" )); $wpc->add_control("mytheme_options[subheading]",array( "label" => "subheading?", "section" => "heading_section", "setting" => "mytheme_options[subheading]", "type" => "select", "choices" => array( "Hot Fuzz" => "Hot Fuzz", "Shaun of the Dead" => "Shaun of the Dead", "The World Ends" => "The World Ends" ) )); });
# Remove default sections $wpc->remove_section("title_tagline"); $wpc->remove_section("static_front_page");
$colour_control = new WP_Customize_Color_Control( $wpc, 'mytheme_options[blue]', array( 'label' => "Heading
Color", 'section' => 'heading_section', 'settings' => 'mytheme_options[blue]', ) ); $wpc->add_control($colour_control);
$image_control = new WP_Customize_Image_Control( $wpc, 'mytheme_options[image]', array( 'label' => "Heading
Image", 'section' => 'heading_section', 'settings' => 'mytheme_options[image]', ) ); $wpc->add_control($image_control);
class WP_Customize_Category_Control extends WP_Customize_Control { public $type = 'dropdown-category'; public
function render_content() { $dropdown = wp_dropdown_categories(array( "selected" => $this->value(), "name" => $this->settings["default"]->id, "echo" => 0 )); $dropdown = str_replace( '<select', '<select '.$this->get_link(), $dropdown); ?> <label> <p class="customize-control-title"><?php echo esc_html($this->label);?></p> <div> <?php echo $dropdown; ?> </div> </label> <?php } } gist.github.com/redroot/4997131
# use postMessage transport $wpc->add_setting("mytheme_options[heading]",array( "default" => "Default Heading", "type"
=> "option", "capability" => "edit_theme_options", "transport" => "postMessage" ));
# mytheme/lib/customizer.php if($wpc->is_preview() && !is_admin()){ add_action("wp_footer", function(){ get_template_part("lib/views/customize_preview_js.php"); }); }
# mytheme/lib/views/customizer_previews_js.php <script> (function($){ wp.customize('mytheme_options[heading]',function(value){ value.bind(function(to){ $('h1').html(to); }); }); })(jQuery); </script>
CORESITES
Resources: https://github.com/redroot/wp-customizer-example http://ottopress.com/2012/how-to-leverage-the-theme-customizer-in- your-own-themes/ http://ottopress.com/2012/theme-customizer-part-deux-getting-rid-of- options-pages/ http://ottopress.com/2012/making-a-custom-control-for-the-theme- customizer/ https://codex.wordpress.org/Theme_Customization_API
Thanks! @luke_redroot red-root.com