เว็บ WordPress ที่ติดตั้ง WP Super Cache พังเมื่อย้ายโฮสต์

สองวันก่อนเพิ่งทำการย้ายโฮสต์เว็บไซต์ออกจาก Cloudhost.in.th ไปใช้ Host4.pro แทน  ซึ่งเว็บเดโม่ต่างๆ ของลูกค้าต่างใช้งานได้ตามปกติ  ยกเว้นเว็บหลักคือเว็บ Tyria.in.th

อาการที่เจอคือเว็บทำงานได้ช้ามาก  และบางครั้งก็ Error 500 ขึ้นมาเสียดื้อๆ ในขณะเดียวกัน  ฝั่ง wp-admin ก็มีผลกระทบด้วยเล็กน้อย  แต่โดยรวมถึงสามารถเข้าใช้งานได้ตามปกติ

ปัญหาจากการย้ายโฮสต์ส่วนใหญ่ที่เจอมักจะมาจากปลั๊กอินต่างๆ ดังนั้นแล้วเลยเข้าหลังบ้านไปตรวจสอบการตั้งค่าปลั๊กอินต่างๆ และยังพบว่าถูกต้องตามปกติ  จนกระทั่งเข้ามาในส่วนของ WP Super Cache แล้วพบข้อความผิดพลาดดังในรูป

จุดที่น่าสนใจคือ Path นั้นยังขึ้นเป็น Path เก่าอยู่ (user จากโฮสต์เดิม) ในขณะที่หลังจากย้ายโฮสต์  ปลั๊กอิน WP Super Cache ก็ทำการแก้ไขค่าคงที่ WPCACHEHOME ใน wp-config.php ให้เรียยร้อยแล้ว

(more…)

ธีมเวิร์ดเพรส โง่ๆ ง่ายๆ ในหนึ่งชั่วโมง

วันนี้นึงยังไงไม่รู้ อยากเปลี่ยนธีมบล็อกเสียใหม่  ลอกหน้าตาแบบ Medium มานั่นแหละ  แต่หาธีมฟรีสวยๆ ถูกใจไม่เจอ  เลยตัดสินใจเขียนมันขึ้นมาเองนี่แหละ

ธีมโง่ๆ ง่ายๆ คือธีมขาวๆ ที่เห็นอยู่ตอนนี้นั่นแหละ  ทำง่ายๆ ด้วยการโยน Bootstrap 4 Alpha 6 เข้ามา  เขียนโครง HTML ง่ายๆ ใส่ Template Tags แล้วก็เขียน CSS เพิ่มเติมอีกนิดหน่อย  ก็ออกมาสวยงาม (มั๊ง) อย่างที่เห็น  และตั้งชื่อง่ายๆ ว่า Strip

เอาว่าใครสนใจธีมที่แกะไปก็ไม่ได้ประโยชน์ใดๆ อันนี้  ไปโหลดได้จาก GitHub

บอกเลยว่าธีมนี้เขียนด้วยวิธีโบราณมาก  ไม่มีใช้ Packages Manager อะไรให้วุ่นวาย  ไม่มีการใช้ CSS Pre-processor ไม่มีการเขียน Unit Test เขียนเสร็จอัพโหลดผ่าน FTP แล้วกด Refresh หน้าเว็บ เรียกได้ว่าเป็นที่บางคนเรียกว่า “Cowboy Coding” อย่างเต็มขั้น  ดังนั้นหากใครรับไม่ได้กับวิธีโบราณแบบนี้  โปรดระวังอาการหัวใจล้มเหลวเฉียบพลันครับ

ไปละ บาย

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

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

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

คลาสขยาย WP_Widget

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

(more…)

Action และ Filter ใน WordPress ต่างกันอย่างไร?

ในเวิร์ดเพรสนั้นจะมีวิธี Hook การทำงานอยู่ 2 แบบ  คือผ่าน Action และ Filter ซึ่งการทำงานของทั้ง Action และ Filter นี่มันคล้ายกันมาก … ไม่สิ  จริงๆ มันเหมือนกันเลย!!

ไม่เชื่อลองไปเปิดไฟล์ wp-includes/plugin.php ดูแถวๆ บรรทัดที่ 400 กว่าๆ (ตอนนี้ 4.1.1 ก็อยู่ที่  429) จะเจอการประกาศฟังก์ชันเอาไว้ดังนี้

ครับ add_action() มันก็เป็น wrapper ธรรมดาๆ ของ add_filter() นั่นแหละ … อ้าว! แล้วมันต่างกันยังไง?

(more…)

แสดงภาพตัวอย่างอัตโนมัติกรณีไม่ได้ตั้ง Featured Image

ปกติแล้วเวลาเราออกแบบธีมเวิร์ดเพรส  มักจะออกแบบมาเผื่อให้มี Featured Image (อีกชื่อคือ Post Thumbnail) กันอยู่แล้ว  ปัญหาคือเวลาเอาไปใช้จริงๆ เรากลับไม่ได้ตั้งภาพตัวอย่างให้กับทุกๆ โพสต์  ทำให้มันออกมาหน้าตาพิการๆ ไม่เป็นอย่างที่เราต้องการ  คล้ายๆ กับแบบนี้

โพสต์ไม่มีภาพ Featured Image

โดยปกติที่ผมเจอ  จะใช้วิธีเช็ค if … else กับฟังก์ชัน has_post_thumbnail() กัน  ว่ามีภาพ Featured Image หรือไม่  ถ้าออกมาเป็น false จึงค่อยแสดงภาพที่เตรียมไว้ … โค๊ดมันก็จะรกๆ ประมาณนี้

ครับ  มันรก  จริงๆ แล้วเราสามารถทำให้เหลือแค่ the_post_thumbnail() อันเดียวโดดๆ ได้  ด้วยการใช้ Filter เข้ามาช่วยครับ

(more…)