Yes, something went wrong. We’re fixing it.
การเชื่อมต่อฐานข้อมูล MySQL บน PHP
Fatal error: Uncaught Error: Call to undefined function mysql_connect() PHP7 ได้กล่าวไว้ ถ้าคุณเพิ่งจะหัดเขียน PHP แล้วเจอข้อผิดพลาดข้างบน นั่นเป็นเพราะว่าตั้งแต่ PHP 7.0 เป็นต้นมา (ถ้าไม่มีเหตุจำเป็นจริงๆ ไม่มีใครใช้ PHP5 กันอีกแล้วเนอะ) ส่วนขยาย mysql ได้ถูกนำออกไปจาก PHP โดยสมบูรณ์ ทำให้ฟังก์ชันกลุ่ม mysql ทั้งหมด เช่น mysql_connect(), mysql_pconnect(), mysql_query(), mysql_fetch_assoc() และอีกสารพัด จะไม่สามารถใช้งานได้แล้วนั่นเอง แต่อย่าเพิ่งตกใจไป PHP ได้เอาส่วนเสริมตัวใหม่สำหรับ MySQL เข้ามาแทน นั่นคือ mysqli หรือ MySQL Improved ที่ compatible กับโค้ดเดิมเกือบจะ 100% เพียงแค่เปลี่ยนชื่อฟังก์ชันจาก mysql_xxx เป็น mysqli_xxx […]
ตั้งค่าปลั๊กอิน WebP Express สำหรับใช้ภาพ WebP บนเวิร์ดเพรส
ย้อนไปเมื่อปี 2010 กูเกิลได้เปิดตัว WebP ฟอร์แมตไฟล์ภาพแบบใหม่ที่ออกแบบมาสำหรับการใช้งานบนเว็บไซต์โดยเฉพาะ ไฟล์ WebP นั้นจะมีขนาดไฟล์เล็กกว่าไฟล์ภาพ PNG ทั่วๆ ไปโดยเฉลี่ยถึง 45% โดยยังคงคุณภาพโดยรวมไว้ได้เหมือนเดิม รองรับพื้นหลังโปร่งใส ไปจนถึงภาพเคลื่อนไหว ในปัจจุบันเบราเซอร์หลักๆ ต่างรองรับ WebP กันหมดแล้วทั้ง Chrome, Opera, Firefox, หรือแม้แต่ Microsoft Edge เหลือเพียงแค่ Safari ที่ใช้งานบนแมคและ iOS เท่านั้นที่ยังไม่รองรับ
Regular และ Extended license บน Envato Market
ใครที่เคยซื้อธีมและปลั๊กอินจากบน Envato Market ไม่ว่าจะเป็น Themeforest หรือ Codecanyon (และอื่นๆ อีกมากมาย) จะต้องเจอกับตัวเลือกว่าจะซื้อธีมหรือปลั๊กอินนั้นๆ ด้วยไลเซนส์แบบไหน และที่เราเจอกันบ่อยที่สุดก็คือ Regular และ Extended license เวลาเราถามว่าไลเซนส์ทั้งสองแบบนั้นต่างกันอย่างไร เราจะได้ข้อสรุปสั้นๆ ว่าแบบ Regular ไม่สามารถเอาไปขายต่อได้ ส่วน Extended สามารถเอาไปขายต่อได้ ซึ่งแน่นอนว่างง ขายต่อได้ ขายยังไง ทำงานขายลูกค้าต้องใช้ extended มั้ย เดี๋ยวจะมาอธิบายให้ฟังกัน
การใช้ PSR-4 autoload ใน Composer
ข้อดีอย่างหนึ่งในการเขียนการฟีเจอร์ต่างๆ แยกมาเป็นคลาสคลาสหนึ่ง คือเราสามารถเก็บค่าทุกค่า ฟังก์ชันทุกฟังก์ชัน เอาไว้แค่ในตัวมันได้โดยไม่ต้องกลัวว่ามันจะไปตีกับค่าเดียวกันหรือฟังก์ชันเดียวกัน (จริงๆ มันเรียกว่า property กับ method) ที่อยู่ในคลาสอื่น หรือที่เขาเรียกกันว่า encapsulation ตัวอย่างการทำ encapsulation ที่เราเคยเขียนไว้ คือการใช้ ACF ทำบล็อก Gutenberg แต่ข้อเสียอย่างหนึ่งของการทำ encapsulation นั่นคือเราต้องมานั่ง include ไฟล์คลาสจำนวนมาก (ยิ่งเขียนเยอะยิ่ง include เยอะ) ซึ่งถึงจุดหนึ่งแล้วมันจะกลายเป็นเรื่องน่ารำคาญขึ้นมาแทน แต่เราก็มีทางออก คือการทำ PSR-4 Autoloading
การส่งค่าจาก PHP ไปหา JavaScript ใน WordPress
เวลาเราทำเว็บด้วย WordPress และมีการต้องมาเกี่ยวข้องกับการเขียน JavaScript ในหลายครั้งจะต้องมีการเรียกใช้ค่าจากฝั่ง PHP เนื่องด้วย PHP และ JavaScript นั้นทำงานคนละที่กัน (PHP ทำงานบนเซิร์ฟเวอร์ และ JavaScript ทำงานฝั่งเบราเซอร์) ทำให้เราจะส่งค่าจาก PHP ไปให้ JavaScript โดยตรงไม่ได้ ทางออกที่เจอกันบ่อยๆ คือให้ PHP ทำการ echo ค่านั้นๆ ออกมาแล้ว JavaScript จึงนำเอาไปใช้ ทีนี้ปัญหาอยู่ที่ในไฟล์ .js นั้นเราไม่สามารถแทรกคำสั่ง PHP ลงไปได้ ดังนั้นท่าที่เราเจอบ่อยที่สุดท่าหนึ่งก็คือการเขียน JS แทรกลงไปในไฟล์เท็มเพลต และ echo ค่าจาก PHP ลงไปตรงนั้น วิธีนี้แม้จะทำให้ได้ผลลัพธ์ที่ต้องการได้ แต่ก็ทำให้โค้ดรก และต้องเอาโค้ด JS มาปะปนอยู่ในไฟล์เท็มเพลตด้วย
ตั้งค่า Mailgun บนเซิร์ฟเวอร์ Cloudways สำหรับใช้ส่งอีเมลออกจากเว็บ
ตอนที่เราเปิดเว็บขึ้นมาใหม่ๆ (ว่าไปก็ปีกว่าแล้วนะเนี่ย) เราได้เขียนแนะนำ Cloudways บริการ managed cloud server ที่ออกแบบมาเพื่อ WordPress โดยเฉพาะ วิธีเปิดใช้งาน พร้อมย้ายเว็บจากโฮสต์เดิมเข้าสู่ Cloudways แม้ว่า Cloudways จะเตรียมทุกอย่างมาให้พร้อมสรรพสำหรับการใช้งานเว็บไซต์ WordPress แต่สิ่งหนึ่งที่ Cloudways ไม่ได้เตรียมไว้ให้ในตัวนั่นคือบริการอีเมล นั่นหมายความว่าเว็บของเราจะไม่สามารถส่งอีเมลออกไปที่ไหนได้เลย จริงๆ แล้ว Cloudways มีบริการ Elastic Email เป็นบริการเสริม (add-on) สำหรับใช้ส่ง transaction email ด้วย (เป็นการส่งอีเมลออกเพียงอย่างเดียว ปกติใช้กับพวกอีเมลระบบต่างๆ เช่นอีเมลแจ้งเตือน หรืออีเมลโฆษณา) แต่ Elastic Email นี้จะมีค่าใช้จ่ายเริ่มต้นที่ $0.10 ต่อ 1,000 ฉบับต่อเดือน
สร้างบล็อค Gutenberg แบบง่ายๆ ด้วย Advanced Custom Fields
หลังจากที่เวิร์ดเพรส 5.0 ได้นำเสนอ Gutenberg ซึ่งเป็นตัวแก้ไขเนื้อหาตัวใหม่ที่เขียนด้วยจาวาสคริปท์ออกมา ก็ได้มีเครื่องมือหลายตัวถูกปล่อยออกมาเพื่อช่วยให้เราสามารถสร้างบล็อค Gutenberg เพิ่มเติมได้ง่ายขึ้นเช่น create-guten-block ที่เราเคยพูดถึงไปบ้างแล้ว สำหรับใครที่ทำเว็บใหญ่ๆ ด้วยเวิร์ดเพรสมาก่อน คงคุ้นเคยกับปลั๊กอินคู่บุญชาวเวิร์ดเพรสอย่าง Advanced Custom Fields เป็นอย่างดี ซึ่งตัวมันนั้นครอบคลุมสากเบือยันเรือรบ เช่นทำ Custom field ให้กับ Post, Page, Category, User, ไปจนถึงฟิลด์ของ Widget, และหน้า Option ของธีม และแน่นอนว่า Advanced Custom Fields ก็ไม่พลาดที่จะโดดมาร่วมวงกับ Gutenberg ด้วย และได้เพิ่มฟีเจอร์รองรับการสร้างบล็อค Gutenberg เข้ามาใน ACF Pro 5.8
Gutenberg อนาคตหรือหายนะ?
WordPress 5.0 ได้ปล่อยออกมาอย่างเป็นทางการเมื่อช่วงดึกๆ เมื่อคืนนี้ โดยสิ่งที่เปลี่ยนแปลงมากที่สุดคือตัวแก้ไขเนื้อหาแบบใหม่ ที่เปลี่ยนมาใช้ Gutenberg แทน TinyMCE แบบเดิม และวันนี้เราจะมาพูดถึง Gutenberg กัน Gutenberg นั้นเปลี่ยนแนวคิดในการแก้ไขเนื้อหาไปจากเดิมที่มองว่าเนื้อหาเป็น HTML ก้อนเดียวกันทั้งหมด ไปเป็นการแบ่งเนื้อหาแต่ละส่วนออกเป็นบล็อกแทน ซึ่งจะคล้ายๆ กับแพลตฟอร์มเนื้อหายอดนิยมในตอนนี้อย่าง Medium.com (ทั้งนี้เนื้อหาจะโดนแพ็ครวมกลับเป็น HTML ก้อนเดียวเหมือนเดิมโดยจะคั่นแต่ละบล็อกด้วยคอมเมนต์ ดังนั้นบล็อกเนื้อหาพื้นฐานต่างๆ จะยังสามารถแสดงผลบนธีมเก่าๆ ได้อย่างแน่นอน) มิตรสหายท่านหนึ่งกล่าวไว้ว่าหากเวิร์ดเพรสยังคงเดินไปในเส้นทางนี้ จะถือว่าเป็นหายนะ คำถามคือจริงหรือเปล่า?
เขียนธีม WordPress ด้วย Sage 9 – ตอนที่ 4 ควบคุมข้อมูลด้วย Controller
จากตอนที่ผ่านๆ มา เราได้กล่าวถึง Controller กันไปบ้างแล้ว โดยในแนวคิดการเขียนโปรแกรมแบบ MVC นั้น ส่วนของการแสดงผลและการประมวลผลจะแยกออกจากกันอย่างชัดเจน และจะช่วยให้เราสามารถนำเอาส่วนการแสดงผล (หรือ View) กลับมาใช้งานใหม่ได้สะดวกขึ้น ให้ลองนึกตามว่าเรากำลังทำเว็บอยู่เว็บหนึ่ง โดยในเว็บจะมีอยู่ส่วนหนึ่งที่เป็นการดึงข้อมูลจาก 3 แหล่งข้อมูลมาแสดง (สมมุติว่าเป็น Post, ข้อมูลจาก API, และข้อมูลจาก Database ที่เราเพิ่มเอง) แต่ว่าในส่วนการแสดงผลนั้นจะใช้โครง HTML เหมือนกันทั้งหมด ท่ามาตรฐานที่เราทำกันบ่อยๆ นั่นคือสร้างไฟล์ Partial Template ขึ้นมาไฟล์หนึ่ง จากนั้นเขียนโค้ดตรวจสอบว่าเท็มเพลตนี้ถูกเรียกจากตรงไหน แล้วค่อยดึงข้อมูลตามที่ต้องการออกมา หรือบางคนเถื่อนหน่อยก็อาจจะสร้างเท็มเพลตขึ้นมา 3 ไฟล์สำหรับแต่ละส่วนเลย แล้ว include เข้ามาเป็นส่วนๆ ไป ซึ่งแต่ละวิธีนั้นก็จะมีความยุ่งยากต่างกันออกไป Controller พระเอกที่จะมาแก้ปัญหานี้ ตามหลักการของ MVC แล้ว View และ Controller จะแยกออกจากกันอย่างอิสระ View ไม่จำเป็นต้องรับรู้ว่ามันอยู่ตรงไหน ต้องไปดึงข้อมูลจากอะไร โดย […]
เขียนธีม WordPress ด้วย Sage 9 – ตอนที่ 3 Blade Template Engine
ในสองตอนที่ผ่านมาเราได้แนะนำเกี่ยวกับ Sage 9 ไปคร่าวๆ แล้ว ซึ่งรวมไปถึงสร้างโปรเจ็กท์และการใช้จัดการแพ็คเกจต่างๆ ในขั้นต้นด้วย ปละในตอนที่ 3 นี้เราจะมาพูดถึงหัวใจสำคัญส่วนหนึ่งของ Sage 9 นั่นคือ Blade Template Engine ครับ Blade Template Engine แต่เดิมนั้นเป็นระบบเท็มเพลตของเฟรมเวิร์ก Laravel ซึ่งตามคอนเส็ปท์ของมันนั้นจะช่วยให้นักพัฒนาสามารถเขียนเท็มเพลตเพิ่มเติมได้โดยไม่จำเป็นต้องเขียนโค้ดซ้ำในส่วนเดิม ทำไมต้องใช้ Blade? แม้ว่าเวิร์ดเพรสจะมีระบบเท็มเพลตของตัวเองอยู่แล้ว แต่จริงๆ แล้วระบบเท็มเพลตของเวิร์ดเพรสนั่นเป็นแค่การเอาฟังก์ชัน PHP ธรรมดาๆ ไปโยนใส่ไว้ในไฟล์เท็มเพลตที่เป็นไฟล์ PHP ธรรมดาเท่านั้น ซึ่งในระยะยาวแล้วหากเว็บเราทำงานซับซ้อนยิ่งขึ้น โค้ดเหล่านี้ก็จะพันกันยุ่งเหยิงจนอ่านได้ลำบาก อีกทั้งในหลายๆ ครั้งเรายังจำเป็นต้องเขียนโค้ดการทำงานซ้ำในหลายๆ หน้าด้วย (ตัวอย่างชัดๆ คือการสั่ง include header และ footer เข้ามา ที่จำเป็นต้องทำในทุกๆ หน้า) แต่ด้วยคอนเส็ปท์ของ Blade นั้นที่อาศัยการเขียนโครงหลักและขยายออกไปเรื่อยๆ ทำให้เราสามารถเลี่ยงการเขียนโค้ดซ้ำในจุดนี้ลงไปได้ อีกทั้ง Blade ยังทำหน้าที่เป็น Views […]
Got any book recommendations?