จะลบตัวเลือกหน้าจอและกล่อง Meta จากการเพิ่ม / แก้ไขประเภทโพสต์ได้อย่างไร


10

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

WordPress - ตัวเลือกหน้าจอ - เพิ่มหรือแก้ไขโพสต์ - กล่อง Meta คลิกที่นี่สำหรับภาพหน้าจอขนาดเต็ม

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

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

คำตอบ:


13

สิ่งที่คุณต้องอยู่ในโลกทำดัชนีโดย$wp_meta_boxes get_current_screen()->idการลบตัวเลือกหน้าจอจะเป็นการลบสารที่คุณสามารถทำได้ก่อนที่ตัวเลือกหน้าจอจะแสดงโดยใช้'in_admin_header'ตะขอ

ดังนั้นสมมติว่าคุณต้องการกำจัดตัวเลือกหน้าจอ"Send Trackbacks"ที่คุณเห็นในสกรีนช็อตนี้:

วางคลาสต่อไปนี้ลงในfunctions.phpไฟล์ธีมของคุณหรือในปลั๊กอินที่คุณอาจสร้างและรหัสจะลบตัวเลือกหน้าจอ"ส่งแทร็กการติดตาม" (และมันเกี่ยวข้องกับ metabox ซึ่งเป็นสิ่งที่คุณต้องการด้วย)

class Michael_Ecklunds_Admin_Customizer {
  function __construct() {
    add_action( 'in_admin_header', array( $this, 'in_admin_header' ) );
  }
  function in_admin_header() {
    global $wp_meta_boxes;
    unset( $wp_meta_boxes[get_current_screen()->id]['normal']['core']['trackbacksdiv'] );
  }
}
new Michael_Ecklunds_Admin_Customizer();

และนี่คือสิ่งที่ดูเหมือนว่าหลังจากเพิ่มรหัสข้างต้นไปยังเว็บไซต์ WordPress 3.4:

การใช้ดีบักเกอร์ Zend ภายใน PhpStormที่นี่เป็นการตรวจสอบ$wp_meta_boxes[get_current_screen()->id]เพื่อให้คุณเห็นว่าค่าเริ่มต้นของการติดตั้ง WordPress 3.4 ในหน้าจอแก้ไขการโพสต์(ฉันวนรอบดัชนีอาร์เรย์ที่ฉันอ้างอิงในตัวอย่างของฉันเช่น$wp_meta_boxes[get_current_screen()->id]['normal']['core']['trackbacksdiv']:

หวังว่านี่คือสิ่งที่คุณกำลังมองหา?


3
Sim.ply.A.ma.zing! ขอแสดงความยินดี Ecklund คุณไม่เพียง แต่ได้รับคำตอบที่ยอมรับได้เท่านั้น แต่เป็นคำตอบที่เป็นตำนาน .. !
brasofilo

@ brasofilo ขอบคุณสำหรับคำชม ฉันรู้สึกเป็นเกียรติ
MikeSchinkel

@MikeSchinkel วิธีนี้ใช้ได้กับการเพิ่ม / แก้ไขโพสต์และขอขอบคุณสำหรับสิ่งนั้น แต่คุณจะลบเมตาบ็อกตัวเลือกหน้าจอสำหรับหน้าเว็บที่มี wp_list_table ซึ่งมีรายการโพสต์ทั้งหมดของคุณได้อย่างไร อ้างถึงภาพหน้าจอ # 1
Michael Ecklund

@MichaelEcklund สวัสดีฉันคิดว่าฉันไม่ควรตอบคำถามเมื่อฉันเหนื่อยเกินกว่าที่จะเข้าใจคำถามทั้งหมดใช่มั้ย? คำตอบของคำถามที่ยังไม่ได้ตอบนั้นแตกต่างจากคำถามที่ฉันตอบอย่างมากดังนั้นจึงเป็นคำถามที่แตกต่างกันสองข้อ คุณรู้สึกอย่างไรเกี่ยวกับการแก้ไขคำถามนี้เพื่อถามสิ่งที่ฉันตอบแล้วเพิ่มคำถามอื่นตามที่ถามในสิ่งที่ฉันไม่ได้ทำ หากคุณสามารถทำได้และโพสต์ลิงค์ที่นี่ในความคิดเห็นดังนั้นฉันจะพบมันฉันจะโพสต์คำตอบของรายละเอียดเทียบเท่าสำหรับคำถามนั้น ไม่เช่นนั้นอาจมีความซับซ้อนในการเขียนหนึ่งคำตอบที่สอดคล้องกันสำหรับทั้งคู่
MikeSchinkel

1
@MichaelEcklund ยอดเยี่ยมขอบคุณ ตอบแล้ว: wordpress.stackexchange.com/a/56896/89
MikeSchinkel

0

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

if (is_admin()) :
function my_remove_meta_boxes() 
{
  if(!current_user_can('administrator')) 
  {
    remove_meta_box('theme_custom_meta_box', 'post', 'side');
  }
}
add_action( 'add_meta_boxes', 'my_remove_meta_boxes' );
endif;
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.