
ติดตั้ง XAMPP บน macOSX
เปลี่ยนค่า DocumentRoot เป็นแฟ้มที่เราต้องการทำงาน (ไม่เปลี่ยนก็ได้)
== สำหรับคนใช้ Windows ข้ามไป Lecture ที่ 4 ได้เลยครับ ==
ปรับค่าไฟล์ในการอัพโหลดรูป ให้ WordPress ของเราอัพโหลดไฟล์ได้ใหญ่ขึ้น
ตั้งค่า upload_max_filesize ใน php.ini เป็นค่าที่เราต้องการ
ตั้งค่ารหัสผ่านให้กับผู้ใช้งานใน phpMyAdmin
ติดตั้ง NodeJS และ NPM
สร้างฐานข้อมูลชื่อ wpcourse ใน phpMyAdmin
== สำหรับคนใช้ macOSX ข้ามไป Lecture ที่ 5 ได้เลยครับ ==
ปรับค่าไฟล์ในการอัพโหลดรูป ให้ WordPress ของเราอัพโหลดไฟล์ได้ใหญ่ขึ้น
ตั้งค่า upload_max_filesize ใน php.ini เป็นค่าที่เราต้องการ
ตั้งค่ารหัสผ่านให้กับผู้ใช้งานใน phpMyAdmin
ติดตั้ง NodeJS และ NPM
สร้างฐานข้อมูลชื่อ wpcourse ใน phpMyAdmin
เรียนรู้การสร้าง Theme ด้วยไฟล์เพียงแค่ 2 ไฟล์
การเขียน header comment ในไฟล์ style.css เพื่อให้ WordPress อ่านค่าได้
สร้างไฟล์ index.php เพื่อทดสอบ
ใช้ Theme boilerplate ที่ผมสร้างขึ้นก็จะช่วยเขียน theme WordPress ได้เร็วและง่ายขึ้นครับ
และตัวนี้เป็นตัวที่ผมใช้งานเองด้วยทุกงานที่ทำเว็บไซต์ส่งลูกค้า
การเรียนรู้ที่ดีต้องลงมือทำครับ หาเว็บต้นแบบมาลองฝึกๆฝีมือการเขียนโปรแกรมดูก็จะช่วยได้มากครับ
ขอขอบคุณเว็บไซต์สตาร์บัคที่เป็นต้นแบบการจัดวาง layout ในคอร์สเรียนนี้ครับ
ทุกท่านสามารถกดเข้าไปดูไฟล์งานออกแบบทุกหน้าบน Figma ในแท็บ Resources ได้เลยครับ
หน้าแรกจะใช้เวลานานหน่อยเพราะจะไล่ขึ้นโครงตั้งแต่แรกสุดเลย เผื่อเป็นประโยชน์สำหรับคนไม่เคยใช้ Figma มาก่อนครับ
ไฟล์รูปทั้งหมดแนบมาให้แล้วครับ
--
ส่วนค่าสีต่างๆที่ใช้อยู่ในไฟล์ Figma ที่แนบให้ใน resources ของวิดีโอที่แล้วเลยครับ
เขียว รหัส : #00704a
ดำ รหัส : #000000
เทาเข้ม : #888888
เทาอ่อน : #dfdfdf
ติดตั้ง Twitter Bootstrap ลงในธีมของเรา
แนะนำการใช้งาน SASS เพราะจะช่วยให้เราเขียน code ได้เร็วขึ้นมากครับ
- คอร์สนี้คงไม่ลงลึกเรื่อง CSS/SASS มาก เพราะไม่ค่อยเกี่ยวกับ WordPress เท่าไหร่ครับ
ติดตั้ง livereload จะช่วยให้เราไม่ต้องเขียนโค้ดแล้วมากด refresh ที่ browser ครับ
เพราะการที่เราเขียนโค้ดแล้วกด save ตัว browser (ที่ connect กับ livereload แล้ว) จะ auto-refresh ให้ทันที สะดวกมากๆ
เริ่มเขียน code กันแล้วครับ หลังจากผ่านมานานไม่เริ่มสักที ผ่าม!
เราจะเริ่มเขียน HTML ส่วนที่เป็นพื้นฐานอย่างหน้า Homepage แล้วค่อยไล่เก็บ CSS ไปทีละหน้าแบบนี้ครับ
เขียน CSS ให้กับส่วนหัวของเว็บไซต์ (header) ครับ ที่ header นี้ผมจะใช้ flexbox เป็นหลัก
เผื่อช่วยให้คนที่ไม่เคยเขียน CSS Flexbox มา พอคุ้นเคยบ้างว่ามันคืออะไรใช้งานอย่างไรครับ
เขียน CSS ให้กับส่วนแสดงข้อมูลของหน้าแรก (homepage)
layout ของหน้าแรกนี้ไม่ยากครับ จัดนิดหน่อยก็สามารถออกมาเป็นโครงที่สวยงามพร้อมใช้ได้แล้ว ต้องขอขอบคุณ Bootstrap ที่ช่วยทำเรื่อง row และ column ให้เรา
เขียน CSS ให้กับตัว footer ของเว็บไซต์
สาเหตุที่เขียน header กับ footer ก่อน เป็นเพราะมันส่งผลกับทุกหน้าที่จะแสดงครับ พอเขียนเสร็จแล้วก็ดูมีกำลังใจ เวลาสร้างหน้าใหม่จะได้ไปโฟกัสแค่เฉพาะส่วนเนื้อหาของหน้านั้นได้เลย สำหรับ footer นี้เราใช้ row และ columns ของ Bootstrap โดยจะเขียนทุกอย่างง่ายและเร็วกว่า Flexbox ในส่วนของ header ครับ
จบหน้าแรกอย่างสวยงาม (ยังไม่ต้องสนใจ responsive นะครับ)
เก็บรายละเอียดด้าน usability กันอีกสักหน่อยก็ดูเรียบร้อยแล้วครับ
ใส่รูปจริงที่เราเตรียมไว้ลงในธีมกัน ซึ่งในคลิปนี้เราจะลองเปลี่ยนที่หน้าแรกกันก่อนครับ
เราจะมาใช้งาน get_template_directory_uri() ซึ่งเราจะได้ใช้งานบ่อยมากๆเมื่อเขียนธีมเอง
หรือการ refactor code ของหน้าแรกให้เป็นระเบียบมากขึ้น
เราจะมาใช้ฟังก์ชันของ WordPress ที่ชื่อว่า get_header, get_footer และ get_template_part ในการจัดการครับ
สร้าง Page Template ไว้ใช้สำหรับหน้าอื่นๆในเว็บไซต์
บ่อยครั้งที่ลูกค้าอยากได้หน้าพิเศษเช่น หน้า countdown, หน้า landing page หรือหน้า campaign promotion ฯลฯ ซึ่งมีการออกแบบที่ต่างไปจากหน้าอื่นๆบนเว็บไซต์ของเรา จะทำยังไงดีล่ะให้หน้าที่สร้างใหม่นี้ไม่กระทบกับโครงหน้าหลักเดิมของธีมที่เรามีอยู่
Page Template อาจช่วยคุณได้ครับ เป็นยังไงไปลองดูกัน
ผมออกแบบหน้า promotion ใน figma มาให้เรียบร้อยแล้วครับ
เดี๋ยวเราจะมาดูกันว่าหน้า promotion จะต้องทำอะไรบ้าง โครงสร้างที่เรากำลังจะเขียนเป็นยังไงไปดูกัน
เริ่มเขียน HTML ของหน้า promotion (Page Template)
ไปสร้าง page ใหม่ที่หลังบ้านของ WordPress ก่อนครับ ชื่อ Promotion
จากนั้นเลือก Template (ในส่วน Page Attributes) เป็น Promotion ครับ
ตกแต่งหน้าตาของหน้า promotion ให้สวยงามกันสักหน่อยครับ
อย่าลืมสร้างไฟล์ sass ไฟล์ใหม่(ชื่อ _promotion.scss) แล้วเพิ่มเข้าไปใน style.scss นะครับ
พอเพิ่มแล้วก็ปิดตัว command line ที่รันอยู่ แล้วพิมพ์ npm run dev หรือ yarn dev เพื่อรันอีกครั้งครับ
เสริมเล็กน้อยครับ ถ้าเราเปลี่ยนใน Settings > Permalink เป็นอะไรก็ตามที่มีคำว่า %postname% เราจะสามารถแก้ไข url slug ของหน้าแต่ละหน้าที่สร้างขึ้นได้ครับ อย่างเช่นในวิดีโอนี้จะแนะนำการเปลี่ยน url ของหน้าเป็นคำที่อยากจะใช้ได้เอง
เผื่อบางคนต้องการเปลี่ยน url slug ให้ดันอันดับเรื่อง SEO ครับ
มาดูการออกแบบหน้า Contact US กันครับ หน้านี้ไม่ยากเลย และจะมีแบบฟอร์มให้ผู้ใช้งานเข้ามากรอกข้อมูลส่งหาเราได้ด้วยครับ ซึ่งตรงนี้เดี๋ยวผมจะใช้ Contact Form 7 เข้ามาร่วมกับธีมที่เราเขียน รอติดตามกันในคลิปหลังๆหน่อยนะครับ
เราจะสร้าง Page Template ใหม่ที่ชื่อว่า Contact Us เพื่อใช้สำหรับโครงหน้าติดต่อเรา
นอกจากนั้นเราจะ mock ตัวแบบฟอร์มเอาไว้ก่อนครับด้วย HTML ธรรมดา เดี๋ยวในอนาคตเราจะแทนที่ด้วย Contact Form 7 ครับ
เวลามี template เยอะๆ เราสามารถลดปริมาณการเขียน code ลงได้ด้วยการสร้างสิ่งที่ใช้ด้วยกันบ่อยออกมาเป็นไฟล์แยกต่างหาก แล้วให้ไฟล์อื่นๆมาเรียกที่ไฟล์นั้นไฟล์เดียว ข้อดีนอกจากจะช่วยลดปริมาณที่ต้องเขียน code ลงแล้ว ยังประหยัดเวลา และช่วยให้เรา maintain ระบบได้ง่ายขึ้นด้วยครับ
ถ้าต้องแก้ ก็แค่มาแก้ไฟล์ส่วนกลางที่เราสร้างไว้ แล้วมันก็จะไปอัพเดทส่วนอื่นๆที่หยิบ component ตัวนี้ไปใช้ให้เองด้วยครับ
ในคลิปนี้เราจะย้าย CSS/SCSS ที่เขียนของหน้า promotion ไปไว้ในส่วน global ซึ่งจะแชร์ class กันกับหน้าข้อมูลอื่นๆครับ จะเป็นยังไงไปลองดูกันได้เลย!
สร้าง scss ไฟล์ใหม่นะครับชื่อ _contact.scss จากนั้นเราก็จะเริ่มเขียน CSS ของหน้า contact กันลงในไฟล์นี้ครับ
นอกจากนั้นเรายังปรับแต่ง CSS ของ Bootstrap ให้เป็นแบบของเราด้วย อย่างเช่นการเขียน CSS เปลี่ยนสีปุ่ม โดยที่ไม่ต้องเข้าไปยุ่งกับ CSS เดิมของ Bootstrap ครับ เวลาอัพเดทเวอร์ชันจะได้ไม่เป็นปัญหา
ผมออกแบบหน้า Menu ใน Figma ไว้เรียบร้อยแล้วครับ
วิดีโอนี้จะมาคุยกันก่อนว่าเรากำลังจะเขียน code หน้าเมนูกันยังไงบ้าง หน้านี้จะรายละเอียดเยอะหน่อยครับ
โหลดไฟล์รูปภาพของหน้านี้ได้ที่ช่อง Resources เลยครับ
สร้าง Page Template ใหม่ตัวนึงชื่อ Menus ครับ แล้วเริ่มทำงานกันได้เลย
หน้านี้เราจะเขียน HTML กันค่อนข้างเยอะครับ เนื่องจากหน้าเมนูมีรายละเอียดมากกว่าหน้าอื่นที่เราเคยเขียน และการเขียน HTML ที่ดีจะช่วยให้การเขียน CSS และการทำ responsive ง่ายขึ้นในอนาคตครับ
หลังจากที่เขียนโครงหน้าเมนูแล้ว เราจะมาตกแต่งหน้านี้ให้สวยงามกันด้วย CSS
สร้างไฟล์ _menus.scss แล้ว import ลงไปใน style.scss ได้เลยครับ
อย่าลืมโหลดภาพ right-caret.jpg ที่ผมแนบให้ไปใส่ในแฟ้ม img ก่อนนะครับ
Code สีเหลืองคือ #E3AE0A
เก็บงานอีกสักนิดนึงด้วยการเปลี่ยนรูปด้านบนเป็น slider ให้เหมือนกับหน้าแรกครับ
เราจะใช้ component หรือส่วนกลางที่เราเขียนไว้ เรียกมาใส่ในหน้าเมนูกัน
คลิปนี้ผมจะอธิบายเกี่ยวกับเรื่อง functions.php ที่เราเคยแตะๆไปเมื่อคลิปแรกๆ
ตัวอย่างการเขียนฟังก์ชัน PHP พื้นฐานใน WordPress
ความสามารถที่เราจะเพิ่มลงไปได้ในเว็บไซต์ WordPress ของเรา
Hooks ของ WordPress และการ apply_filters
ถ้ายังไม่ค่อยเห็นภาพ เดี๋ยวเราไปลงมือทำกันต่อในคลิปถัดไปครับ
อธิบายเรื่อง Post Format คร่าวๆ ว่าเราสามารถเปลี่ยนรูปลักษณ์การแสดงผลของ Posts เป็นรูปแบบที่เราสร้างไว้ (หรือธีมที่เราโหลดมาใช้งานอื่นๆ สร้างไว้ได้) ด้วย add_theme_support ของ WordPress ซึ่งความสามารถของ add_theme_support มีหลากหลายมากครับเช่น
ใส่ Custom logo ให้ลูกค้าเลือกเปลี่ยนได้
ใส่ Custom background ให้ลูกค้าเลือกได้
ใส่รูปปก (Featured Image) ให้กับบทความได้
HTML5 และอื่นๆ
เพิ่มเมนู Menus (ใต้ Appearance) ในหลังบ้านของ WordPress
ช่วยให้ลูกค้าของเราสามารถเปลี่ยนและจัดการเมนูที่จะแสดงผลหน้าบ้านได้เองด้วยการใช้ register_nav_menus
เราอยากจะสร้างสักกี่เมนูขึ้นมาใช้ ก็ประกาศเองได้เลยครับ ใช้งานง่ายไม่ยุ่งยาก
จุดสำคัญคือต้องระบุ key ของเมนูแต่ละส่วนให้สัมพันธ์กันตอนที่จะเอาไปแสดงฝั่งหน้าบ้าน จะทำยังไงไปดูกันครับ
เมื่อ register เมนูเอาไว้ที่หลังบ้านเรียบร้อยแล้ว เราก็จะใช้คำสั่งอีกคำสั่งนึงของ WordPress เพื่อแสดงผลเมนูที่ฝั่งหน้าบ้านครับ ซึ่งในคลิปนี้เราจะใช้คำสั่งที่ชื่อว่า wp_nav_menu การใช้งานก็ไม่ซับซ้อน สามารถกำหนด class, id รวมไปถึง element ที่จะครอบเมนูของเราได้ด้วย
โดย key property ที่สำคัญของ wp_nav_menu คือ theme_location ครับ
ทำ slider ไม่ต้องใช้ plugin เราเองก็ทำได้นะครับ
ข้อดีคือ เบา ควบคุมการแสดงผล รวมไปถึงสิ่งที่ต้องการได้ง่ายกว่ามาก
ข้อเสียคือมันทำยากกว่าการแค่โหลด plugin หรือซื้อ plugin มาติดตั้ง
แต่สำหรับคนที่เน้นเรื่อง SEO แล้วต้องการปรับหน้าตาให้เหมือนกับงาน design ที่ได้รับมา ผมว่าการสร้าง slider เองก็จะยืดหยุ่นกว่ามาก ในเว็บไซต์ตัวอย่างนี้ ผมจะใช้ slider library ที่ชื่อว่า Slick Carousel ครับ
--
เมื่อติดตั้งแล้ว path ของ node_modules จะอยู่ที่นี่ครับ
./node_modules/slick-carousel/slick/slick.js
./node_modules/slick-carousel/slick/slick.css
./node_modules/slick-carousel/slick/slick-theme.css
ปรับค่า wp_enqueue_style ในไฟล์ functions.php ที่เราเพิ่งกล่าวถึงในคลิปที่ผ่านมาเล็กน้อยครับ เพราะหลังจากที่เราติดตั้งตัว package ของ slider และรวมด้วย npm run vendor เรียบร้อยแล้ว เราจะสามารถเรียกใช้งานคำสั่งของ Slick ที่ไฟล์ JavaScript ที่ด้านหน้าบ้านของเราได้เลย
จากนั้นเราจะไปปรับ HTML ในหน้า slider.php ที่เราทำเป็น mockup ออกไปแล้วสร้าง HTML สำหรับการเรียกใช้งาน slider จริงเข้ามาแทนที่ ในคลิปนี้เพื่อนๆจะได้เข้าไปลองเขียน code ในไฟล์ใหม่ที่ชื่อว่า main.js (ที่ติดกับ theme boilerplate มาตั้งแต่แรก) กันแล้วด้วยครับ
ได้เวลาสนุกแล้วซิ!
ปรับความสวยความงามของ package slider ที่เราติดตั้งกันครับ
เราจะไม่ปรับ CSS ของ package เลยครับ เพราะมันจะทำให้การอัพเดท version ของ package แต่ละครั้งเป็นเรื่องที่น่าปวดหัวมาก เราจะเขียน CSS ไปทับ (override) ตัว CSS เดิมของ package แทน ซึ่งง่ายกว่าเยอะ และควบคุมการแสดงผลได้เหมือนกัน แต่บำรุงรักษาได้ง่าย
เก็บงานเล็กน้อย เหมือนความกว้างของรูปภาพใน slider จะเกินหน้าจอออกมาหน่อย
เราจะใช้ CSS ในการปรับแก้ไขกันครับ สั้นๆน่าจะเสร็จเลย
ลำดับโครงสร้างไฟล์ เป็นเรื่องที่สำคัญที่ต้องทำความเข้าใจเมื่อเขียนธีมครับ
การเข้าใจ Template Hierarchy จะช่วยให้เราเขียนธีมได้ง่ายขึ้น แยกหน้าที่ต้องการได้โดยไม่ต้องกระทบกับหน้าอื่นๆ เวลาเจอ requirement ของลูกค้าแปลกๆ เช่นอยากได้หน้านึงในเว็บที่ไม่เหมือนหน้าอื่น การใช้ไฟล์ตามลำดับชั้นโครงสร้างที่ผมพูดถึงในคลิปนี้จะช่วยประหยัดเวลาในการสร้างธีมได้มากเลยครับ
ถ้าใครยังไม่เห็นภาพ ติดตามคลิปหน้าได้ถึงการลงมือทำจริงครับ
คลิปนี้จะสร้างไฟล์ searchform.php เพื่อสร้างช่องค้นหาของเว็บไซต์ครับ
ตัว WordPress เองมีระบบค้นหาข้อมูลที่ค่อนข้างดีเยี่ยมอยู่แล้ว ที่เราต้องทำก็คือทำหน้าตาให้สวยงาม แล้วเรียกใช้คำสั่ง หรือ tag name ให้ตรงกับสิ่งที่ WordPress ต้องการเพื่อแสดงข้อมูลเท่านั้นเองครับ
ในคลิปนี้เราจะได้เรียนรู้คำสั่งใหม่ชื่อว่า get_search_query และ get_search_form ด้วย
ท้ายที่สุดมันจะไปเกี่ยวข้องกับ template hierarchy ที่กล่าวไปในคลิปที่แล้วด้วยครับ
หลังจากมันวิ่งเข้าไฟล์ search.php ตามที่เราต้องการแล้ว เราก็มาเขียน HTML, CSS ของหน้านี้กันครับ
เห็นไหมครับ template hierarchy ของ WordPress ช่วยให้เราทำงานได้ขึ้นมากเลย
ใส่ mini slider ให้กับรายการเมนูกันสักหน่อย ในคลิปนี้เราจะได้เรียนรู้
การปรับแต่ง CSS ของ slick slider
การใช้งาน flexbox ในการจัด layout ให้สวยงาม
การดึงรูปและฟอนต์ของ package มาใส่ในไฟล์ธีมของเรา
เปลี่ยนรูปลูกศรของ slider ให้เป็นรูปที่เราออกแบบไว้ง่ายๆ และใช้ CSS เป็น shape ของรูปให้เป็นวงกลม
คอร์สที่จะทำให้คุณเรียนรู้พื้นฐานการเขียน Theme WordPress ได้ด้วยตัวเอง เริ่มตั้งแต่การตั้งค่าสร้างแฟ้มธีมที่จะเขียน ลองสร้างไฟล์ 2 ไฟล์เพื่อทดสอบว่ามีแค่เพียง 2 ไฟล์ก็สร้างธีม WordPress ได้แล้ว ในคอร์สนี้จะเน้นการลงมือทำ(เขียน code)กว่า 80% และจะมีคลิป lecture สั้นๆแทรกระหว่างบทให้ผู้เรียนเข้าใจแต่ละเรื่องที่จำเป็นสำหรับการเขียนธีมเช่น The Loop, Media Size, WP Query รวมไปถึงพวก Custom Post Type ต่างๆ
นอกจากนั้นเราจะได้เรียนรู้การทำ slider และ related posts โดยไม่จำเป็นต้องใช้ plugin ข้างนอก และการเขียนธีมขึ้นมาใหม่จากศูนย์โดยใช้ Twitter Bootstrap เข้ามาเป็นพื้นฐานช่วยในการสร้าง CSS พื้นฐานให้เราทำงานได้ง่ายขึ้น เราจะเรียนรู้การใช้ Figma เบื้องต้นให้เหมือนกับในความเป็นจริงที่ลูกค้าอาจจะมีงาน design อยู่แล้ว หรือเราได้รับงาน design จากเพื่อนในทีม แล้วเราจะขึ้นโครงเว็บไซต์ใหม่ด้วย HTML/CSS และ JavaScript แต่ละหน้าไล่ไปเรื่อยๆจนถึงการเขียน PHP เบื้องต้นเพื่อเพิ่มความสามารถให้ธีมของเรา
แน่นอนว่าคำสั่งพื้นฐานของ WordPress จะได้เรียนกันแน่ๆครับ ไม่ว่าจะเป็น get_template_part, get_template_directory_uri, the_permalink ฯลฯ พวกนี้ผมจะมีอธิบายแทรกในคลิปแต่ละตอนเป็นระยะ แล้วคุณผู้เรียนก็จะเห็นว่าจริงๆแล้วการเขียนธีม WordPress เนี่ยไม่ได้ยากอย่างที่คิด แค่เราต้องเข้าใจหลักพื้นฐานและโครงสร้างของไฟล์ของ WordPress ก่อน
คอร์สนี้เป็นคอร์สที่เขียน code ค่อนข้างเยอะ โดยช่วงกลางๆเรื่องของเรื่องจะสอนเขียน Responsive โดยใช้ CSS/SASS ด้วยครับ สำหรับท่านใดที่ไม่ค่อยถนัดเรื่อง CSS ก็ไม่ต้องกังวลครับ ทุกคำสั่งที่เขียน ผมจะเริ่มเขียนใหม่หมดเลยไม่ได้เตรียมไว้แล้ว copy มาแปะ ทำให้ตอนเขียน code ผมจะอธิบายไปด้วยว่ากำลังทำอะไร และทำไมต้องเขียนแบบนั้น
เนื้อหามีประมาณ 90 ตอน แบ่งออกเป็น 15-20 section และจะมีแบบทดสอบง่ายๆท้ายบทให้ลองตรวจสอบความเข้าใจกันนิดหน่อย คอร์สนี้เป็นคอร์สแรก เป็นคอร์สที่ผมตั้งใจทำ และใช้เวลาสร้างอยู่พอสมควร หวังว่าจะมีประโยชน์กับทุกท่าน และช่วยให้เข้าใจหลักการเขียนธีมของ WordPress ได้มากขึ้นครับ