ใครรู้วิธีปิดการใช้งานฟังก์ชั่นนี้ดังนั้นกล่องเมตาไม่สามารถเปลี่ยนตำแหน่ง?
ใครรู้วิธีปิดการใช้งานฟังก์ชั่นนี้ดังนั้นกล่องเมตาไม่สามารถเปลี่ยนตำแหน่ง?
คำตอบ:
ฉันมีปัญหาเดียวกันและ Google ก็พาฉันมาที่นี่ น่าเสียดายที่ไม่มีคำตอบเหล่านี้ช่วย แต่ในที่สุดฉันก็หาคำตอบได้และมันค่อนข้างง่าย!
admin_enqueue_scripts
และมันก็ใช้ได้ดีปิดการใช้งานฟังก์ชั่นการเรียงลำดับโดยใส่สิ่งนี้ลงในไฟล์ JavaScript นั้น:
jQuery(document).ready( function($) {
$('.meta-box-sortables').sortable({
disabled: true
});
$('.postbox .hndle').css('cursor', 'pointer');
});
โดยพื้นฐานแล้วสิ่งนี้จะเป็นการปิดการใช้งาน jQuery UI Sortableซึ่งเพิ่มประสิทธิภาพการทำงานของการลากเมท็อกซ์ ( postbox.dev.js: 64 ) สิ่งนี้จะสลับเคอร์เซอร์บนที่จับ metabox ไปยังตัวชี้เมาส์มาตรฐานแทนเคอร์เซอร์ย้าย (ความคิดความคิดของbrasofiloด้านล่าง)
หวังว่านี่จะช่วยได้!
แก้ไข:ฉันควรเพิ่มว่าน่าจะเป็นไปตามคำแนะนำอื่น ๆ ที่นี่และปิดการใช้งานการบันทึกคำสั่ง metabox มันจะป้องกันความสับสนเมื่อมีโอกาสเกิดขึ้นบางสิ่งบางอย่างถูกเปิดใช้งานอีกครั้งโดยไม่ตั้งใจ
การแก้ไขที่สอง:เพื่อประโยชน์ของคนรุ่นอนาคต (และผู้ค้นหาของ Google ในอนาคต) การแก้ไขนี้ได้รับการทดสอบบน WordPress 3.3.1 ฉันไม่สามารถพูดกับรุ่นอื่นได้!
วิธีที่เร็วที่สุดคือเลิกใช้งาน JS สำหรับฟังก์ชั่นนี้ แต่ฉันคิดว่ามันจะดีกว่าเมื่อคุณยกเลิกการลงทะเบียนสไตล์สำหรับกล่องและเริ่มต้นสไตล์ที่กำหนดเองโดยไม่มีเอฟเฟกต์สำหรับเมาส์และไอคอนเปิด / ปิดบนกล่องเมตา
function fb_remove_postbox() {
wp_deregister_script('postbox');
}
add_action( 'admin_init', 'fb_remove_postbox' );
admin_init
เฉพาะบางประเภทโพสต์ได้อย่างไร
ฉันตอบคำถามที่คล้ายกันพร้อมกับข้อเสนอแนะเพื่ออนุญาตให้ลาก แต่ปิดการใช้งานการบันทึกคำสั่งซื้อใหม่ในฝั่งเซิร์ฟเวอร์ สิ่งนี้อาจช่วยให้คุณควบคุมได้มากขึ้นและเป็นหลักฐานในอนาคตมากขึ้นเนื่องจาก JavaScript สามารถเปลี่ยนแปลงได้อย่างรวดเร็ว แต่โปรโตคอลในการสื่อสารกับเซิร์ฟเวอร์อาจยังคงมีประสิทธิภาพมากขึ้น ตัวอย่างนี้ปิดใช้งานการลากทั้งหมด แต่คุณสามารถขยายเพื่อตรวจสอบกล่องหรือหน้าเมตาเฉพาะของคุณ
add_action('check_ajax_referer', 'prevent_meta_box_order');
function prevent_meta_box_order($action)
{
if ('meta-box-order' == $action /* && $wp_user == 'santa claus' */) {
die('-1');
}
}
check_ajax_referer
คือการกระทำไม่ใช่ตัวกรอง คุณควรdie()
ไปที่นั่นเพื่อสิ้นสุดการทำงานของสคริปต์ไม่ใช่คืนสิ่งใดเลย ฉันจะแก้ไขรหัสของฉัน
จาวาสคริปต์ wordpress ระบุ metaboxes ที่ลากไปมาได้ตามชื่อ h3 ด้วยคลาส "hndle" มันง่ายพอที่จะปิดการใช้งานเหล่านี้โดยเฉพาะโดยอ้างอิง metabox ในคำถาม (ถ้าคุณกำลังสร้าง metaboxes ที่กำหนดเองคุณจะต้องกำหนดตัวระบุ) และปิดการใช้งานคลาส hndle ใด ๆ โดยการลบชื่อหรือเปลี่ยนชื่อ ในกรณีของฉันฉันมีตัวคั่นหลายประเภทที่ฉันติดป้ายด้วย. hndle h3 แต่ไม่น่าที่ใครจะทำสิ่งนี้ได้ ดังนั้นคุณสามารถทำสิ่งที่ฉันทำด้านล่างหรือคุณอาจใช้. ค้นหา ('. hndle'). attr ('class', '') .... หรือสิ่งที่คล้ายกัน สิ่งนี้จะอยู่ในไฟล์. js ที่คุณจัดคิวไว้ในไฟล์ functions.php ของคุณ (ไม่ว่าจะอยู่ในโฟลเดอร์ธีมหรือโฟลเดอร์ปลั๊กอินของคุณ) ผู้ดูแลระบบจะถูกเรียกโดย admin_print_scripts
jQuery("#MY_METABOX_ID h3.hndle").each(function(e){
jQuery(this).attr("class", "hndlle");
});
ฉันจะเพิ่ม Javascript Hack นี้ด้วย:
<script type='text/javascript'>
jQuery(document).ready(function ($) {
$('.handlediv').remove();
});
</script>
... และ CSS นี้:
.postbox .hndle:hover {
cursor:default;
}
ฉันใช้รหัสนั้นเพื่อใช้ประโยชน์จากกล่องเมตา แต่ไม่มีฟังก์ชั่นการลากและวางและเปิด / ปิด
.postbox:hover .handlediv { display:none; }
ใน CSS เพื่อซ่อน .handlediv
ฉันสังเกตเห็นว่าคำถามนี้ยังไม่ได้ตอบตราบเท่าที่ผู้ถามไม่เลือกคำตอบที่ถูกต้อง
ม.ค. ให้ตัวอย่างการทำงานของการหยุดการสั่งซื้อ metabox ใหม่ที่ถูกบันทึกไว้ใน Ajax ในขณะที่คนอื่น ๆ ให้คำแนะนำเกี่ยวกับ JS
เท่าที่ฉันเข้าใจทุกสิ่งที่คุณต้องการคือปิดใช้งานการลากไม่มีอะไรเพิ่มเติม ในการทำเช่นนั้นคุณจะต้องใช้สองสิ่งอันดับแรกฟังก์ชั่นที่จะขัดขวางการทำงานของการบันทึก ajax แต่ประการที่สองคุณต้องหยุด JS การลากและวางโดยไม่ฆ่าฟังก์ชันการทำงานที่ใดก็ได้ในหน้าเว็บ โพสต์ประเภทหรือ metabox โดยเฉพาะ
การใช้ฟังก์ชั่น Jans และ jQuery บางอย่างเราสามารถทำได้โดยไม่ต้องฆ่าฟังก์ชั่นอื่น ๆ ทั้งหมดที่สคริปต์สร้างตู้ไปรษณีย์สร้างขึ้นเช่น ..
Uncomment 1 ของบรรทัดที่เหมาะสมเพื่อทำให้งานจัดคิว
add_action( 'admin_enqueue_scripts' , 'disable_metabox_dragging' );
add_action( 'check_ajax_referer', 'disable_metabox_ordering' );
function disable_metabox_dragging( $hook ) {
if( !in_array( $hook, array( 'post.php', 'post-new.php' ) ) )
return;
global $post_type;
if( !in_array( $post_type, array( 'book' ) ) )
return;
// Uncomment the following line if using inside a child theme
//wp_enqueue_script( 'unsortable-meta', trailingslashit( get_stylesheet_directory_uri() ) . 'unsortable-metaboxes.js', array(), false );
// Or uncomment the following line if using inside a parent theme
//wp_enqueue_script( 'unsortable-meta', trailingslashit( get_template_directory_uri() ) . 'unsortable-metaboxes.js', array(), false );
// Or ncomment the following line if using inside a plugin file
//wp_enqueue_script( 'unsortable-meta', plugins_url( '/unsortable-metaboxes.js', __FILE__ ), array(), false );
}
function disable_metabox_ordering($action) {
global $post_type;
if( !in_array( $post_type, array( 'book' ) ) )
return;
if( 'meta-box-order' == $action )
die;
}
jquery พื้นฐานมากที่ลบคลาสที่จัดเรียงได้ของ metabox ออกจากองค์ประกอบที่ใช้งานได้ซึ่งจะช่วยป้องกันการลาก
jQuery(document).ready(function($){
$('.meta-box-sortables').removeClass('meta-box-sortables');
});
ในขณะที่คุณสามารถเห็นฉันได้เพิ่มใน 1 ตัวอย่างประเภทโพสต์เพื่อเพิ่มรหัสหนังสือในกรณีนี้ อย่างไรก็ตามคุณกล่าวถึงความต้องการที่จะมีความเป็นไปได้ของการปิดการใช้งานสำหรับเมท็อกซ์เฉพาะ
สามารถทำได้มีเพียงผลข้างเคียงเล็กน้อยเพียงเล็กน้อยจากการลบคลาสออกจาก metaboxes ที่กำหนดเพื่อป้องกันการลากคุณยังป้องกันไม่ให้ฟังก์ชันสลับทำงาน (เช่นฟังก์ชั่นสลับชื่อ metabox)
ที่กล่าวว่าสามารถทำได้ ...
ก่อนอื่นคุณต้องอัปเดตdisable_metabox_dragging
ฟังก์ชั่นเป็น ..
function disable_metabox_dragging( $hook ) {
if( !in_array( $hook, array( 'post.php', 'post-new.php' ) ) )
return;
global $post_type;
if( !in_array( $post_type, array( 'book' ) ) )
return;
// Uncomment the following line if using inside a child theme
// wp_enqueue_script( 'some-unsortables', trailingslashit( get_stylesheet_directory_uri() ) . 'unsortable-somemetaboxes.js', array('postbox') );
// Or uncomment the following line if using inside a parent theme
//wp_enqueue_script( 'some-unsortables', trailingslashit( get_template_directory_uri() ) . 'unsortable-somemetaboxes.js', array('postbox') );
// Or uncomment the following line if using inside a plugin file
//wp_enqueue_script( 'some-unsortables', plugins_url( '/unsortable-somemetaboxes.js', __FILE__ ), array('postbox') );
wp_localize_script( 'some-unsortables', 'NonDragMetaboxes', array( 0 => '', 'postcustom', 'postexcerpt' ) );
}
อีกครั้งคุณต้องยกเลิกการใส่เครื่องหมายในwp_enqueue_script
บรรทัดที่เกี่ยวข้อง
อาร์เรย์ภายในการโทรแบบโลคัลคือสิ่งที่กำหนดว่าจะปิดใช้งาน metaboxes ใดรายการไอเท็ม 0 คีย์ที่ว่างจะมีจุดประสงค์เนื่องจากฟังก์ชันสคริปต์โลคัลไลซ์แถบดัชนี 0 คีย์ใด ๆ ในอาร์เรย์
ประการที่สองไฟล์ JS ใหม่ที่อ้างถึงในฟังก์ชั่นการเข้าคิวปรับแต่งข้างต้น
jQuery(document).ready(function($){
// For each item in the JS array created by the localize call
$.each( NonDragMetaboxes, function(index,value) {
// Remove postbox class(disables drag) and add stuffbox class(styling is close to the original)
$( '#' + value ).removeClass('postbox').addClass('stuffbox');
// Remove redundant handle div
if( $( '#' + value ).has('.handlediv') )
$( '#' + value ).children('.handlediv').remove();
// Remove redundant cursor effect on hover
if( $( '#' + value ).has('h3') )
$( '#' + value ).children('h3').css('cursor','default');
} );
});
สิ่งเดียวที่คุณต้องทำคือกำหนด ID สำหรับ metaboxes ที่คุณต้องการซ่อนและส่งไปยังอาร์เรย์ที่ตั้งค่า metaboxes ที่ถูกปิดใช้งาน (ในการwp_localize_scipt
โทร)
โดยรวมฉันไม่คิดว่าการเลือกปิดการใช้งาน metaboxes นั้นเป็นข้อบกพร่อง แต่ก็ไม่ได้รับการสนับสนุนในการกำหนดค่าการกระทำเริ่มต้นที่เรียงลำดับได้ใหม่ใน WordPress ดังนั้นการปิดใช้งานการเรียงลำดับ metabox ตามองค์ประกอบต่อไป หลักฐานของสิ่งนั้น) ตามหลักการแล้วสิ่งที่จำเป็นในที่นี้คือการกระทำใน WordPress เพื่อเชื่อมโยง init ที่สามารถจัดเรียงได้ แต่ขณะนี้ฮาร์ดโค้ดอยู่ในจาวาสคริปต์ของตู้ไปรษณีย์
ไม่ว่าในกรณีใดฉันหวังว่าจะช่วยตอบคำถามเดิม
หากต้องการเพิ่มคำตอบก่อนหน้านี้ทั้งหมดหากคุณต้องการป้องกันไม่ให้ WordPress โหลดตำแหน่งที่กำหนดเองต่อไปนี้ควรทำเคล็ดลับ (แทนที่post
ด้วยโพสต์ประเภทใดก็ได้):
add_filter( 'get_user_option_meta-box-order_post', '__return_empty_string' );
เพิ่งค้นพบวิธีที่ง่ายหวังว่าผู้สมัครใหม่จะช่วยในเรื่องนี้ สมมติว่าคุณสามารถเพิ่มไฟล์ css ในสไตล์ผู้ดูแลระบบฉันใช้ css เพื่อทำสิ่งนั้นและขอโทษสำหรับภาษาอังกฤษที่ไม่ดีของฉัน
.postbox#your-metabox-id .ui-sortable-handle {
pointer-events: none;
}
หวังว่ามันจะช่วย
$('.postbox .hndle').css('cursor','default');
:::: Re: การแก้ไขครั้งที่ 2คุณจะต้องอัปเดตคำตอบต่อไปในอนาคตอันใกล้: P