การเขียน Widget สำหรับ WordPress

Widget โดยนิยามแล้วมันคือกล่องเล็กๆ ที่ไว้สำหรับแสดงข้อมูลเพิ่มเติมบน Sidebar (เช่นโพสต์ล่าสุด, กล่องค้นหา, รายการแท็ก, ฯลฯ) ซึ่งตัว WordPress เองก็ได้เตรียมวิดเจ็ตเอาไว้ให้เราจำนวนหนึ่ง  และปลั๊กอินหลายๆ ตัวก็มาพร้อมกับวิดเจ็ตด้วยเช่นกัน  แต่โดยปกติแล้ววิดเจ็ตเหล่านี้มักจะปรับแต่งอะไรได้ไม่มากนายนัก  ทำให้บางครั้งก็ค่อนข้างลำบากในการเอามาใส่ให้เข้ากับเว็บที่ทำอยู่

เนื่องจากงานสองสามงานล่าสุดที่ผมทำนั้นมีการต้องเข้าไปเขียน Widget เพิ่มเติมด้วย (เว็บ TechSauce) โดยเหตุหลักๆ คือวิดเจ็ตที่มากับ WordPress เองนั้นมันหน้าตาไม่เข้ากับ Design นั่นแหละ  ดังนั้นไหนๆ ก็ไหนๆ เอามาลงบล็อกเลยแล้วกัน

คลาสขยาย WP_Widget

Widget ใน WordPress นั้นจะเขียนขึ้นมาในลักษณะ OOP โดยขยายจากคลาส WP_Widget อีกต่อครับ   อ้ออย่าเพิ่งกลัวกับ OOP ครับ  ไม่ยากหรอก   เขียน Widget นี่มันแค่เขียนฟังก์ชันหน้าตา  ฟังก์ชันกล่องตั้งค่า  ฟังก์ชันเซฟค่า  แล้วก็ครอบมันด้วยคลาสโง่ๆ อันนึงแค่นั้นเอง (จริงๆ มันเขียนเป็น Procedural ได้ … แต่ผมไม่เคยเขียนวิดเจ็ตเป็น Procedural ครับ :v ) ไปลองดูโครงสร้างกัน

Read More

[อัพเดท] ผมว่านะ พวกคุณควรเลิกใช้ AppServ ได้แล้วล่ะ

AppServ ออกเวอร์ชันใหม่แล้วจ้า!!

AppServ ออกรุ่นใหม่แยกเป็น 2 รุ่นครับ  คือรุ่น PHP 5.6 และรุ่น PHP 7.0 ทั้งสองเวอร์ชันมาพร้อมกับ MySQL 5.7 และ Apache 2.4 ครับ

ใครที่ยังเป็นแฟนๆ AppServ อยู่  สามารถเข้าไปดาวน์โหลดได้ในเว็บหลัก AppServNetwork.com ได้เลยครับ (จะเปิดให้โหลดในวันที่ 8 มกราคมนะครับ)


AppServ จัดได้ว่าเป็น WAMP Stack ที่ “โคตรนิยม” ในหมู่คนไทย  นิยมขนาดว่าแม้ว่ามันจะหยุดพัฒนาไปแล้วประมาณ 5 ปี คนไทยก็ยังใช้กันอยู่จนถึงทุกวันนี้ (ตายยากน้องๆ Windows XP เลยนะเนี่ย)  คือในช่วงสามสี่ปีที่แล้วมันก็ยังโอเคนะครับ  ยังพอจะใช้กันได้แบบไม่มีปัญหา  แต่ปัจจุบันด้วยความเก่าของมัน  ทำให้หลายๆ คนเจอปัญหาเมื่อเอาเว็บไปลงใน Production กันแล้วครับ

ปัญหาหลักๆ ที่มักจะเจอกันคือปัญหาของเวอร์ชัน PHP ครับ ในขณะที่ซอฟต์แวร์ตัวอื่นใน AppServ ดูไม่ค่อยจะเป็นปัญหาเท่าไหร่ (ถ้าไม่ได้มักง่ายขนาดเอา AppServ ไปทำ Production Server นะ)

PHP 5.2 ปัญหาสำคัญใน AppServ

AppServ หยุดพัฒนาไปเมื่อปี 2009 และเวอร์ชันสุดท้ายของ AppServ มันมาพร้อมกับ PHP 5.2 ที่เลิกซัพพอร์ตไปตั้งแต่ปี 2011 ครับ  ในขณะที่โฮสต์ส่วนใหญ่ที่เปิดให้บริการอยู่ตอนนี้  เท่าที่ผมทราบคือจะใช้ PHP 5.3 กันเป็นหลัก (5.3 ก็เพิ่งหมดซัพพอร์ตไปเมื่อเดือนสิงหาคมที่ผ่านมาครับ  คิดว่าโฮสต์หลายที่น่าจะไล่อัพเกรดเป็น 5.4 หรือ 5.5 กันอยู่)

อ้อ มันมีรุ่นที่มากับ PHP6-Dev ด้วย  อันน่าช่างหัวมันครับ PHP6 โดนฝังกลบไปแล้ว (แถมมันก็เป็น build เมื่อปี 2009 นั่นแหละ) Major รุ่นถัดไปจะเป็น PHP7 ครับ

ตั้งแต่ PHP 5.3 เป็นต้นมา  มีฟีเจอร์ใหม่ๆ หลายตัวที่ถูกเพิ่มเข้ามา  และยังมีฟีเจอร์เก่าๆ อีกหลายตัวที่ถูกยกเลิกหรือเอาออกไปจาก PHP ด้วยเช่นกันครับ (และหลายๆ ตัวก็ยังเห็นคนใช้กันอยู่ด้วยสิ)

Read More

แก้ปัญหา meta_compare ทำงานไม่ถูกต้องใน WordPress

ใน WordPress เราสามารถสั่ง Query โพสต์ออกมาตามค่าใน custom field ได้ (หรือชื่อในเชิงเทคนิคคือ Post Meta) ด้วยการเพิ่มอาร์กิวเมนต์ meta_query ลงไปในขั้นตอนการคิวรี่  อย่างนี้

$args = array(
	'post_type' => "mytype",
	'meta_query' => array(
		array(
			'key' => "mymeta",
			'value' => "myvalue",
			'compare' => "="
		)
	)
);

$myQuery = new WP_Query($args);

ซึ่งตามตัวอย่างข้างบน  จะเป็นการสั่งคิวรี่โพสต์จากโพสต์ไทป์ mytype โดยจะดึงจากโพสต์ที่มีค่า mymeta เท่ากับ myvalue

การคิวรี่นี้จะไม่เกิดปัญหาใดๆ ตราบใดที่เป็นการคิวรี่ตาม string ธรรมดา  แต่เมื่อใดก็ตามที่ต้องการเปรียบเทียบในลักษณะอื่นที่นอกเหนือจากข้อความธรรมดา (เช่นตัวเลข  หรือวันที่) การคิวรี่ด้วย meta compare ธรรมดาแบบนี้จะมีปัญหาทันที  เนื่องจากตัว WordPress จะมอง custom field เป็น string ธรรมดาๆ เป็นค่าปริยาย

Read More

เมื่อคำสั่ง mysql_xxx ถูกเลิกใช้ใน PHP 5.5

ในภาษา PHP นั้นมีวิธีเชื่อมต่อกับฐานข้อมูล MySQL อยู่หลายแบบมากครับ  เช่น mysql, mysqli, หรือ pdodb ซึ่งวิธีที่โปรแกรมเมอร์ไทยๆ นิยมและถูกสอนให้ใช้มากที่สุด  คือวิธี mysql (พวกคำสั่ง mysql_connect(), mysql_query(), หรือ mysql_fetch_array() นั่นแหละ)

ปัญหาที่เกิดขึ้นแล้วในตอนนี้คือคำสั่งตระกูล mysql ทั้งหลาย  ถูกประกาศ deprecated (เลิกใช้) ไปเรียบร้อยแล้วใน PHP5.5 แม้ว่าในตอนนี้คำสั่งตระกูล mysql จะยังใช้งานได้ตามปกติ  แต่ก็ยังใช้งานได้เพื่อให้โค๊ดเก่าๆ ทำงานได้เท่านั้น (จะขึ้น deprecated error ถ้าเราเปิดแสดง error เอาไว้) และในอนาคตฟังก์ชันกลุ่มนี้ก็จะถูกถอดออกจาก PHP แน่นอน

สาเหตุการเลิกใช้นั้นหลักๆ เนื่องมาจากคำสั่ง mysql พวกนี้เขียนอยู่บน C Wrapper รุ่นเก่าที่ไม่มีการสนับสนุนแล้ว  หรือพูดง่ายๆ คือคำสั่งกลุ่มนี้โดนลอยแพแล้วนั่นเอง  ทาง PHP ก็แนะนำว่าให้ใช้คำสั่งกลุ่ม mysqli หรือ pdodb ในการเชื่อมต่อกับ MySQL แทน  และคำสั่งชุด MySQLi ก็ทำงานร่วมกับ MySQL 4.1 ขึ้นไปได้ดีกว่าอีกด้วย

Read More

เปลี่ยน Windows 8 ให้เป็น Wifi Hotspot

ผมมีปัญหาเล็กๆ บางอย่างที่ทำให้ต้องใช้ Wifi Tethering จากคอมพิวเตอร์อยู่บ่อยๆ   ปัญหาคือใน Windows 8 นั้นกลับตัดเอา UI ในส่วนที่ใช้ทำ Wifi Tethering (หรือที่เราเคยเรียกกันว่า Adhoc) ออกไป  แต่ยังนับว่าเป็นโชคดีที่เราสามารถสั่งงานมันผ่านคำสั่ง netsh ใน command prompt ได้ (ต้องรันเป็น Administrator เท่านั้น)  ด้วยคำสั่งสั้นๆ  ประมาณนี้

สร้าง Hotspot

netsh wlan set hostednetwork mode=allow ssid=ชื่อวายฟาย key=รหัสผ่าน

เริ่มการทำงาน

netsh wlan start hostednetwork

หยุดการทำงาน

netsh wlan stop hostednetwork

ปกติผมจะเซฟเป็นไฟล์ .bat เอาไว้  และรันเอาเองทีละไฟล์  แต่หลังๆ ชักจะรู้สึกว่ามันรก  เลยเขียนเป็นโปรแกรมเล็กๆ ขึ้นมาใช้เองเสียเลย

Read More