สร้าง WordPress Custom Post Types ด้วยตนเอง
เผยแพร่แล้ว: 2020-12-15ในบทความแรกของเราเกี่ยวกับประเภทโพสต์ที่กำหนดเองของ WordPress เราได้ศึกษาวิธีที่คุณสามารถสร้างประเภทโพสต์ที่กำหนดเองได้อย่างง่ายดายโดยใช้ปลั๊กอิน UI ของประเภทโพสต์ที่กำหนดเองที่ยอดเยี่ยม ในบทความที่สองนี้ เราจะมาดูวิธีการดำเนินการด้วยตนเอง (เช่น โดยการเข้ารหัส) เหตุใดหากการสร้างประเภทโพสต์ที่กำหนดเองนั้นง่ายมากโดยใช้ปลั๊กอิน คุณอยากจะทำเช่นนี้ไปอีกนานไหม
การใช้ปลั๊กอินเพื่อเพิ่มฟังก์ชันการทำงานที่กำหนดเองสามารถทำงานได้ดีมาก (และไลบรารีปลั๊กอินจำนวนมากที่ช่วยขยายฟังก์ชันการทำงานเป็นหนึ่งในสาเหตุที่ทำให้ WordPress เป็นที่นิยมมาก) แต่ปัญหาอาจเกิดขึ้นได้หากและเมื่อปลั๊กอินไม่ได้รับการสนับสนุน (เนื่องจากผู้เขียนปลั๊กอินเลือกที่จะไม่อัปเดตและพัฒนาต่อ) หากเกิดกรณีนี้ขึ้น คุณอาจพบว่าฟังก์ชันที่ปลั๊กอินให้มานั้นใช้งานไม่ได้อีกต่อไป ซึ่งอาจเป็นปัญหาร้ายแรงหากเว็บไซต์ของคุณสร้างขึ้นโดยใช้คุณลักษณะเฉพาะที่มีให้โดยปลั๊กอิน
ดังนั้น หากคุณสามารถเขียนโค้ดในฟังก์ชันการทำงานได้โดยตรง แทนที่จะใช้ปลั๊กอิน ก็ถือเป็นตัวเลือกที่ดีในการพิจารณา
วันนี้เราจะแนะนำวิธีการสร้างประเภทโพสต์ที่กำหนดเองโดยไม่ต้องใช้ปลั๊กอิน นอกจากนี้ เราจะสาธิตการกำหนดค่าพื้นฐานบางอย่าง เช่น การกำหนดป้ายกำกับ CPT (ประเภทโพสต์ที่กำหนดเอง) พร้อมกับสิ่งต่างๆ เช่น การเปิดใช้งานรูปภาพเด่น และอื่นๆ จากนั้นเราจะเพิ่มการจัดหมวดหมู่แบบกำหนดเอง และสุดท้ายเราจะเห็นว่าคุณสามารถแสดงเนื้อหาประเภทโพสต์ที่กำหนดเองในส่วนหน้าของเว็บไซต์ของคุณได้อย่างไร
สร้างประเภทโพสต์ที่กำหนดเอง
หากคุณติดตามบทช่วยสอนก่อนหน้านี้และยังคงติดตั้งปลั๊กอิน CPT UI อยู่ โปรดปิดใช้งานเพื่อไม่ให้เกิดความสับสนเมื่อสร้าง CPT ใหม่ด้วยตนเอง
ก่อนหน้านี้ เราจะใช้สูตรอาหารเป็นจุดสนใจสำหรับประเภทโพสต์แบบกำหนดเองใหม่ของเรา ในการเริ่มต้น สิ่งแรกที่เราต้องทำคือสร้างประเภทโพสต์ที่กำหนดเองโดยใส่โค้ดที่ถูกต้องลงในไฟล์ functions.php
ของเรา
การตั้งค่าพื้นฐาน
สำหรับตอนนี้ เราจะสร้างประเภทโพสต์ของเราโดยมีข้อโต้แย้งน้อยที่สุดโดยใช้ฟังก์ชัน register_post_type
ที่ WordPress มีให้
register_post_type( string $post_type, array|string $args = array() )
โครงสร้างของฟังก์ชันนี้ต้องใช้พารามิเตอร์สองตัว คีย์ประเภทโพสต์ซึ่งควรมีเฉพาะอักขระที่เป็นตัวอักษรพิมพ์เล็กและตัวเลขคละกัน ขีดกลาง และขีดล่าง และพารามิเตอร์ทางเลือกที่สองคือ $args
สำหรับอาร์กิวเมนต์เพิ่มเติม เราจะเน้นที่ข้อโต้แย้งบางส่วนเท่านั้นในบทความนี้ แต่ถ้าคุณต้องการทดลองเพิ่มเติม คุณสามารถค้นหารายการอาร์กิวเมนต์ทั้งหมดที่มีอยู่ในเอกสารประกอบของ WordPress ที่เกี่ยวข้อง
สำหรับวัตถุประสงค์ของบทความนี้ เราจะใช้รหัสด้านล่าง
function recipes_post_type() { register_post_type( 'recipes', array( 'labels' => array( 'name' => __( 'Recipes' ), 'singular_name' => __( 'Recipe' ) ), 'public' => true, 'show_in_rest' => true, 'supports' => array('title', 'editor', 'thumbnail') ) ); } add_action( 'init', 'recipes_post_type' );
หากคุณกำลังติดตามอยู่ ให้เปิดโปรแกรมแก้ไขข้อความที่คุณชื่นชอบ และเพิ่มโค้ดนี้ลงในไฟล์ functions.php
ของคุณ
คุณจะเห็นในโค้ดนี้ เราใช้อาร์เรย์ 'labels' เพื่อกำหนดชื่อเอกพจน์และพหูพจน์สำหรับประเภทโพสต์ของเรา อาร์กิวเมนต์ show_in_rest
เพื่อเปิดใช้งานตัวแก้ไข Gutenberg สำหรับการโพสต์สูตรอาหาร ตลอดจนอาร์กิวเมนต์ public
การโต้เถียงในที่ public
จริงๆ แล้วทำสามสิ่งที่แตกต่างกัน มันแสดงเมนูโพสต์ที่กำหนดเองของผู้ดูแลระบบ รวมถึงเมนูโพสต์ที่กำหนดเองในผลลัพธ์ของการค้นหาเว็บไซต์ และยังแสดงเมนูโพสต์ที่กำหนดเองในพื้นที่เมนูผู้ดูแลระบบ WordPress ตัวเลือกเหล่านี้สามารถแก้ไขแยกกันได้โดยใช้ show_in_nav_menus
, exclude_from_search
และ show_ui
ตามลำดับ ค่าดีฟอลต์ show_in_nav_menus
และ show_ui
สืบทอดค่า public
แต่ค่าดีฟอลต์ exclude_from_search
ตรงกันข้ามกับค่า public
เรายังใช้อาร์กิวเมนต์ supports
ซึ่งกำหนดคุณสมบัติที่โพสต์ที่กำหนดเองจะรองรับ สำหรับตอนนี้ เราจะเปิดใช้งานเฉพาะ 'ชื่อ', 'ตัวแก้ไข' และ 'ภาพขนาดย่อ' (ตัวเลือกเพิ่มเติมบางส่วนจะแสดงในบทความต่อๆ ไป)
ด้วยการเพิ่มข้อมูลโค้ดนี้ในไฟล์ functions.php ของเราและบันทึกไว้ (สำรองข้อมูลเว็บไซต์ของคุณเสมอก่อนที่จะดำเนินการเช่นนี้!) ตอนนี้คุณจะเห็นรายการเมนูใหม่ในผู้ดูแลระบบ WordPress (ในกรณีนี้คือ 'สูตรอาหาร')
ต่อไป หากเราไปที่ ลักษณะที่ปรากฏ > เมนู เราสามารถยืนยันได้ว่าได้เพิ่มสูตรอาหารเป็นตัวเลือกแล้ว สิ่งนี้เป็นการยืนยันว่าสิ่งต่าง ๆ ทำงานตามที่ควรจะเป็น
หมายเหตุ: หากคุณไปที่พื้นที่เมนูและไม่เห็นรายการเมนู 'สูตรอาหาร' เป็นไปได้ว่าไม่มีการตรวจสอบในตัวเลือกหน้าจอ ในการดำเนินการนี้ ให้ไปที่ด้านบนสุดของหน้าและเปิดแถบตัวเลือกหน้าจอ และตรวจสอบให้แน่ใจว่าได้เลือกประเภทโพสต์ที่กำหนดเองใหม่ของคุณ (สูตรในตัวอย่างนี้) แล้ว
เพิ่มอนุกรมวิธานของคุณสำหรับประเภทโพสต์ที่กำหนดเองของคุณ
มีการจัดหมวดหมู่ของ WordPress เพื่อจัดกลุ่มเนื้อหาที่คล้ายคลึงกัน ณ จุดนี้ เรามี 'สูตรอาหาร' โพสต์ที่กำหนดเอง แต่เราไม่สามารถจัดหมวดหมู่ได้ตามที่เราต้องการ ดังนั้น การสร้างหมวดหมู่แยกต่างหากสำหรับสูตรอาหารของเราจึงจะเป็นประโยชน์ ยกตัวอย่างสูตรอาหารกลุ่มตามประเภทของอาหารที่พวกเขาเป็นเจ้าของ
เพื่อให้บรรลุสิ่งนี้ เราจำเป็นต้องลงทะเบียนอนุกรมวิธาน 'อาหาร' ใหม่ จากนั้นเชื่อมโยงไปยังประเภทโพสต์ 'สูตรอาหาร'
ในการเพิ่มอนุกรมวิธาน เราใช้ฟังก์ชัน register_taxonomy()
ที่ WordPress มีให้ (ดูรายการอาร์กิวเมนต์ที่นี่)
register_taxonomy( string $taxonomy, $object_type, $args )
อาร์กิวเมนต์บังคับคือ $taxonomy
ซึ่งเป็นคีย์อนุกรมวิธาน และ $object_type
ซึ่งเป็นประเภทออบเจกต์หรืออาร์เรย์ของประเภทอ็อบเจ็กต์ที่อนุกรมวิธานควรเชื่อมโยง ในกรณีของเราคือ 'สูตร' ในพารามิเตอร์ $arg
เราจะรวมค่าที่จำเป็นสำหรับการติดป้ายกำกับอินสแตนซ์ผู้ดูแลระบบของอนุกรมวิธานของเราด้วย
function create_recipes_taxonomy() { register_taxonomy('cuisines','recipes',array( 'hierarchical' => false, 'labels' => array( 'name' => _x( 'Cuisines', 'taxonomy general name' ), 'singular_name' => _x( 'Cuisine', 'taxonomy singular name' ), 'menu_name' => __( 'Cuisines' ), 'all_items' => __( 'All Cuisines' ), 'edit_item' => __( 'Edit Cuisines' ), 'update_item' => __( 'Update Cuisines' ), 'add_new_item' => __( 'Add Cuisines' ), 'new_item_name' => __( 'New Cuisines' ), ), 'show_ui' => true, 'show_in_rest' => true, 'show_admin_column' => true, )); } add_action( 'init', 'create_recipes_taxonomy', 0 );
บูลีน show_admin_column
กำหนดว่าอนุกรมวิธานจะปรากฏเป็นคอลัมน์ในตารางรายการผู้ดูแลระบบสูตรหรือไม่
ตอนนี้ หากคุณกลับไปที่ผู้ดูแลระบบ WordPress และรีเฟรชสิ่งนี้ คุณจะเห็นอนุกรมวิธาน 'อาหาร' ในเมนูสูตรอาหาร
คุณควรเห็นคอลัมน์ 'อาหาร' ในตารางสูตรอาหาร:
การแสดงเนื้อหาประเภทโพสต์ที่กำหนดเองของคุณที่ส่วนหน้า
ณ จุดนี้คุณควรจะสามารถรวมโพสต์ที่กำหนดเองในเมนูของคุณรวมทั้งการจัดหมวดหมู่แบบกำหนดเองที่คุณสร้างขึ้นได้ เพื่อแสดงสิ่งนี้ เราได้เพิ่ม 'เมดิเตอร์เรเนียน' และ 'เม็กซิกัน' สองประเภทในเมนูอนุกรมวิธานของอาหาร สิ่งเหล่านี้จะปรากฏเป็นตัวเลือกเมนูในเมนู WordPress ของเรา ทำให้เราสามารถสร้างเมนูสูตรอาหารได้ดังที่แสดงด้านล่าง
หากคุณสร้างโพสต์สูตรอาหารและเชื่อมโยงกับหมวดหมู่อาหาร คุณควรเห็นโพสต์เหล่านั้นเมื่อคุณเลือกอาหารที่เกี่ยวข้องจากเมนู
หมายเหตุ: หากคุณพยายามดูโพสต์สูตรอาหารในส่วนหน้า คุณอาจได้รับ "404 ไม่พบ" สิ่งนี้สามารถเกิดขึ้นได้เนื่องจากต้องล้างแคช Permalink นี้เป็นเรื่องง่ายที่จะทำ เพียงไปที่การตั้งค่า > ลิงก์ถาวร แล้วบันทึกใหม่
ตอนนี้เราจะสร้างรายการเมนูอื่นสำหรับ 'สูตรอาหารทั้งหมด' โดยใช้รหัสที่กำหนดเองเพื่อแสดงที่เก็บสูตรอาหารทั้งหมดของเรา
ก่อนดำเนินการต่อ เราควรตรวจสอบให้แน่ใจว่าอาร์กิวเมนต์ที่เก็บถาวรของโพสต์ที่กำหนดเองถูกตั้งค่าเป็นจริง กลับไปที่โค้ดของคุณใน functions.php
ซึ่งคุณลงทะเบียนประเภทสูตรและเพิ่ม 'has_archive' => true,
ในอาร์เรย์อาร์กิวเมนต์
function recipes_post_type() { register_post_type( 'recipes', array( 'labels' => array( 'name' => __( 'Recipes' ), 'singular_name' => __( 'Recipe' ) ), 'public' => true, 'show_in_rest' => true, 'supports' => array('title', 'editor', 'thumbnail'), 'has_archive' => true, ) ); } add_action( 'init', 'recipes_post_type' );
หลังจากนั้น ไปที่การตั้งค่า > ลิงก์ถาวร แล้วบันทึกใหม่เพื่อให้แน่ใจว่าคุณจะไม่ได้รับข้อผิดพลาด 404 (ดังที่เราได้กล่าวไว้ก่อนหน้านี้)
ตอนนี้ในหน้าการสร้างเมนู ให้เพิ่มลิงก์ที่กำหนดเองสำหรับหน้าเอกสารสำคัญ ข้อความลิงก์อาจเป็น "สูตรทั้งหมด"
URL ควรเป็น “/?post_type=recipes” หากลิงก์ถาวรของคุณตั้งค่าเป็น “ธรรมดา” และ '/recipes/' หากตั้งค่าลิงก์ถาวรเป็น “ชื่อโพสต์”
เพิ่มรายการเมนูและไปที่เว็บไซต์ของคุณแล้วคลิกลิงก์ ตอนนี้คุณควรเห็นโพสต์สูตรอาหารทั้งหมดในมุมมองที่เก็บถาวร
อ่านเพิ่มเติม
- สร้างประเภทโพสต์ที่กำหนดเองของ WordPress โดยใช้ปลั๊กอิน
- WordPress ประเภทโพสต์ที่กำหนดเอง – ก้าวต่อไป
- สร้างประเภทโพสต์ที่กำหนดเองของ WordPress โดยใช้ปลั๊กอินของคุณเอง!
บทสรุป
วิธีเข้าถึงประเภทโพสต์แบบกำหนดเองที่เราตรวจสอบในบทความนี้อาจดูสับสนในตอนแรก (โดยเฉพาะเมื่อเปรียบเทียบกับความง่ายในการสร้างประเภทโพสต์ที่กำหนดเองโดยใช้ปลั๊กอิน) อย่างไรก็ตาม หากคุณเต็มใจที่จะอดทน การเขียนโค้ดประเภทโพสต์ที่คุณกำหนดเองนั้นมีข้อดีคือ คุณไม่ต้องพึ่งพาปลั๊กอินหากปลั๊กอินนั้นหยุดทำงานหรือไม่ได้รับการสนับสนุน