Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
WordPressテーマ開発再入門 ~ Do you Know Customizer ~
Search
Toro_Unit (Hiroshi Urabe)
January 13, 2018
Technology
370
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
WordPressテーマ開発再入門 ~ Do you Know Customizer ~
WordBench Nagoya 登壇資料です。
Toro_Unit (Hiroshi Urabe)
January 13, 2018
More Decks by Toro_Unit (Hiroshi Urabe)
See All by Toro_Unit (Hiroshi Urabe)
ブロックテーマ、WordPress でウェブサイトをつくるということ / 2026.02.07 Gifu WordPress Meetup
torounit
0
740
ブロックテーマでサイトをリニューアルした話 / 2026-01-31 Kansai WordPress Meetup
torounit
0
600
ブロックテーマとこれからの WordPress サイト制作 / nishinomiya.dev@2025-12-21
torounit
1
290
ブロックテーマとこれからの WordPress サイト制作 / Toyama WordPress Meetup Vol.81
torounit
0
810
ブロックテーマ時代における、テーマの CSS について考える Toro_Unit / 2025.09.13 @ Shinshu WordPress Meetup
torounit
0
820
ブロックテーマでサイトリニューアルした話 / Toro_Unit / 2025.04.12 @ Shinshu WordPress Meetup
torounit
1
350
Cloudflare Meetup Nagano Vol.3
torounit
1
180
僕が考える 「HTML サイトを WordPress にする」話 / 2023-11-05 Kansai WordPress Meetup
torounit
9
8.8k
Cloudflare Pages に入門してみた / 2023-10-14 Cloudflare Meetup Nagano Vol.2
torounit
2
2.3k
Other Decks in Technology
See All in Technology
Genie Ontologyは銀の弾丸かを考える / Is Genie Ontology a Silver Bullet?
nttcom
0
390
関数型の考えを TypeScript に持ち込んで、テストしやすい純粋関数を増やす / Pure at the Core, Effects at the Edge: Bringing Functional Thinking into TypeScript
kaminashi
2
130
AI Driven AI Governance
pict3
0
480
ファミコンでPHPを動かす / PHP on the Famicom
tomzoh
2
350
「早く出す」より「事業に効く」 ── 顧客の業務サイクルから逆算するAI時代の二重ループ開発と「変化の設計者」 / devsumi2026
rakus_dev
1
360
「守りたい体験」を渡すだけで E2E を生成させられるようになった話
hinac0
0
180
CIで使うClaude
iwatatomoya
0
290
SRE本の知られざる名シーン / The Hidden Gems of Google SRE Book
nari_ex
1
420
AIと共生する開発者プラットフォーム:バクラクのモノレポ×マイクロサービス基盤
sakajunquality
2
3.7k
DatabricksにおけるMCPソリューション
taka_aki
1
270
「最後に責任を取るのはチーム」— 人間のPRレビューを最小化してアップデートしたメンタルモデル
jnishime_dresscode
0
880
Data + AI Summit 2026 イベントレポート: 「AIがビジネスで意思決定するデータ基盤」へ
nek0128
0
260
Featured
See All Featured
4 Signs Your Business is Dying
shpigford
187
22k
Accessibility Awareness
sabderemane
1
160
AI Search: Implications for SEO and How to Move Forward - #ShenzhenSEOConference
aleyda
1
1.3k
Digital Ethics as a Driver of Design Innovation
axbom
PRO
1
340
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
31
10k
SEO in 2025: How to Prepare for the Future of Search
ipullrank
3
3.6k
Stop Working from a Prison Cell
hatefulcrawdad
274
21k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
31
3.3k
The Impact of AI in SEO - AI Overviews June 2024 Edition
aleyda
5
1.1k
How Software Deployment tools have changed in the past 20 years
geshan
0
34k
How Fast Is Fast Enough? [PerfNow 2025]
tammyeverts
3
650
Leading Effective Engineering Teams in the AI Era
addyosmani
9
2.1k
Transcript
WordPressςʔϚ։ൃ࠶ೖ Do you Know Customizer? Toro_Unit @2018.01.13 / WordBench Nagoya
1
Toro_Unit ෦ ߛ (͏Β ͻΖ͠) HAMWORKS • Frontend Engineer •
Plugin and Theme Developer Github: @torounit Twitter: @Toro_Unit Facebook: fb.me/torounit Blog: https://torounit.com 2
ࡳຈͷձࣾͰϦϞʔτϫʔΫͯ͠·͢ 3
4
5
6
Plugins and Themes • Custom Post Type Permalinks • Simple
Post Type Permalinks • Powerful Posts Per Page (PPPP) • Responsive Slide • Vanilla • and more... 7
Contribution • WordBench ϞσϨʔλʔ • WordCamp Kyoto 2017 ࣮ߦҕһ
• WordCamp Tokyo 2017 Speaker • WordBench.org • VCCW Team • etc... 8
ݝদຊࢢ͔Β͖·ͨ͠ɻ1 • ϫΠϯ͓͍͍͠Αɻ • ͦΖͦΖڶഴ͓͍͍͠Αɻ 1 https://commons.wikimedia.org/wiki/File: 130608_Matsumoto_Castle_Matsumoto_Nagano_pref_Japan02bs4.jpg Author: 663highland.
License: CC BY 2.5 9
10
WordBench Nagano Special 2018!!! • 2/3 দຊͲ͏ͧɻ • 1/20 Δ͔ΒͲ͏ͧɻ
11
Agenda 1. WordFes ͷ෮शɻ 2. Customizer ͱ 3. UX ΛߴΊΔͨΊʹɻ
1. Selective Refresh 2. JavaScript API 12
0. WordFes ͷ෮शɻ 13
WordPress.org ςʔϚσΟ ϨΫτϦܝࡌςʔϚ ͱʁ • https://wordpress.org/themes/ • WordPress ͷཧը໘͔ΒΠϯε τʔϧɾߋ৽͕ग़དྷΔςʔϚୡɻ
• ςʔϚϨϏϡʔΛ௨ա͠ͳ͍ͱܝࡌ Ͱ͖ͳ͍ɻ 14
ςʔϚͷ࡞Γํɻ ެࣜͷυΩϡϝϯςʔγϣϯɻࠓͷͱ͜ Ζӳޠ͔͠ແ͍͚ͲɺίʔυͰͷղઆ ଟ͍ͷͰҙ֎ʹͳΜͱ͔ͳΔɻ • Theme Developer Handbook • https://developer.wordpress.org/
themes/ 15
ςʔϚϨϏϡʔΛ௨Βͳ͍͜ͱɻ • ΤεέʔϓͳͲ͕͞Ε͍ͯͳ͍ɻ੬ऑੑ͕༗ΔϞϊɻ • ϓϥάΠϯςϦτϦʔͷػೳɺϓϥάΠϯͰରԠ͢Δ͖ػ ೳ͕͍ͬͯΔϞϊɻ ༷ʑͳ͖·Γ͕͋Δɻ 16
Required – Theme Review Team • https://make.wordpress.org/themes/handbook/review/ required/ • ຊޠ༁
https://mirucon.github.io/required-ja/ 17
ϓϥάΠϯςϦτϦʔ • https://make.wordpress.org/themes/handbook/review/ required/explanations-and-examples/#plugin-territorys σβΠϯʹؔ࿈͠ͳ͍ػೳΛςʔϚʹؚΊ͍͚ͯͳ͍ɻ 18
ྫ • Analytics·ͨτϥοΩϯάͷαϙʔτ • SEOΦϓγϣϯ • ͓͍߹ΘͤϑΥʔϜ • ඇσβΠϯؔ࿈ͷϝλϘοΫε •
ϦιʔεΩϟογϯά • ཧྖҬͷμογϡϘʔυΟδΣοτ • ΧελϜߘλΠϓͱγϣʔτίʔυ • ιʔγϟϧϝσΟΞͷʮ͖ʯɺʮϑΥϩʔʯɺʮڞ༗ʯϘλϯ 19
Theme Unit Test ςʔϚϢχοτςετ - WordPress Codex ຊޠ൛ WYSIWYG ΤσΟλͰී௨ʹهࣄΛॻ͍ͨ
Βී௨ʹදࣔ͞ΕΔΑ͏ʹͪΌΜͱCSSΛ ॻ͘ɻ • ճΓࠐΈΩϟϓγϣϯ͖ը૾ɺΪϟ ϥϦʔ݁ߏΕ͕ͪɻ • ී௨ͷHTML͕classΛ͚ͣʹɺͪΌ Μͱදࣔग़དྷΕɺςʔϚΛม͑ͯ ͪΌΜͱදࣔͰ͖Δͣɻ 20
WordPressͰग़དྷΔ͜ͱΛͪΌΜͱग़དྷΔΑ͏ʹͭ͘Ζ͏ɻ • WordPressʹඪ४ࡌ͞Ε͍ͯΔͷ͕ͪΌΜͱಈ͘Α͏ʹ ͢Δɻ • υΩϡϝϯςʔγϣϯɺαϙʔτͷίετ͕ݮΔɻ • ຊʹग़དྷΔͬͯॻ͍ͯ͋ΔͷʹɾɾɾͬͯͳΔͷɺ ͍ͮΒ͞ͱγεςϜͷෆ৴ײΛੜΉɻ 21
Theme Check Theme Check — WordPress Plugins 22
νΣοΫ߲ • ίʔσΟϯάϧʔϧ • ΤεέʔϓɾαχλΠζ͞Ε͍ͯͳ͍ • ඇਪͳؔɾςϯϓϨʔτλά • ඞਢͷ class
ͷଘࡏɻ • etc... 23
ͦ͏͍ͬͯҊ݅Ͱ ༷ʑͳཁٻ͕ɻ 24
ཧը໘͔Β͍Ζ͍Ζม ߋग़དྷΔΑ͏ʹ͍ͨ͠ɻ 25
Contents 1. WordFes ͷ෮शɻ 2. Customizer ͱ 3. UX ΛߴΊΔͨΊʹɻ
26
ࠓͷຊɻ 27
1. Customizer API 28
29
The Customize API Theme Options – The Customize API |
Theme Developer Handbook | WordPress Developer Resources • ΧελϚΠβʔʹઃఆΛՃ͢ΔͨΊͷAPI. • WordPress 3.4 ͰՃ͞Εͨػೳɻ • WordPress 4.5 ͰSelective Reflesh͕Ճɻ • WordPress 4.9 Ͱ༧ެ։ͳͲɺߋʹڧԽ͞ΕΔɻ 30
࣮ 31
function my_customize_register( WP_Customize_Manager $wp_customize ) { //ηΫγϣϯͷՃ $wp_customize->add_section( 'jumbotron', array(
'title' => 'jumbotron', ) ); //ઃఆͷΦϓγϣϯ $wp_customize->add_setting( 'jumbotron_title', array( 'default' => 'Hello World!', 'sanitize_callback' => 'esc_html', )); // ϑΥʔϜͷՃ $wp_customize->add_control( 'jumbotron_title', array( 'section' => 'jumbotron', 'label' => 'Jumbotron Title', )); } add_action( 'customize_register', 'my_customize_register' ); 32
33
34
ςϯϓϨʔτͰͷදࣔ <h1> <?php echo esc_html( get_theme_mod( 'jumbotron_title' ) ); ?>
</h1> 35
͜Μ͚ͩʂ ΧελϜϑΟʔϧυΑΓ؆୯͡Όͳ͍Ͱ͔͢ʁ 36
DEMO torounit/customizer-demo 37
࣮ग़དྷΔϑΟʔϧυͷλΠϓ • ςΩετϑΟʔϧυ(σϑΥϧτ) • νΣοΫϘοΫε (checkbox) • ϥδΦϘλϯ (radio) •
ηϨΫτϘοΫε (select) • ςΩετϘλϯ (textarea) • ݻఆϖʔδ (doropdown-pages) 38
39
$wp_customize->add_control( 'sample_radio', array( 'label' => 'Radio', 'section' => 'sample', 'type'
=> 'radio', 'choices' => array( 'option1' => 'Option 1', 'option2' => 'Option 2', ), ) ); $wp_customize->add_setting( 'sample_select', array( 'sanitize_callback' => 'esc_html', 'default' => 'option1', ) ); 40
type ʹ ͜ΕҎ֎ͷΛ͢ͱɺinputλάͷtypeଐੑ͕ઃఆ ͞ΕΔɻ $wp_customize->add_setting( 'sample_date', array( 'sanitize_callback' => 'esc_html',
'default' => '2018-01-31', ) ); $wp_customize->add_control( 'sample_date', array( 'label' => 'Date', 'section' => 'sample', 'type' => 'date', ) ); 41
add_control ʹɺ WP_Customize_Control ͷαϒΫϥ εΛͯ͠ɺߋʹ֦ுՄೳɻ 42
built-inͷ WP_Customize_Control ͷαϒΫϥεྫɻ • WP_Customize_Upload_Control • WP_Customize_Image_Control • WP_Customize_Cropped_Image_Control •
WP_Customize_Color_Control • WP_Customize_Date_Time_Control • WP_Customize_Code_Editor_Control 43
44
WP_Customize_Control Λܧঝͨ͠ΫϥεΛࣗ࡞͢Εɺࣗ ͳΓͷϑΟʔϧυΛఆٛग़དྷΔɻ 45
• Twentysevnteen ͷτοϓϖʔδͷΧελϚΠζ ΧελϚ ΠβʔͰͷ࣮ɻ • Lightning • s56bouya/nishiki: WordPress
theme Nishiki. • Snow Monkey – 100%GPL ͷϝσΟΞ/ϒϩά͚ WordPress ༗ྉςʔϚ 46
• ΧελϜϑΟʔϧυ/Option ϖʔδͳͲͰ͍ͬͯͨͷ͕ ͋ΔఔΧελϚΠβʔʹҠߦ͢ΔͷͰɻ • ϓϨϏϡʔͰݟͳ͕Β࿔ΕΔͬͯͷΓڧ͍ɻ 47
Contents 1. WordFes ͷ෮शɻ 2. Customizer ͱ 3. UX ΛߴΊΔͨΊʹɻ
48
2. UX ΛߴΊΔɻ 49
Customizer ͷ • ϓϨϏϡʔͷiframeΛؙ͝ͱߋ৽͢ΔͷͰ͍ɻ • ઃఆΛ͙͢ʹ͍ͬͨ͡Γ͢ΔͱϓϨϏϡʔʹग़ͳ͍͜ͱ ɻ 50
2-1. Selective Refresh 51
Selective Refresh ͱ • Ajax Λͬͯ෦తʹHTMLΛߋ ৽ɻ • Selective Refresh
in the Customizer – Make WordPress Core • ԖචͷϚʔΫ͕ग़Δͷ͕ҹɻ 52
function my_jumbotron_lead() { echo get_theme_mod( 'jumbotron_lead' ); } function my_customize_register(
WP_Customize_Manager $wp_customize ) { $wp_customize->add_setting( 'jumbotron_lead', array( 'sanitize_callback' => 'esc_html', 'transport' => 'postMessage', // JSͰߋ৽͢ΔΑ͏ʹɻ ) ); $wp_customize->add_control( 'jumbotron_lead', array( 'section' => 'jumbotron', )); //Selective Refresh $wp_customize->selective_refresh->add_partial( 'jumbotron_lead', array( 'selector' => '.jumbotron .lead', 'render_callback' => 'my_jumbotron_lead', //ςϯϓϨʔτλάΛࢦఆɻ ) ); } add_action( 'customize_register', 'my_customize_register' ); 53
෦తʹHTML͕ஔ͖ΘΔɻ • render_callback ʹࢦఆ͢ΔؔΛɺͪΌΜͱઃܭ͢Εɺ ςϯϓϨʔτλάͱͯ͠͏͜ͱग़དྷΔɻ 54
2-2. JavaScript API 55
JavaScript Ͱૢ࡞Մೳɻ 56
function my_customize_preview_js() { wp_enqueue_script( 'my-customize-preview', get_template_directory_uri() . '/customize-preview.js', array( 'customize-preview'
), false, true ); } add_action( 'customize_preview_init', 'my_customize_preview_js' ); 57
ྫɿJavaScriptͰૢ࡞ͯ͠ɺߋʹߴʹɻ (function( $ ) { wp.customize( 'jumbotron_lead', function( value )
{ value.bind( function( to ) { $( '.jumbotron .lead' ).text( to ); } ); } ); })( jQuery ); 58
JavaScript API Λ͏͖έʔε • Selective Refresh ͕ਏ͍ɻ • ଐੑͳͲɺHTMLΛͦͷ··ஔ͖͑ΔΘ͚Ͱແ͍έʔε. •
Selective Refresh ͚ͩͩͱਏ͍ɻ • ίϯςϯπεϥΠμʔͳͲ͕ೖ͍ͬͯΔέʔεɻ • JSͷঢ়ଶΛ࠶ߋ৽ɺ࠶ॳظԽͳͲ͕ඞཁͳέʔεɻ • DRY ͳײ͡ͰJSΛॻ͘ʹ͍Ζ͍Ζࢼߦࡨޡ͕ඞཁɻ 59
JS ͰؤுΕ͍Ζ͍Ζग़དྷΔɻ • ΊͬͪΌେม͚ͩͲɾɾɾɻ 60
͍Ͳ͜Ζྫɻ 61
DEMO torounit/fesdemo ίϯςϯπεϥΠμʔΛςʔϚΧελϚΠβʔͰมߋग़དྷΔΑ͏ ʹɻ 62
• Twentysevnteen Selective Refresh ʹରԠɻ 63
݁ߏେมɻ • ಘʹ Serective Refresh JavaScript Λ৮Γग़͢ͱେมɻ • ͪΌΜͱ࡞ͬͨϞϊΛίϯϙʔωϯτతʹ͍ճ͢ͷ͕ϕ
λʔɻ • ΧελϚΠβʔ൛ͷACFΈ͍ͨͳϠπ͕ग़Δؾ͢Δɻ • ࠓ͕νϟϯε͔͠Εͳ͍ɻ 64
WordPress ͕ࡢྗΛೖΕͨϙΠϯτͷͻͱͭɻ • Gutenberg ͦ͏͚ͩͲɺWordPressͷUX͕େ͖͘มΘΖ͏ͱ ͍ͯ͠Δɻ • ϏδϡΞϧͰΈͨ··࿔ΕΔͷͭΑ͍ɻ • Ϣʔβʔ͕ΧελϚΠβʔΛ৮Δػձ૿͑Δͣɻ
• ṖͷઃఆϖʔδΛ࡞ͬͨΓɺṖͷΧελϜϑΟʔϧυΛ࡞ͬͯ ͍ΔͱɺʮσϑΥϧτςʔϚͱ͔ͳΒͰ͖Δͷʹɾɾɾʯͬ ͯͳΔͦ͏ԕ͘ͳ͍ʁ 65
WordPress ͷϢʔβʔͷϑΥʔΧεྑ͞ͷ ͻͱͭɻ దࡐదॴͰɺWordPressͷඒຯ͠͞ΛҾ͖ग़͢Α͏ͳઃܭ͕େ ࣄʹͳΔؾ͢Δɻʢئ͔͠Εͳ͍ʣ ͱΓ͋͑ͣWEBαΠτΛͱ͍͏બࢶ͕૿͖͑ͯͨҎ্ɺΘ͟ Θ͟WordPressΛબͿཧ༝ɺΧελϚΠζੑͱ͔ॊೈੑͩͬ ͨΓɻཁٻεΩϧͱWordPressͷཧղߴ·ΔͷͰʁ 66
·ͱΊɻ • ·ͣຊମͷػೳΛͪΌΜͱ͍ͦ͏ɻ • ͍͍ͩͨͷ͜ͱɺTheme Developer Handbook ʹࡌͬͯ ΔͷͰɺಡ͏ɻ •
ಡॻձͱ͔ʹͨ͠Βָ͍͠Μ͡Όແ͍Ͱ͠ΐ͏͔ʁ • _s σϑΥϧτςʔϚ ( Twenty γϦʔζ ) ΛಡΉͱ͍Ζ͍Ζ ൃݟ͕ଟ͍ɻTheme Development Examples 67
Thanks! Github: @torounit Twitter: @Toro_Unit Facebook: fb.me/torounit Blog: https://torounit.com 68