วิธีเพิ่มตัวกรองโพสต์ไปยังไซต์ WordPress ของคุณอย่างง่ายดาย

เผยแพร่แล้ว: 2015-01-25

คำขอที่พบบ่อยที่ฉันพบคือความสามารถในการให้ผู้ใช้กรองหรือจัดเรียงโพสต์ที่ส่วนหน้าของเว็บไซต์ของตน

บางทีผู้ใช้ต้องการดูโพสต์ตามลำดับตัวอักษรหรืออาจเห็นเฉพาะโพสต์ที่มีรูปขนาดย่อ? สิ่งนี้เหมาะสมแล้วสำหรับโพสต์ปกติ แต่อาจมีความหมายมากกว่านั้นในกรณีของผลิตภัณฑ์ รูปภาพ หรือเนื้อหาประเภทอื่นๆ

ในโครงการ WordPress วันหยุดสุดสัปดาห์วันนี้ ฉันจะให้บทสรุปโดยย่อเกี่ยวกับวิธีการใช้งานคุณลักษณะนี้ในธีม Twenty Fifteen มาแตกกัน!

  • การสร้างธีมลูก
  • การสร้างการควบคุม
  • การปรับเปลี่ยนแบบสอบถาม
  • แบบฟอร์มที่ชาญฉลาด
  • พฤติกรรมของ WordPress
  • บทสรุป

การสร้างธีมลูก

และเช่นเคย คุณต้องมีธีมเด็ก เรามีคำแนะนำเกี่ยวกับธีมย่อยที่นี่ใน WPMU DEV ฉันขอแนะนำให้อ่านหากคุณไม่คุ้นเคยกับธีมย่อย

การสร้างการควบคุม

มาเพิ่มตัวควบคุมสามตัว: ตัวควบคุมสำหรับเรียงลำดับโพสต์ ตัวควบคุมสำหรับกำหนดทิศทางการจัดเรียง และอีกตัวสำหรับแสดงเฉพาะโพสต์ที่มีรูปขนาดย่อ

ขั้นตอนแรกคือการคัดลอก index.php ของธีมหลักไปยังธีมย่อยของเรา

เปิดไฟล์ index.php ในธีมลูกและวาง HTML ต่อไปนี้ใต้คอนเทนเนอร์หลัก (ซึ่งควรอยู่ในบรรทัดที่ 20):

กำลังโหลดส่วนสำคัญ e12c354bc6c9c95c497d

และนี่คือสิ่งที่ดูเหมือนที่ส่วนหน้า:

แบบฟอร์ม
ยังไม่สวยแต่ฟอร์มเราถูกที่

อย่างที่คุณเห็นเรากำลังขาดสไตล์เล็กน้อย มาแก้ปัญหานี้โดยการเพิ่มสไตล์ลงในสไตล์ชีต:

กำลังโหลดส่วนสำคัญ e12c354bc6c9c95c497d
ฟิลเตอร์สไตล์
ทำงานได้มากกว่านี้แต่ดูดีกว่ามาก

ปฏิกิริยาที่ฉันได้ยินบ่อยจากผู้ใช้ใหม่ถึงการเขียนโปรแกรมคือ: “เขารู้ได้อย่างไรว่านี่คือสไตล์ที่จะทำให้มันกลมกลืนกับธีม”

วิธีแก้ปัญหาค่อนข้างง่าย: ฉันโกง ฉันใช้เครื่องมือสำหรับนักพัฒนาซอฟต์แวร์ใน Chrome เพื่อตรวจสอบองค์ประกอบบทความทั่วไป ในกรณีนี้ ให้ฉันดูว่าองค์ประกอบได้รับเงากล่องและระยะขอบอย่างไร และฉันเพียงแค่ใช้กฎเหล่านี้กับองค์ประกอบของฉันเอง

การปรับเปลี่ยนแบบสอบถาม

ให้เลือก "เรียงตามชื่อ" "จากน้อยไปมาก" และ "โพสต์ที่มีภาพขนาดย่อ" และส่งแบบฟอร์ม คุณควรเห็นการเปลี่ยนแปลงจริง ๆ โดยไม่ต้องทำอะไรกับโค้ด

มาดูกันว่าทำไม เรามาตรวจสอบ URL กัน ควรเป็นดังนี้:

 http://yourdomain.com/?orderby=post_title&order=DESC&thumbnail=only_thumbnailed

สามารถเรียกคืนข้อมูลอันละเอียดอ่อนได้ในสคริปต์ PHP ของเราโดยใช้ตัวแปร $_GET WordPress รู้แล้วว่าพารามิเตอร์ order และ orderby หมายถึงอะไร และใช้พารามิเตอร์เหล่านี้ในการสืบค้นเริ่มต้น เป็นผลให้ถ้าเราต้องการเพียงการสั่งซื้อและทิศทางการสั่งซื้อเราก็ทำเสร็จแล้ว

เยี่ยมมาก แต่อีกครั้ง ฉัน รู้ เรื่องนี้ได้อย่างไร ฉันสามารถใช้ "order_by" เป็นพารามิเตอร์แทน "orderby" ได้ ในกรณีนี้ WordPress ไม่ได้ทำตามความตั้งใจของเรา ฉันได้ดูเอกสาร WP_Query ใน WordPress Codex ซึ่งมีพารามิเตอร์มากมาย ซึ่งหลายพารามิเตอร์สามารถใช้ใน URL ได้

ตอนนี้ มาใช้งานพารามิเตอร์ภาพย่อของโพสต์ของเรา โพสต์มีภาพขนาดย่อหากมีข้อมูลเมตาที่มีคีย์ _thumbnail_id เชื่อมโยงอยู่ เราจำเป็นต้องแก้ไขการสืบค้นข้อมูลเพื่อให้แน่ใจว่ามีการพิจารณาสิ่งนี้ ลองทำสิ่งนี้ตอนนี้ด้วย query_posts()

วางโค้ดต่อไปนี้เหนือฟังก์ชัน get_header() ที่ด้านบนของไฟล์:

กำลังโหลดส่วนสำคัญ e12c354bc6c9c95c497d

เรารวมพารามิเตอร์ของข้อความค้นหาเดิมเข้ากับพารามิเตอร์ใหม่ของเรา ซึ่งส่งผลให้มีโพสต์ชุดอื่น แบบฟอร์มของเราใช้งานได้แล้ว แต่จำการเลือกของเราไม่ได้ มาแก้ไขด้วยการเขียนแบบฟอร์มของเราใหม่และใช้ PHP บางส่วน

แบบฟอร์มที่ชาญฉลาด

นอกจากการแสดงรายการตัวเลือกทั้งหมดของคำสั่งตามตัวเลือกแล้ว เรายังต้องมีวิธีระบุว่าตัวใดถูกเลือก หากเราทำสิ่งนี้โดยไม่วนซ้ำ มันจะมีลักษณะดังนี้:

กำลังโหลดส่วนสำคัญ e12c354bc6c9c95c497d

คุณเข้าใจสิ่งเหล่านั้นหรือไม่? ฉันไม่โทษคุณ! ภายในแต่ละตัวเลือก เรากำลังตรวจสอบว่าค่าที่เลือกในปัจจุบันเท่ากับค่าของตัวเลือกหรือไม่ หากเป็นเช่นนั้น เราจะส่งออกคุณสมบัติที่เลือก มาทำให้สิ่งนี้สะอาดขึ้นมากด้วยการวนซ้ำ:

กำลังโหลดส่วนสำคัญ e12c354bc6c9c95c497d

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

กำลังโหลดส่วนสำคัญ e12c354bc6c9c95c497d

เสร็จเรียบร้อย. แบบฟอร์มควรจำการเลือกของเราตามตัวแปร $_GET ใน URL

พฤติกรรมของ WordPress

จำได้ไหมว่าฉันพูดว่าฉันรู้ว่าใช้ "order" และ "orderby" เพราะฉันดูเอกสาร WP_Query หรือไม่? นี่เป็นแนวทางปฏิบัติที่ดี แต่อาจนำไปสู่ผลลัพธ์ที่ไม่คาดคิด ค้นหาตัวทากของหมวดหมู่ที่คุณมี เช่น หมวดหมู่นี้คือ “เวิร์ดเพรส”

ตอนนี้ใช้ URL ต่อไปนี้: http://yourwebsite.com/?category_name=wordpress คุณควรเห็นหมวดหมู่ของคุณที่เก็บถาวรโดยแสดงรายการบทความ WordPress ทั้งหมดของคุณ นี่เป็นเรื่องปกติ แต่เรามีปัญหาสองประการ:

หากคุณเปิดลิงก์ถาวรไว้ (ซึ่งควร) หน้านั้นจะถูกเปลี่ยนเส้นทางไปยัง URL ใหม่ ซึ่งส่วนใหญ่น่าจะเป็น http://yourwebsite.com/category/wordpress ตัวกรองของเราจะไม่ปรากฏให้เห็น เนื่องจากไฟล์ archive.php จัดการมุมมองนี้ ไม่ใช่ index.php นอกจากนี้ ชื่อหมวดหมู่ของเราจะไม่ถูกส่งผ่านเป็นพารามิเตอร์ URL ดังนั้น เราจึงจำเป็นต้องใช้กลอุบายเพิ่มเติมเพื่อให้ตัวกรองของเราทำงานได้

วิธีลัดในการทำงานนี้คือจงใจ ไม่ ใช้พารามิเตอร์เดียวกันกับที่ WordPress ใช้ คุณสามารถส่งชื่อหมวดหมู่โดยใช้พารามิเตอร์ catname ใน URL เนื่องจาก WordPress จะไม่รับสิ่งนี้ จากนั้น คุณสามารถป้อนข้อมูลนี้ไปยังแบบสอบถามโดยใช้ชื่อพารามิเตอร์ที่ถูกต้อง บางอย่างเช่นนี้:

กำลังโหลดส่วนสำคัญ e12c354bc6c9c95c497d

ทางเลือกอื่นคือการใช้ฟังก์ชันแทนการแสดงฟอร์มของเราใน index.php ตามที่เป็นอยู่ คุณจะต้องตรวจสอบหมวดหมู่จากแบบสอบถามของ WordPress และแสดงการเลือกปัจจุบันตามนั้น

บทสรุป

การเพิ่มตัวกรองของคุณเองนั้นไม่ได้ยากขนาดนั้นแต่ต้องอาศัยการเล่นซอเล็กน้อย ในกรณีของเรา คุณอาจต้องการตรวจสอบให้แน่ใจว่าการแบ่งหน้าจะถูกลบออกเมื่อลำดับถูกตั้งค่าเป็นแบบสุ่ม มันสามารถถูกแทนที่ด้วยปุ่ม "แสดงความสุ่มมากขึ้น" ซึ่งเพียงแค่โหลดหน้าซ้ำ

หวังว่าบทความนี้จะให้ข้อมูลพื้นฐานแก่คุณเกี่ยวกับวิธีการทำสิ่งนี้ให้สำเร็จด้วยตัวคุณเอง และคุณจะสามารถสร้างตัวกรองที่คุณต้องการได้

หากคุณมีคำถามใด ๆ เกี่ยวกับโครงการนี้ อย่าลังเลที่จะถามในความคิดเห็น
แท็ก: