การแสดงประเภทโพสต์ที่กำหนดเอง – เทมเพลตและการสืบค้น
เผยแพร่แล้ว: 2016-09-26นี่เป็นบทความที่ 3 และเป็นบทความสุดท้ายของซีรีส์เรื่อง Custom Post Types (CPT) หัวข้อที่เราพูดถึงในสองครั้งแรกคือ:
- ประเภทโพสต์ที่กำหนดเอง (วิธีสร้าง)
- อนุกรมวิธานที่กำหนดเอง
ในบทความแรกและบทความที่สอง เราได้ลงทะเบียนประเภทโพสต์ที่กำหนดเองของ ข้อความรับรอง และการจัดหมวดหมู่แบบกำหนดเองของ testimonial_service ตอนนี้เราต้องแสดงข้อความรับรองบนเว็บไซต์ของเรา ดังนั้นเราจะมาดูวิธีสร้างเทมเพลตสำหรับคำรับรองของเรา วิธีสืบค้น และวิธีแสดงที่ใดก็ได้บนเว็บไซต์ของเรา
เทมเพลตประเภทโพสต์แบบกำหนดเองเริ่มต้น
เราสร้าง CPT ของเราโดยตั้งค่าพารามิเตอร์ has_archive
เป็น true ซึ่งจะแสดงคำรับรองทั้งหมดใน หน้าเก็บถาวร
WordPress ใช้ลำดับชั้นของเทมเพลตเพื่อแสดงเนื้อหาประเภทต่างๆ สำหรับประเภทโพสต์ที่กำหนดเอง จะมองหา:
archive-{post_type}.php
เดี่ยว-{post_type}.php
หากไม่ได้กำหนดเทมเพลตเหล่านี้ในธีม ก็จะมองหาเทมเพลตทั่วไป:
archive.php
single.php
หากไม่ได้กำหนดเทมเพลตเหล่านี้ไว้ เทมเพลตนั้นจะมีค่าเริ่มต้นเป็นเทมเพลต index.php
ในกรณีของเรา ธีม Shaka มี single.php แต่ไม่มีเทมเพลต archive.php ซึ่งหมายความว่าตามค่าเริ่มต้นจะใช้เทมเพลต single.php สำหรับหน้ารับรองหน้าเดียว นอกจากนี้ยังจะใช้เทมเพลต index.php เพื่อแสดงข้อความรับรองทั้งหมดในหน้าเอกสารรับรอง
ข้อความรับรองจะปรากฏใน หน้าเอกสารรับรอง ซึ่งจะอยู่ในหน้านี้:
http://your-domain-goes-here.com/ ?post_type=testimonials
หากคุณเปิดใช้งานลิงก์ถาวรไว้ คุณสามารถเข้าถึงหน้าด้วย URL นี้:
http://your-domain-goes-here.com/ ข้อความรับรอง
(หมายเหตุ: หากลิงก์ถาวรใช้ไม่ได้ผล ให้ไปที่ wp-admin -> Settings -> Permalinks แล้วตั้งค่าตามที่คุณต้องการและบันทึกการตั้งค่า)
อันดับแรก เราควรเขียนคำรับรองในคำ รับรอง CPT ที่ลงทะเบียนใหม่ ดังนั้นเราจึงมีข้อมูลบางส่วนที่จะแสดง ฉันได้เพิ่มข้อความรับรอง 3 รายการ และนี่คือลักษณะเริ่มต้นของหน้าเอกสารรับรองที่จัดเก็บถาวรในธีม Shaka ของเรา:
อย่างที่คุณเห็นเลย์เอาต์นั้นใช้ได้ แต่ข้อมูลบางส่วนที่แสดงนั้นไม่จำเป็น เช่น "โดยผู้เขียน" และวันที่ นอกจากนี้ อนุกรมวิธานที่กำหนดเอง testimonial_service จะไม่แสดง ดังนั้นเราจะเพิ่มสิ่งนั้นในเทมเพลตที่กำหนดเองของเรา
การสร้างเทมเพลตที่กำหนดเองสำหรับ CPT . ของเรา
ดังที่กล่าวไว้ในส่วนที่แล้ว เราต้องสร้างเทมเพลตสองแบบ archive-testimonials.php และ single-testimonials.php เราจะสร้างเฉพาะเทมเพลต archive-testimonials.php สำหรับตัวอย่างนี้
เราควรสร้างไฟล์เหล่านี้ในธีมย่อย แต่เพื่อความง่าย ฉันจะเพิ่ม ไฟล์ archive-testimonials.php ในธีม Shaka โดยตรง ฉันจะคัดลอกไฟล์ index.php ซึ่งจะทำหน้าที่เป็นจุดเริ่มต้น และเปลี่ยนชื่อเป็น archive-testimonials.php
ฉันได้ลบ "โดยผู้เขียน" รหัสวันที่ และแถบด้านข้างแล้ว ฉันได้เพิ่มรูปภาพเด่นและอนุกรมวิธานแบบกำหนดเองของ บริการรับรอง ฉันเคยใช้ฟังก์ชัน the_terms
WP ที่แสดงรายการคำศัพท์เฉพาะของ WP ในกรณีของเราคือการจัดหมวดหมู่แบบกำหนดเอง

ฉันรู้ว่าในเชิงสุนทรียศาสตร์มันดูไม่สวยงาม แต่นั่นไม่ใช่ประเด็น เราต้องการสร้างโครงสร้าง/เลย์เอาต์ที่แตกต่างกันของหน้าเอกสารรับรองที่มีข้อมูลต่างกัน และนั่นก็สำเร็จในไม่กี่นาที
เราสามารถทำเช่นเดียวกันสำหรับหน้าคำรับรองเดียว เราจะคัดลอกไฟล์ single.php และเปลี่ยนชื่อเป็น single-testimonials.php และเปลี่ยนรหัสจากที่นั่น
ฉันไม่ได้แสดงโค้ดใดๆ ที่นี่ เนื่องจากตัวอย่างโค้ดจะแตกต่างกันไปในแต่ละธีม และจำเป็นต้องมีความรู้พื้นฐานเกี่ยวกับ HTML และ PHP ในการสร้างโค้ดเทมเพลต แต่การแก้ไขเทมเพลตที่มีอยู่จะง่ายกว่าเสมอ นั่นคือเหตุผลที่เราใช้ index.php เป็นจุดเริ่มต้น
การค้นหาประเภทโพสต์ที่กำหนดเอง
อีกวิธีในการแสดงประเภทโพสต์ที่กำหนดเองในเว็บไซต์ของคุณคือการใช้คลาส WP_Query เพื่อดึงประเภทโพสต์ที่กำหนดเอง (วนซ้ำและแสดง)
สมมติว่าคุณต้องการสร้างวิดเจ็ตที่แสดงคำรับรองทั้งหมดในภาพหมุน หรือว่าคุณต้องการแสดงคำรับรองที่เกี่ยวข้อง (อนุกรมวิธานบริการรับรองเดียวกัน) ในหน้าคำรับรองเดียว คุณจะใช้คลาส WP_Query
เพื่อดึงข้อความรับรองที่เกี่ยวข้อง
ในตัวอย่างของเรา เราจะดึงข้อความรับรองทั้งหมดที่อยู่ในอนุกรมวิธานแบบกำหนดเองของบริการ "ดำน้ำ" และเราจะแสดงผลในรายการ:
<?php $args = array( 'post_type' => 'testimonials', 'post_status' => 'publish', 'tax_query' => array( array( 'taxonomy' => 'testimonial_service', 'field' => 'slug', 'terms' => 'diving' ) ) ); $testimonials = new WP_Query( $args ); if( $testimonials->have_posts() ) : ?> <ul> <?php while( $testimonials->have_posts() ) : $testimonials->the_post(); ?> <li><?php printf( '%1$s - %2$s', get_the_title(), get_the_content() ); ?></li> <?php endwhile; wp_reset_postdata(); ?> </ul> <?php else : esc_html_e( 'No testimonials in the diving taxonomy!', 'text-domain' ); endif; ?>
ดังที่คุณเห็นในโค้ดด้านบน ขั้นแรกให้เตรียมอาร์เรย์ของการตั้งค่าอาร์กิวเมนต์ ซึ่งใช้ในการกำหนดค่าเริ่มต้น WP_Query
ในภายหลัง ในอาร์เรย์นี้ เรากำหนดให้ดึงข้อมูล:
- `คำรับรอง' CPT
- รับเฉพาะคำรับรองที่เผยแพร่
- รับเฉพาะข้อความรับรองที่อยู่ในอนุกรมวิธานแบบกำหนดเองสำหรับการดำน้ำ `testimonial_service'
เมื่อมีการเรียก new WP_Query
ข้อความรับรองที่เกี่ยวข้องจะถูกดึงมาและเราสามารถวนซ้ำได้ ในลูปเราเพียงแค่แสดงชื่อ (ซึ่งฉันใช้สำหรับชื่อผู้แต่ง) และเนื้อหาของคำรับรองในรายการอย่างง่าย นอกจากนี้ เราควรใช้ฟังก์ชัน wp_reset_postdata
เสมอ เพื่อรีเซ็ตกลับเป็นลูปเดิม เมื่อเราใช้ลูป WP_Query เพื่อให้แน่ใจว่าทุกอย่างทำงานหลังจากที่เราเสร็จสิ้นการสืบค้นข้อมูลที่กำหนดเองของเรา
นี่เป็นพื้นฐานของ Custom Post Types และฉันหวังว่าคุณจะเข้าใจวิธีการทำงาน เช่นเดียวกับหัวข้ออื่นๆ มักจะมีรายละเอียดเพิ่มเติมอยู่เสมอ ฉันแนะนำให้คุณอ่านเอกสาร WP อย่างเป็นทางการสำหรับฟังก์ชันและคลาสทั้งหมดที่เราใช้ในตัวอย่างเหล่านี้ แจ้งให้เราทราบในส่วนความคิดเห็นด้านล่างหากคุณมีคำถามใด ๆ