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


18

ตกลงดังนั้นฉันได้ลงทะเบียนประเภทโพสต์ที่กำหนดเองและ taxonomies สองสามประเภท ตอนนี้เพื่อชีวิตของฉันฉันไม่สามารถหารหัสที่ฉันต้องการเพิ่มฟิลด์ที่กำหนดเองในประเภทโพสต์ที่กำหนดเองของฉัน

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

เคล็ดลับใด ๆ ที่จะช่วยให้ฉันดู codex และพบบางอย่าง แต่ไม่สามารถเข้าใจสิ่งที่ฉันต้องการเพิ่มลงในfunctions.phpไฟล์ของฉัน


คำตอบ:


19

นี่อาจจะซับซ้อนกว่าที่คุณคิดผมจะลองใช้กรอบ:

ถ้าคุณต้องการที่จะเขียนของคุณเองนี่คือบทเรียนที่ดี:


1
มันจะยากขนาดนั้น ฉันคิดว่ามันจะง่ายเหมือนการเพิ่มรหัสลงทะเบียนในฟังก์ชั่นของฉันเหมือนที่เราทำกับประเภทโพสต์และ taxonomies
xLRDxREVENGEx

1
ฉันจะบวกหนึ่งคำตอบนี้ แต่มันไม่ซับซ้อนเกินไป ลิงก์ thinkvitamin.com เป็นงานที่ยอดเยี่ยมในการอธิบายวิธีเพิ่มสารออกซิแดนซ์และบันทึกไว้ ลิงค์ sltaylor.co.uk เป็นบทแนะนำที่ยอดเยี่ยมเกี่ยวกับการใช้วิธีการเข้ารหัสที่ยอดเยี่ยม คำเตือนของฉันคือระวังเมื่อใช้save_postตะขอ มันถูกเรียกในเวลาแปลก ๆ ตรวจสอบให้แน่ใจว่าได้ตั้งค่าตัวแปร WP_DEBUG เป็นจริงเพื่อดูข้อผิดพลาดที่อาจเกิดขึ้นเมื่อใช้งาน
tollmanz

1
เพียงแค่อัปเดตฉันใช้ลิงค์ thinkvitamin และช่วยได้มากและมันเป็นเค้กที่ใช้ในการตั้งค่าฟิลด์ที่กำหนดเอง
xLRDxREVENGEx

25

เพิ่ม / แก้ไขsupportsอาร์กิวเมนต์ (ขณะใช้งานregister_post_type) เพื่อรวมcustom-fieldsหน้าจอแก้ไขการโพสต์ของประเภทโพสต์ที่คุณกำหนดเอง:

'supports' => array( 
  'title', 
  'editor', 
  'excerpt', 
  'thumbnail', 
  'custom-fields', 
  'revisions' 
)

ที่มา: https://codex.wordpress.org/Using_Custom_Fields#Displaying_Custom_Fields


2
คุณช่วยอธิบายได้ว่าทำไมสิ่งนี้ถึงสามารถแก้ปัญหาได้
s_ha_dum

1
ใช่มันใช้งานได้ ใครตอบคำตอบ คุณช่วยนำมันกลับมาได้ไหม ขอแสดงความนับถือ
Junaid Qadir

6
... แล้ว ......... ?
Mark

9

แม้ว่าคุณควรจะต้องเพิ่มการตรวจสอบความถูกต้อง แต่การกระทำนี้ดูเหมือนจะไม่ซับซ้อนสำหรับ WordPress เวอร์ชั่นปัจจุบัน

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

  1. สร้าง metabox ที่เก็บฟิลด์ที่คุณกำหนดเอง
  2. บันทึกฟิลด์ที่คุณกำหนดเองลงในฐานข้อมูล

ขั้นตอนเหล่านี้มีการอธิบายทั่วโลกที่นี่: http://wordpress.org/support/topic/is-it-possible-to-add-an-extra-field-to-a-custom-post-type

ตัวอย่าง:

เพิ่มเขตข้อมูลที่กำหนดเองที่เรียกว่า "ฟังก์ชั่น" ไปยังประเภทโพสต์ที่กำหนดเองที่เรียกว่า "prefix-teammembers"

ขั้นแรกให้เพิ่มเมท็อกซ์:

function prefix_teammembers_metaboxes( ) {
   global $wp_meta_boxes;
   add_meta_box('postfunctiondiv', __('Function'), 'prefix_teammembers_metaboxes_html', 'prefix_teammembers', 'normal', 'high');
}
add_action( 'add_meta_boxes_prefix-teammembers', 'prefix_teammembers_metaboxes' );

หากคุณเพิ่มหรือแก้ไข "คำนำหน้า -membersmembers" add_meta_boxes_{custom_post_type}เบ็ดจะถูกเรียก ดู http://codex.wordpress.org/Function_Reference/add_meta_boxสำหรับadd_meta_box()ฟังก์ชั่น ในการเรียกของข้างต้นadd_meta_box()คือprefix_teammembers_metaboxes_htmlการโทรกลับเพื่อเพิ่มเขตข้อมูลแบบฟอร์มของคุณ:

function prefix_teammembers_metaboxes_html()
{
    global $post;
    $custom = get_post_custom($post->ID);
    $function = isset($custom["function"][0])?$custom["function"][0]:'';
?>
    <label>Function:</label><input name="function" value="<?php echo $function; ?>">
<?php
}

ในขั้นตอนที่สองคุณมีฟิลด์ที่กำหนดเองของคุณไปยังฐานข้อมูล เกี่ยวกับการบันทึกsave_post_{custom_post_type}เบ็ดถูกเรียก (ตั้งแต่ v 3.7 ดู: /programming/5151409/wordpress-save-post-action-for-custom-posts ) คุณสามารถขอสิ่งนี้เพื่อบันทึกฟิลด์ที่คุณกำหนดเอง:

function prefix_teammembers_save_post()
{
    if(empty($_POST)) return; //why is prefix_teammembers_save_post triggered by add new? 
    global $post;
    update_post_meta($post->ID, "function", $_POST["function"]);
}   

add_action( 'save_post_prefix-teammembers', 'prefix_teammembers_save_post' );   

"ทำไม prefix_teammembers_save_post ทริกเกอร์โดยการเพิ่มใหม่" คุณพบคำตอบหรือไม่ฉันยังสะดุดกับฟังก์ชั่นเสริมที่ฉันจำไม่ได้?
alex

"เพิ่มฟิลด์ที่กำหนดเองที่เรียกว่า 'ฟังก์ชั่น' ให้กับประเภทโพสต์ที่กำหนดเองที่เรียกว่า 'prefix-teammembers'" อะไร "เรียกว่า" หมายถึงอะไรชื่อหรือไม่ singular_name ป้ายกำกับหรืออาจเป็นสตริงที่ใช้เป็นอาร์กิวเมนต์แรกใน register_post_type ฟังก์ชั่นหรือบางทีมันอาจจะไม่สำคัญว่ามันจะเป็นอะไรตราบใดที่มันสอดคล้องกัน
arnoldbird

1

มีปลั๊กอินต่าง ๆ สำหรับกล่องเมตาที่กำหนดเองและฟิลด์ที่กำหนดเอง ถ้าคุณดูที่ปลั๊กอินที่มุ่งเน้นไปที่นักพัฒนาแล้วคุณควรพยายามที่กล่อง Meta มันเบาและทรงพลังมาก

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


-6
// slider_metaboxes_html , function for create HTML 
function slider_metaboxes( ) {
   global $wp_meta_boxes;
   add_meta_box('postfunctiondiv', __('Custom link'), 'slider_metaboxes_html', 'slider', 'normal', 'high');
}

//add_meta_boxes_slider => add_meta_boxes_{custom post type}
add_action( 'add_meta_boxes_slider', 'slider_metaboxes' );

ความรู้ที่สมบูรณ์แบบ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.