การสร้างประเภทโพสต์ที่กำหนดเอง

เผยแพร่แล้ว: 2016-08-23

WordPress ไม่ได้เป็น " แค่บล็อก " มาระยะหนึ่งแล้ว คุณลักษณะสำคัญประการหนึ่งที่ช่วยแปลงเป็นระบบจัดการเนื้อหา (CMS) ที่เหมาะสมคือ Custom Post Types

นี่เป็นบทความแรกของซีรีส์ 3 ตอนในหัวข้อประเภทโพสต์ที่กำหนดเอง (CPT) เหล่านี้เป็นหัวข้อที่เราจะหารือในสองต่อไป:

  • อนุกรมวิธานที่กำหนดเอง
  • การแสดงประเภทโพสต์ที่กำหนดเอง (เทมเพลตและการสอบถาม)

แต่สำหรับตอนนี้ มาดูประเภทของโพสต์ที่กำหนดเองอย่างละเอียดยิ่งขึ้นและวิธีการตั้งค่า

ประเภทโพสต์ที่กำหนดเองคืออะไร

ตามค่าเริ่มต้น WordPress จะใช้ประเภทโพสต์เหล่านี้:

  • โพสต์
  • หน้าหนังสือ
  • เอกสารแนบ
  • การแก้ไข
  • รายการเมนู

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

ทำไมคุณถึงใช้อย่างใดอย่างหนึ่ง?

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

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

สมมติว่าคุณกำลังเขียนบล็อกอาหาร คุณมักจะโพสต์คำวิจารณ์เกี่ยวกับร้านอาหาร แต่คุณต้องการโพสต์สูตรอาหารของคุณเองด้วย สูตรอาหารจะทำให้ประเภทโพสต์ที่กำหนดเองได้ อย่างสมบูรณ์แบบ เพราะคุณอาจต้องมีเลย์เอาต์ที่แตกต่างจากโพสต์ปกติ อาจมีฟิลด์ที่กำหนดเองบางฟิลด์ เช่น ส่วนผสม เป็นต้น ด้วยการแนะนำสูตร CPT ส่วนบล็อกจะมีเฉพาะโพสต์ปกติของคุณ และสูตรอาหารของคุณจะมีส่วนของตัวเอง (หน้าที่เก็บสูตรของตัวเอง) ซึ่งจะ ทำให้ ผู้เข้าชมที่ต้องการดูสูตรอาหารของคุณเท่านั้นได้ง่ายขึ้น

ในชุดบทความนี้ เราจะสร้าง CPT รับรองสำหรับธีม Shaka ของเรา สมมติว่าผู้ใช้ต้องการมีหน้าที่สามารถแสดงคำรับรองของลูกค้าทุกรายการ เขาต้องการเพิ่มฟิลด์แบบกำหนดเองสองสามฟิลด์ให้กับประเภทโพสต์แบบกำหนดเองนี้ และเขายังต้องการเลย์เอาต์อื่นเพื่อแสดงข้อความรับรองเหล่านี้ ก่อนอื่น มาดูวิธีการ ลงทะเบียน ประเภทโพสต์ที่กำหนดเองกันก่อน

คุณจะสร้างประเภทโพสต์ที่กำหนดเองได้อย่างไร

มี สองวิธี ในการสร้างประเภทโพสต์ที่กำหนดเองใหม่

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

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

สร้างประเภทโพสต์ที่กำหนดเองด้วยปลั๊กอิน – วิธีง่ายๆ

หากคุณต้องการเพิ่มประเภทโพสต์ที่กำหนดเอง อย่างรวดเร็วและง่ายดาย ในไซต์ของคุณ คุณควรใช้ปลั๊กอินที่มีฟังก์ชันดังกล่าว น่าจะเป็นปลั๊กอินที่นิยมใช้กันมากที่สุดนั่นคือ Custom Post Type UI ซึ่งฟรีและใช้งานง่าย มาตั้งค่ากัน:

  1. ติดตั้งและเปิดใช้งานปลั๊กอิน Custom Post Type UI จากแดชบอร์ด wp-admin ของคุณ
  2. เมื่อคุณเปิดใช้งานปลั๊กอินแล้ว รายการเมนูผู้ดูแลระบบ CPT UI จะพร้อมใช้งาน ไปที่ CPT UI -> เพิ่ม/แก้ไขประเภทโพสต์
  3. ที่นี่ คุณจะพบกับการตั้งค่ามากมายที่คุณสามารถนำไปใช้เพื่อปรับแต่ง CPT ของคุณ เราจะไม่พูดถึงรายละเอียดทั้งหมดในบทความนี้ แต่มีไอคอนคำแนะนำเครื่องมืออยู่ถัดจากป้ายกำกับการตั้งค่าแต่ละป้ายเพื่ออธิบายว่าแต่ละการตั้งค่าทำอะไร มากำหนดสิ่งที่เราต้องการสำหรับกรณีการใช้งานของเรา (CPT รับรอง)
  4. ใส่กระสุน: ข้อความรับรอง, ป้ายพหูพจน์: ข้อความรับรองและป้ายเอกพจน์: ข้อความรับรอง,
  5. คุณสามารถคลิกที่ปุ่มแก้ไขป้ายกำกับเพิ่มเติมเพื่อตั้งค่าป้ายกำกับที่แม่นยำยิ่งขึ้น แต่เราสามารถข้ามสิ่งนี้และกลับมาอีกครั้งหากเราพบปัญหาในภายหลัง
  6. การตั้งค่าเริ่มต้นทั้งหมดนั้นใช้ได้สำหรับกรณีการใช้งานของเรา เราจะเพิ่มการสนับสนุนสำหรับฟิลด์ที่กำหนดเอง (เลือกช่องทำเครื่องหมายฟิลด์ที่กำหนดเองในส่วนการสนับสนุน)
  7. คลิกเพิ่มประเภทโพสต์เพื่อสร้างประเภทโพสต์ที่กำหนดเอง

ทันทีที่เราสร้างประเภทโพสต์ที่กำหนดเอง รายการเมนูแดชบอร์ดคำรับรอง wp-admin ใหม่จะปรากฏขึ้น ขณะนี้ เราสามารถสร้างคำรับรอง ใหม่ พร้อมช่องทั้งหมดที่เลือกเมื่อเราสร้างประเภทโพสต์ที่กำหนดเอง (ช่องชื่อ ตัวแก้ไข รูปภาพเด่น และช่องกำหนดเอง)

CPT - เพิ่มข้อความรับรองใหม่

เราสามารถกำหนดอนุกรมวิธานสำหรับประเภทโพสต์ที่กำหนดเองนี้ได้ แต่เราจะกล่าวถึงในบทความ ถัดไป

สร้างประเภทโพสต์ที่กำหนดเองด้วยตนเอง – เกี่ยวข้องกับการเข้ารหัส

คุณอาจถามตัวเองว่า: หากคุณสามารถสร้างประเภทโพสต์แบบกำหนดเองด้วยปลั๊กอินได้ ทำไม ใครๆ ถึงต้องการสร้างโพสต์ด้วยตนเองด้วยโค้ด

ความสามารถในการสร้างปลั๊กอินด้วยปลั๊กอิน นั้นสะดวกมาก แต่มีบางกรณีที่คุณต้องการทำผ่านโค้ด ตัวอย่างเช่น หากคุณกำลังพัฒนาไซต์สำหรับลูกค้าของคุณและคุณไม่ต้องการให้ลูกค้าเปลี่ยนการตั้งค่าเหล่านี้ หรือหากคุณไม่ต้องการติดตั้งปลั๊กอินเพิ่มอีกหนึ่งตัวในไซต์ของเขา นอกจากนี้ หากคุณต้องการสร้างธีม (หรือธีมย่อย) สำหรับใช้ในหลายไซต์ การลงทะเบียนประเภทโพสต์ที่กำหนดเองในโค้ดจะ ง่าย กว่าการทำซ้ำขั้นตอนปลั๊กอินสำหรับทุกไซต์ มีข้อดีและข้อเสียบางประการสำหรับแต่ละวิธี ดังนั้นคุณต้องตัดสินใจว่าอะไรดีที่สุดในกรณีของคุณ

โค้ดสำหรับสร้างประเภทโพสต์ที่กำหนดเองสามารถวางในธีมได้โดยตรง (ใน functions.php ) หรือคุณสามารถสร้างปลั๊กอินใหม่และใส่โค้ด CPT ไว้ที่นั่น นี่เป็นคำถามที่สร้าง ความแตกแยก ในชุมชน WordPress ด้านหนึ่งบอกว่าควรอยู่ ใน ปลั๊กอิน ดังนั้นหากคุณเปลี่ยนธีม ข้อมูลของ CPT จะยังคงอยู่ (แต่เอาต์พุตไม่มีสไตล์และดูไม่ดีในธีมใหม่) และอีกด้านหนึ่งคิดว่าควรใส่โค้ด CPT ลงในธีม โดยตรงจะดีกว่า เพราะเป็นธีมเฉพาะและกำหนดรูปแบบไว้สำหรับธีมนี้โดยเฉพาะ

โดยส่วนตัวแล้ว ฉันคิดว่าการแยกสไตล์ (ธีม) ออกจากฟังก์ชัน (ปลั๊กอิน) จะดีกว่าเสมอ ดังนั้น การสร้างปลั๊กอินใหม่สำหรับการลงทะเบียน CPT จึงเป็นตัวเลือก ที่ดีกว่า การเพิ่มสไตล์ให้กับชุดรูปแบบใหม่จะทำให้เอาต์พุต CPT ดูดีได้ง่ายกว่าการสูญเสียข้อมูลของ CPT เนื่องจากการเปลี่ยนไปใช้ธีมใหม่

ลงทะเบียนประเภทโพสต์ที่กำหนดเองด้วยรหัส

ฉันสัญญาเคล็ดลับเรียบร้อยใช่ไหม ที่จริงแล้ว คุณ ไม่จำเป็นต้อง เขียนโค้ดเพื่อให้สามารถลงทะเบียนประเภทโพสต์ที่กำหนดเองผ่านโค้ดได้ นี่อาจฟังดูแปลก แต่มันเป็นเรื่องจริง คุณสามารถใช้เครื่องมือนี้ที่ generatewp.com เพื่อสร้างรหัสที่จำเป็นสำหรับการลงทะเบียน CPT สิ่งที่คุณต้องทำคือป้อนข้อมูลและสร้างรหัส ฉันทำสิ่งนี้สำหรับกรณีการใช้งานคำรับรองของเราและนี่คือสิ่งที่ออกมา:

 // Register Custom Post Type function custom_post_type_testimonials() { $labels = array( 'name' => _x( 'Testimonials', 'Post Type General Name', 'text_domain' ), 'singular_name' => _x( 'Testimonial', 'Post Type Singular Name', 'text_domain' ), 'menu_name' => __( 'Testimonials', 'text_domain' ), 'name_admin_bar' => __( 'Testimonials', 'text_domain' ), 'archives' => __( 'Item Archives', 'text_domain' ), 'parent_item_colon' => __( 'Parent Item:', 'text_domain' ), 'all_items' => __( 'All Items', 'text_domain' ), 'add_new_item' => __( 'Add New Item', 'text_domain' ), 'add_new' => __( 'Add New', 'text_domain' ), 'new_item' => __( 'New Item', 'text_domain' ), 'edit_item' => __( 'Edit Item', 'text_domain' ), 'update_item' => __( 'Update Item', 'text_domain' ), 'view_item' => __( 'View Item', 'text_domain' ), 'search_items' => __( 'Search Item', 'text_domain' ), 'not_found' => __( 'Not found', 'text_domain' ), 'not_found_in_trash' => __( 'Not found in Trash', 'text_domain' ), 'featured_image' => __( 'Featured Image', 'text_domain' ), 'set_featured_image' => __( 'Set featured image', 'text_domain' ), 'remove_featured_image' => __( 'Remove featured image', 'text_domain' ), 'use_featured_image' => __( 'Use as featured image', 'text_domain' ), 'insert_into_item' => __( 'Insert into item', 'text_domain' ), 'uploaded_to_this_item' => __( 'Uploaded to this item', 'text_domain' ), 'items_list' => __( 'Items list', 'text_domain' ), 'items_list_navigation' => __( 'Items list navigation', 'text_domain' ), 'filter_items_list' => __( 'Filter items list', 'text_domain' ), ); $args = array( 'label' => __( 'Testimonials', 'text_domain' ), 'labels' => $labels, 'supports' => array( 'title', 'editor', 'thumbnail', 'custom-fields' ), 'hierarchical' => false, 'public' => true, 'show_ui' => true, 'show_in_menu' => true, 'menu_position' => 5, 'show_in_admin_bar' => true, 'show_in_nav_menus' => true, 'can_export' => true, 'has_archive' => true, 'exclude_from_search' => false, 'publicly_queryable' => true, 'capability_type' => 'page', ); register_post_type( 'testimonials', $args ); } add_action( 'init', 'custom_post_type_testimonials' );

… โค้ด PHP ที่ถูกต้องสมบูรณ์แบบ ที่คุณสามารถใช้ได้ในโครงการของคุณ ตามที่กล่าวไว้ก่อนหน้านี้ คุณสามารถใส่โค้ดนี้ในปลั๊กอินที่สร้างขึ้นใหม่ หรือจะใส่ลงในไฟล์ functions.php ของธีมก็ได้ เพื่อความเรียบง่ายฉันเลือกใช้อย่างหลัง ฉันใส่รหัสนี้ในไฟล์ functions.php ของธีม และเมนูข้อความรับรอง wp-admin ก็ปรากฏขึ้น และตอนนี้ฉันสามารถสร้างคำรับรองใหม่ได้ (เช่นเดียวกับในวิธีปลั๊กอินด้านบน)

คุณยังสามารถตั้งค่าไอคอนอื่นสำหรับประเภทโพสต์ที่คุณกำหนดเองได้ ซึ่งจะแสดงในเมนูผู้ดูแลระบบ wp คุณเพียงแค่ต้องเพิ่มบรรทัดนี้ในอาร์เรย์ $args: 'menu_icon' => 'dashicons-businessman' คุณสามารถค้นหารายการไอคอนที่เป็นไปได้ทั้งหมดได้ที่นี่: WordPress Dashicons (ขอบคุณ Alexander สำหรับเคล็ดลับนี้)

มาดูโค้ดกันดีกว่า:

  • ขั้นตอนการลงทะเบียน CPT ทั้งหมดถูกห่อหุ้มไว้ใน custom_post_type_testimonial() ซึ่งเชื่อมต่อเข้ากับ init WP hook ที่ส่วนท้ายของตัวอย่างด้วยโค้ดบรรทัดนี้: add_action( 'init', 'custom_post_type_testimonials' ); . การเรียก add_action นี้เป็นการโทรครั้งสุดท้ายที่กำหนดทุกอย่างให้เคลื่อนไหวและทำให้ WordPress กลายเป็นเรื่องมหัศจรรย์
  • บล็อกแรกของโค้ดในฟังก์ชันคืออาร์เรย์ของข้อมูลที่เรียกว่า $labels ซึ่งเก็บสตริงการแปลสำหรับประเภทโพสต์ที่กำหนดเองนี้
  • บล็อกที่สองคืออาร์เรย์ของอาร์กิวเมนต์ที่ใช้สำหรับการลงทะเบียน CPT คุณสามารถกำหนดการตั้งค่าทั้งหมดสำหรับ CPT ได้ที่นี่ ฟิลด์ใดที่ CPT ควรสนับสนุน ควรเปิดเผยต่อสาธารณะ ตำแหน่งของเมนูผู้ดูแลระบบ wp ควรมีหน้าเก็บถาวร เป็นต้น หากต้องการดูชุดตัวเลือกทั้งหมด โปรดไปที่หน้า WP codex นี้
  • บรรทัดสุดท้ายของฟังก์ชันคือ register_post_type( 'testimonials', $args ); . การดำเนินการนี้จะลงทะเบียนประเภทโพสต์ที่กำหนดเอง 'ข้อความรับรอง' ด้วยการตั้งค่าที่เราระบุไว้ใน $args ด้านบน

แค่นั้นแหละ! เราได้ลงทะเบียนประเภทโพสต์ที่กำหนดเองด้วยโค้ด PHP เล็กน้อย

การปรับปรุงเดียวที่ฉันจะเปลี่ยนแปลงในโค้ดที่สร้างขึ้นคือการใช้ฟังก์ชันหลบหนีความเป็นสากล ดังนั้นแทนที่จะใช้ _x() และ __() ฉันจะใช้ esc_html_x() และ esc_html__() เป็นการดีที่จะหลีกเลี่ยงค่าเอาต์พุต - แม้แต่สตริงการแปล - แต่นั่นเป็นหัวข้อสำหรับโพสต์บล็อกอื่น

บทความถัดไปในซีรีส์: วิธีสร้างอนุกรมวิธานที่กำหนดเอง