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


16

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

ความคิดใด ๆ ขอบคุณ

คำตอบ:


13

ฉันอยากจะแนะนำ

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

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


แก้ไข

ตามที่กล่าวไว้มีเพียงรูปแบบเดียวสำหรับหน้าจอแก้ไขโพสต์ ดังนั้นในทางทฤษฎีคุณต้องการเพียงหนึ่งฟิลด์ที่ไม่มีข้อมูลที่จะตรวจสอบการกระทำและที่มาของข้อมูล อย่างไรก็ตามเนื่องจาก metaboxes สามารถลบได้ - โดยการมีเขตข้อมูล nonce ในหนึ่ง metabox เท่านั้นจึงไม่รับประกันว่าจะมี nonce โดยการวางเขตข้อมูล nonce ในแต่ละ metabox คุณสามารถตรวจสอบว่าข้อมูลจาก metabox นั้นถูกส่ง (และเป็นจริงจากที่คุณคิดว่ามันเป็น) ก่อนที่จะประมวลผลข้อมูลใด ๆ เช่น:

save_post_call_back($post_id){

  //Check this is not an auto-save route

  if(nonce of metabox1 present and valid){
     //Process data from metabox1
  }else{
    //Either metabox removed - or invalid nonce. Take no action.
  }

  if(nonce of metabox2 present and valid){
     //Process data from metabox2
  }else{
    //Either metabox removed - or invalid nonce. Take no action.
  }

}

ชื่อของสนาม nonce ควรจะไม่ซ้ำกันเพื่อ metabox (และไม่ได้ปะทะกับขณะปัจจุบันอื่น ๆ ที่มีอยู่ในรูปแบบอื่น ๆ จากปลั๊กอิน)

ค่า nonce ควรไม่ซ้ำกับการกระทำ (และโดยทั่วไปควรรวมที่มาของข้อมูล (เช่นแก้ไขโพสต์เมื่อเทียบกับการแก้ไขอย่างรวดเร็ว)) ฉันมักจะรวมรหัสโพสต์ด้วย


อืมม แต่มีเพียง<form>แท็กเดียวในหน้าผู้ดูแลระบบ เขตข้อมูล nonce ควรไม่ซ้ำกับแบบฟอร์มหรือไม่ tia, @Stephen
Ana Ban

ใช่ชื่อ nonce ควรไม่ซ้ำกับ metabox เพื่อให้คุณสามารถตรวจสอบแต่ละ metabox ได้ ค่า nonce ควรไม่ซ้ำกันกับการกระทำที่ดำเนินการและที่มาของข้อมูล (เช่นตั้งแต่ 'การแก้ไขอย่างรวดเร็ว' และหน้าจอแก้ไขปกติทั้งคู่จะทริกเกอร์การsave_postกระทำ)
Stephen Harris

อัปเดตคำตอบเพื่อให้ความกระจ่างในสิ่งที่ฉันกำลังพูดอยู่ :)
สตีเฟ่นแฮร์ริส

สิ่งนี้คือ 1) เนื่องจากมีเพียงหนึ่ง Form-tag สำหรับหน้าจอแก้ไขทั้งหมดและ 2) มันจะเพิ่มnonceโดยอัตโนมัติ ทำไมคุณต้องเพิ่มอีก มันจะมี nonce ไม่ว่าอะไรจะเกิดขึ้น ... ฉันชี้ให้เห็นในคำตอบของฉันและได้รับการ downvote ขอบคุณคน ... ความตั้งใจอยู่ในมุมมองของฉันเพื่อแก้ไขหน้าโดยเนื้อหาหรือข้อมูล meta เช่น เขตข้อมูลหนึ่งที่ไม่ใช่ ... นอกจากนี้เมื่อฉันพยายามที่จะเพิ่มอีกมันไม่ได้ทำงานกับกล่องเมตาหลาย!
OZZIE

1
ดูคำตอบของฉัน save_postสามารถเรียกได้จากบริบทต่าง ๆ ดังนั้นจึงไม่รับประกัน nonce นอกจากนี้ยังเป็นวิธีที่สะดวกในการตรวจสอบว่าการโทรกลับของคุณต้องทำอะไรบางอย่าง เมื่อเพิ่มหลาย nonces ให้ใช้ชื่อที่ไม่ซ้ำ มันใช้งานได้ดี
Stephen Harris

5

คุณสามารถขอกล่องส่งที่ไม่เคยหายไปเพิ่มเขตข้อมูล nonce

add_action( 'post_submitbox_start', 'theme_submitdiv_extra' );
function theme_submitdiv_extra()
{
  wp_nonce_field( 'theme_meta_box_nonce', 'meta_box_nonce' );
}

จากนั้นในการกระทำ save_post ของคุณ:

if( !isset( $_POST['meta_box_nonce'] ) || !wp_verify_nonce( $_POST['meta_box_nonce'], 'theme_meta_box_nonce' ) ) return;

1

ฟิลด์ nonce ใช้เพื่อตรวจสอบว่าเนื้อหาของฟอร์มมาจากตำแหน่งบนไซต์ปัจจุบันไม่ใช่ที่อื่น

codex: wp_nonce_field

ต้องการเพียงฟิลด์เดียวต่อหนึ่งฟิลด์เท่านั้นโปรดใช้มากกว่านั้นสำหรับฉัน

บางทีคุณสามารถตรวจสอบและใช้check_admin_referer ()เพื่อให้แน่ใจว่าคำขอของคุณมาจากหน้าผู้ดูแลระบบ


-1

ใน WP 3.5.2 หน้าแก้ไขทั้งหมดจะถูกห่อด้วย form-tag ดังนั้นคุณไม่ควรเพิ่ม form-tags ของคุณเอง !! หากยังคงทำเช่นนั้นและลองเพิ่มเมตาดาต้าที่กำหนดเองแยกต่างหากมันจะล้มเหลวเมื่อบันทึกและนำคุณไปที่หน้าแรกของ wp-admin เมื่อพยายามบันทึก !!

นอกจากนี้อย่าเพิ่มเขตข้อมูล NONCE อย่างใดอย่างหนึ่งตามที่ควรจะเป็นเพียงหนึ่งต่อแบบฟอร์ม (นี้อาจทำให้มันล้มเหลว !!) และการแก้ไขหน้ามีเขตข้อมูลที่ไม่ใช่!

แก้ไข:

สิ่งนี้คือ 1) เนื่องจากมีเพียงหนึ่ง Form-tagสำหรับหน้าจอแก้ไขทั้งหมดตามที่ผู้เขียนตอบที่ถูกต้องตอบรับและ 2) มันมีการเพิ่มnonceโดยอัตโนมัติ ทำไมคุณต้องเพิ่มอีก มันจะมี nonce เสมอไม่ว่าอะไรจะเกิดขึ้น ...

เจตนาอยู่ในมุมมองของฉันที่จะแก้ไขหน้าโดยเนื้อหาหรือเมตาดาต้าข้อมูลเช่น เขตข้อมูลหนึ่งที่ไม่ใช่ ... นอกจากนี้เมื่อฉันพยายามที่จะเพิ่มอีกมันไม่ได้ทำงานกับกล่องเมตาหลาย ! หนึ่งจะทำงานและอื่น ๆ จะล้มเหลวและเพียงเปลี่ยนเส้นทางผู้ใช้ไปที่หน้าแรกของ wp-admin!


คุณโพสต์คำตอบเดียวกันกับคำถามสองข้อว่าเป็นอุบัติเหตุหรือไม่ คุณหมายถึงการตอบข้อใดในสองข้อ
Rarst

ขออภัยด้วยอันนี้ หากคุณใช้องค์ประกอบมุมมอง firebug หรือ chrome ของกล่องเมตาที่เพิ่มด้วย form-tag ใน wp 3.6 มันจะทำการลบไฟล์ทั้งหมดในแบบฟอร์มทั้งหมดสำหรับโพสต์โดยอัตโนมัติ แล้วมันผิดอย่างไร? เหตุใดคุณจึงต้องเพิ่มเขตข้อมูลที่ไม่ใช่หลายแห่ง
OZZIE

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