WordPress เพิ่ม singular.php เป็น theme template ตัวใหม่

สำหรับ WordPress เวอร์ชั่น 4.3 ที่กำลังจะมา ทางทีมพัฒนาได้เพิ่ม singular.php เข้ามาเป็น theme template ตัวใหม่ โดยหลายคนรู้จัก singular อยู่แล้วจาก is_singular() ซึ่งถ้าหน้าที่แสดงอยู่เป็นหน้าเดี่ยวของ post type ใดๆ จะส่งค่า true กลับมาให้

ใน wp-includes/template-loader.php เพิ่ม code ดังนี้

และใน เพิ่ม code ดังนี้

โดยใช้สำหรับหน้าเดี่ยวโดยไม่สนใจว่าเป็น post type แบบไหน ลำดับจะอยู่หลังจาก single.php หรือ page.php หรือ หน้าเดี่ยวของ post type อื่นๆ

singular.php ช่วยให้เราไม่ต้องคิดมากเวลาจะหาว่า หน้าเดี่ยวนี้เรียกจาก file ไหน single.php หรือเปล่า หรือจะเป็น page.php ใช้แค่ singular.php ตัวเดียวก็แทนที่ได้หมดแล้ว

เพิ่มสินค้าอัตโนมัติ กรณีสินค้านั้นมีหลายตัวเลือก : WooCommerce

ตามปรกติปุ่ม Add to cart ของ WooCommerce เองก็เพิ่มสินค้าให้อัตโนมัติอยู่แล้ว เพียงแต่ถ้าเมื่อไหร่สินค้านั้น มีหลายตัวเลือก หรือถ้าดูในหลังบ้านของ WooCommerce ก็คือ มีการตั้งค่า Variation ให้กับสินค้า ตัวอย่างเช่น สินค้า A มี 2 สี 2 ขนาด คือ สีแดง ขนาด 5ml, สีแดง ขนาด 30ml, สีเขียว ขนาด 5ml และสีเขียว ขนาด 30ml แบบนี้จะทำให้เมื่อเรากดปุ่ม Add to cart แล้ว ตัว WooCommerce จะพาเราไปยังหน้าของสินค้านั้น เพื่อให้เราเลือกก่อนว่า จะเอาสีไหน ขนาดไหน

คราวนี้ได้โจทย์มาจากลูกค้าว่า อยากจะให้เมื่อคนซื้อมากดปุ่ม Add to cart แล้ว ระบบจะเพิ่มสินค้าเข้าตะกร้าสินค้าให้เองอัตโนมัติจำนวน 1 ชิ้น

ซึ่งในหลังบ้านของ WooCommerce ในส่วนของ Product แต่ละชิ้นนั้น จะมีส่วนให้ตั้งค่า Default Variation ของสินค้าชิ้นนั้นๆ อยู่แล้ว เลยใช้ส่วนนี้มาต่อยอดปรับแต่งปุ่ม Add to cart ให้ทำงานแบบที่ลูกค้าต้องการได้

ก่อนอื่นต้องทำความเข้าใจเรื่อง Template ของ WooCommerce ก่อน http://docs.woothemes.com/document/template-structure/ ไม่ขออธิบายนะครับ ไปอ่านดู

โดยปุ่ม Add to cart จะมีอยู่ 2 ส่วนคือ ส่วนของหน้ารวมสินค้า กับส่วนของหน้ารายละเอียดสินค้า ซึ่งปุ่ม Add to cart ที่เราต้องการจะปรับคือ หน้ารวมของสินค้า โดย File ที่เราต้องทำการแก้ไข จะอยู่ใน path yourtheme/woocommerce/loop/add-to-cart.php (อันนี้ยึดหลักตาม WooCommerce 2.2.2) ซึ่งใน File จะเขียนไว้ดังนี้

ผมเลยเพิ่มโค้ดเข้าไปเป็นแบบนี้

โดยเช็คว่าสินค้านั้น มีตัวเลือกหรือเปล่า หลังจากนั้นมาเช็คว่ามีค่า Default ตั้งไว้มั้ย ส่วน form ที่ใช้ในการส่งค่าสำหรับเพิ่มสินค้าเข้าตะกร้านั้น นำมาจากปุ่ม Add to cart ของหน้ารายละเอียดสินค้า เพียงแต่เรากำหนดค่าของตัวเลือกลงไปเลย รวมถึงจำนวน 1 ชิ้นด้วย

ถ้าเห็นว่าโค้ดส่วนไหนควรปรับเปลี่ยน คอมเม้นต์บอกกันได้เลยนะครับ

Query ในหน้านั้น เราจะเพิ่ม Parameter เข้าไปยังไง : WordPress

อันนี้ยกตัวอย่างจากที่เจอมาเลย คือในหน้า Archive อยากให้มันเรียงตามชื่อหัวข้อ ไม่ได้อยากให้มันเรียงตามวันที่ แค่เพิ่ม parameter orderby=title เข้าไปทำยังไง

อย่างแรกก็ประกาศ global $query_string; เพื่อที่เราจะได้นำ $query_string มาใช้งาน โดยมันคือ ค่า parameter ที่ใช้ในการ query_posts() ของแต่ละหน้านั่นละ แต่เราเรียกมาเพื่อที่จะเพิ่มค่า parameter ที่เราต้องการเข้าไป ส่วนเราสามารถปรับแต่งการเรียกต่างๆ ได้จากหัวข้อนี้ query_posts

Widget Logic Plugin สำหรับกำหนดเงื่อนไขการแสดงผลของ Widget : WordPress

วันก่อนมีน้องมาถามว่า มี Plugin จะทำยังไงให้ Widget แสดงผลเฉพาะหน้าที่เราต้องการได้มั้ย ยังไม่ทันได้ตอบ มันก็หาเจอไปแล้ว 555

พอมาวันนี้ไอ้เราก็จำไม่ได้ว่า ที่มันหาเจอเป็น Plugin ตัวไหน ก็เลยเป็นสาเหตุให้ลองมาหาเองว่ามี Plugin ตัวไหนที่ถูกจริตเรา แล้วใช้กำหนดเงื่อนไขการแสดงผลในหน้าที่เราต้องการได้มั้ย ก็มาจบที่ตัวนี้ละ Widget Logic

Widget Logic

หลังจากติดตั้ง Plugin ตัวนี้แล้ว ไม่ต้องไปมองหาว่ามันจะไปอยู่ที่เมนูไหน เพราะมันจะไปอยู่ที่หน้าจัดการ Widget ที่เมนู Appearance => Widgets ลองดูตัวอย่างตามรูปละกัน

Pic1
ส่วนของ Widget Logic ที่เพิ่มขึ้นมา

หลายคนอาจจะงงว่า แล้วเราจะใส่อะไรลงไปช่อง Widget Logic ที่เพิ่มขึ้นมา ให้ไปดูที่ Conditional Tags ของ WordPress ได้เลยครับ

คราวนี้มาลองใส่ไปว่า is_home() ซึ่งถ้าใน Reading Settings ของเราไม่ได้ตั้งค่าอะไร มันก็คือหน้าแรกนั่นละ แต่ถ้าเราไปเลือกหน้าไหนในส่วนของ Front Page หน้าแรกของเราต้องใช้เป็น is_front_page() แทนนะครับ

Pic2
อันนี้ตั้งชื่อ Title ให้เวลาสังเกตผล จะได้ดูง่ายๆ

ซึ่งในกรณีนี้ ถ้าเราไปที่หน้าแรก จะต้องมี Widget ที่มีหัวข้อ Widget Logic ปรากฎอยู่

Pic3
หน้าแรกของเรามี Widget หัวข้อ Widget Logic อยู่ด้านขวา

คราวนี้ลองเข้าไปที่หน้า Archive ของเว็บบ้าง จะเห็นว่า Widget ที่มีหัวข้อ Widget Logic หายไป

Pic4
ในหน้า Archive จะเห็นว่า Widget หัวข้อ Widget Logic หายไป

ซึ่งเราก็สามารถปรับเงื่อนไขต่างๆ ได้แล้วแต่เราต้องการ จะใช้ && หรือ || หรือ ! ก็แล้วแต่เงื่อนไขที่จะให้แสดงผลของแต่ละคนเลย

[WordPress] Advanced Access Manager

Advanced Access Manager นั้นเป็น Plugin สำหรับจัดการ User Roles ใน WordPress ซึ่งมันสามารถปรับเปลี่ยนสิทธิของ User Roles เดิมที่มีอยู่ของ WordPress จากที่ได้พูดถึงใน [WordPress] User Roles การกำหนดสิทธิใน WordPress และยังสามารถสร้าง User Roles ขึ้นมาใหม่ เพื่อให้ไม่ทับซ้อนกับของเดิม และง่ายกับการจัดการ User ของเว็บเรา

วิธีการใช้งาน Advanced Access Manager

เมื่อเราติดตั้ง Plugin แล้วจะมีเมนูใหม่คือ AAM ซึ่งใช้สำหรับปรับค่าต่างๆ การ Plugin ตัวนี้
Advanced Access Manager : Menu
โดยส่วนการควบคุมของ Plugin ตัวนี้จะมีแบ่งออกมาเป็น 3 ส่วนหลักๆ ดังรูป
Advanced Access Manager : Panel

เลือกเมนูที่จะแสดงผล

เราปรับแต่งเมนูที่จะแสดงผลในแต่ละ User Roles ได้ ตัวอย่างเช่น ใน User Roles : Editor นั้น เราอยากจะซ่อนเมนู Comments และซ่อนเมนูย่อย Categories, Tags ในเมนู Posts สามารถคลิกที่หัวข้อที่จะจัดการเมนู และติ๊กเลือกได้เลย
Advanced Acccess Manager : Manage Menu 1

Advanced Acccess Manager : Manage Menu 2
หลังจากนั้นก็เลือก Save ในส่วนที่ 3 หรือถ้าหลังจาก Save ไปแล้ว เราสามารถเปลี่ยนให้ค่ากลับไปยังค่าพื้นฐานเดิมของ WordPress ก็แค่เลือกที่ Roleback

Advanced Access Manager : Save

ปรับแต่งความสามารถของแต่ละ User Roles

โดยการปรับแต่งความสามารถ หรือสิทธิของแต่ละ User Roles นั้น ให้ดูในส่วนที่ 1 ในหัวข้อ Capability โดยแต่ละตัวใช้กำหนดสิทธิในการทำอะไรได้บ้างนั้น ดูได้จาก Roles and Capabilities
Capability

เพิ่ม User Roles

ถ้ามองไปที่ส่วนที่ 2 จะเห็นว่าเราสามารถปรับแต่งความสามารถของแต่ละ User Roles ได้จากการเลือกที่ไอคอนที่เหมือนเฟือง และเรายังสามารถเพิ่ม User Roles ขึ้นมาเป็นของตัวเองได้ที่ไอคอนเครื่องหมายบวก

Manage User

ซึ่งเราสามารถตั้งชื่อ และเลือกได้ว่าจะให้มีสิทธิเหมือนกับของเก่าตัวไหน

Create New User Roles

ก็ลองนำ Plugin ตัวนี้ไปประยุกต์ใช้งานกันดูละกันครับ เพราะจริงๆ ความสามารถของ Plugin ตัวนี้มันมีมากกว่านั้น ขึ้นอยู่กับว่าเราจะเข้าใจการทำงานของ Plugin มันมากแค่ไหน