जवाबों:
मुझे भी यही समस्या थी, और Google ने मुझे यहाँ तक पहुँचाया। दुर्भाग्य से इनमें से किसी भी उत्तर ने मदद नहीं की, लेकिन मैंने अंततः उत्तर का पता लगा लिया, और यह काफी आसान है!
admin_enqueue_scripts
, और यह ठीक काम किया।उस जावास्क्रिप्ट फ़ाइल में डालकर छँटाई कार्यक्षमता को अक्षम करें:
jQuery(document).ready( function($) {
$('.meta-box-sortables').sortable({
disabled: true
});
$('.postbox .hndle').css('cursor', 'pointer');
});
अनिवार्य रूप से यह सिर्फ jQuery UI सॉर्टेबल को निष्क्रिय करता है , जो मेटाबोक्स ड्रैगिंग कार्यक्षमता ( पोस्टबॉक्स.देव.जेएस: 64 ) को शक्ति देता है । यह मेटाबोक्स हैंडल पर कर्सर को एक मूव कर्सर ( नीचे ब्रैसोफिलो के विचार ) के बजाय एक मानक माउस पॉइंटर पर स्विच करता है ।
उम्मीद है की यह मदद करेगा!
संपादित करें: मुझे यह जोड़ना चाहिए कि यह शायद यहां कुछ अन्य सलाह का पालन करने के लायक है और मेटाबोक्स ऑर्डर की बचत को अक्षम करता है। यह ऑफ-मौका पर भ्रम को रोकेगा जिससे कुछ गलती से पुनः सक्षम हो जाता है।
दूसरा संपादन: भविष्य की पीढ़ियों (और भविष्य के Google खोजकर्ताओं) के लाभ के लिए, इस फिक्स का परीक्षण वर्डप्रेस 3.3.1 पर किया गया था। मैं अन्य संस्करणों के लिए बात नहीं कर सकता!
इस फ़ंक्शन के लिए सबसे तेज़ तरीका JS को निष्क्रिय कर रहा है। लेकिन मुझे लगता है, यह बेहतर है जब आप बॉक्स के लिए शैली को निष्क्रिय कर देते हैं और माउस के लिए प्रभावों के बिना एक कस्टम शैली और मेटा बक्से पर खुले / बंद आइकन को निष्क्रिय कर देते हैं।
function fb_remove_postbox() {
wp_deregister_script('postbox');
}
add_action( 'admin_init', 'fb_remove_postbox' );
admin_init
केवल कुछ विशिष्ट प्रकार के पोस्ट में कैसे भेजेंगे?
मैंने ड्रैगिंग की अनुमति देने के सुझाव के साथ एक समान प्रश्न का उत्तर दिया, लेकिन सर्वर पर नए ऑर्डर को सहेजने को अक्षम करें। यह आपको अधिक नियंत्रण दे सकता है, और अधिक भविष्य के प्रमाण हो सकते हैं क्योंकि जावास्क्रिप्ट जल्दी बदल सकता है, लेकिन सर्वर के साथ संचार करने के लिए प्रोटोकॉल अधिक मजबूत रह सकता है। यह उदाहरण सभी ड्रैगिंग को अक्षम करता है, लेकिन आप इसे अपने विशिष्ट बॉक्स या मेटा पेज की जांच के लिए विस्तारित कर सकते हैं।
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()
स्क्रिप्ट निष्पादन समाप्त करना चाहिए , कुछ भी वापस नहीं करना चाहिए । मैं अपना कोड ठीक करूंगा।
वर्डप्रेस जावास्क्रिप्ट "hndle" की एक कक्षा के साथ अपने h3 शीर्षक द्वारा ड्रैग करने योग्य मेटाबोक्स की पहचान करता है। यह विशेष रूप से प्रश्न में मेटाबॉक्स का संदर्भ देकर विशेष रूप से अक्षम करने के लिए पर्याप्त है (यदि आप कस्टम मेटाबॉक्स बना रहे हैं, तो आपने इसे एक पहचानकर्ता को सौंपा होगा) और क्लासनाम को हटाकर या इसका नाम बदलकर किसी भी बाधा वर्गों को अक्षम करना होगा। मेरे मामले में, मेरे पास कई विभाजक प्रकार हैं जिन्हें मैंने लेबल किया है। hndle h3's, लेकिन यह संभावना नहीं है कि किसी और ने इस तरह से चीजें की होंगी। तो, आप नीचे दिए गए काम को कर सकते हैं या आप .find ('। Hndle') का उपयोग कर सकते हैं। attr ('वर्ग', '') .... या कुछ इसी तरह का। यह एक .js फ़ाइल में जाता है जिसे आपने अपने फ़ंक्शंस में संलग्न किया है। एफपी फ़ाइल (चाहे वह आपके थीम फ़ोल्डर या आपके प्लगइन्स फ़ोल्डर में हो)। Enqueueing को admin_print_scripts द्वारा कॉल किया जाएगा,
jQuery("#MY_METABOX_ID h3.hndle").each(function(e){
jQuery(this).attr("class", "hndlle");
});
मैं इस जावास्क्रिप्ट हैक को भी जोड़ूंगा:
<script type='text/javascript'>
jQuery(document).ready(function ($) {
$('.handlediv').remove();
});
</script>
... और यह सीएसएस:
.postbox .hndle:hover {
cursor:default;
}
मैंने उस कोड का उपयोग मेटा बॉक्स का लाभ उठाने के लिए किया, लेकिन ड्रैग-एंड-ड्रॉप और ओपन / क्लोज फंक्शन के बिना।
.postbox:hover .handlediv { display:none; }
.handlediv
मैंने देखा कि यह प्रश्न अनुत्तरित रह गया है, क्योंकि पूछने वाला सही उत्तर का चयन नहीं कर रहा है।
जान ने अजाक्स पर बचाए जा रहे मेटाबॉक्स री-ऑर्डर को रोकने का एक कार्यशील उदाहरण दिया, जबकि अन्य ने जेएस से संबंधित सुझाव दिए।
जहाँ तक मैं समझता हूँ कि आप यह सब करना चाहते हैं, ड्रैगिंग को अक्षम करना है, इससे अधिक कुछ नहीं। ऐसा करने के लिए आपको दो चीजों की आवश्यकता होगी, सबसे पहले अजाक्स सेविंग एक्शन को इंटरसेप्ट करने के लिए एक फंक्शन, लेकिन दूसरा यह कि आपको जेएस ड्रैगिंग को रोकने की जरूरत है और पेज में कहीं और फंक्शनलिटी मारे बिना ड्रापिंग करना है, जबकि इसे सेलेक्ट करने के लिए भी करना होगा। एक पोस्ट प्रकार या विशेष रूप से मेटाबॉक्स।
Jans फ़ंक्शन और कुछ jQuery का उपयोग करके हम ऐसा कर सकते हैं कि पूरी तरह से अन्य कार्यक्षमता को मारे बिना पोस्टबॉक्स स्क्रिप्ट बनाता है, जैसे ..
एनक्यू काम करने के लिए उपयुक्त लाइनों में से 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 जो मेटाबॉल्ज़ सॉर्टेबल क्लास को प्रशंसनीय तत्वों से हटाती है, यह ड्रैगिंग को रोकती है।
jQuery(document).ready(function($){
$('.meta-box-sortables').removeClass('meta-box-sortables');
});
जैसा कि आप देख सकते हैं कि मैंने इस मामले में कोड, पुस्तक को जोड़ने के लिए 1 उदाहरण पोस्ट प्रकार में जोड़ा है। हालाँकि आपने उल्लेख किया है कि विशिष्ट मेटाबॉक्स के लिए इसे अक्षम करने की संभावना भी है।
यह किया जा सकता है, उनमें से कुछ छोटे साइड-इफेक्ट्स हैं, जो कि ड्रैगिंग को रोकने के लिए दिए गए मेटाबॉक्स से कक्षाएं हटाते हैं, आप टॉगल फ़ंक्शन को काम करने से भी रोकते हैं (यानी मेटाबॉक्स शीर्षक टॉगल कार्यक्षमता)।
उसने कहा, यह किया जा सकता है ...
सबसे पहले, आप 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
लाइन को अनसुना करना होगा ।
स्थानीयकरण कॉल के अंदर सरणी वह है जो यह निर्धारित करती है कि अक्षम करने के लिए कौन सी मेटाबोक्स है, खाली 0 कीड आइटम जानबूझकर है क्योंकि स्थानीयकृत स्क्रिप्ट फ़ंक्शन सरणी में किसी भी 0 के इंडेक्स को स्ट्रिप्स करता है।
दूसरा, नई जेएस फाइल को उपरोक्त ट्वीक एनक्यू फ़ंक्शन में संदर्भित किया गया है।
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');
} );
});
केवल एक चीज जो आपको करने की ज़रूरत है, वह है कि आप जिस मेटाबोक्स को छिपाना चाहते हैं, उसके लिए आईडी का निर्धारण करें और उन्हें उस सरणी में पास करें जो अक्षम मेटाबॉक्स ( wp_localize_scipt
कॉल में) सेट करता है ।
कुल मिलाकर मुझे नहीं लगता है कि चयनात्मक रूप से मेटाबोक्स को अक्षम करना कमियों का कम होना है, वर्डप्रेस में छांटने वाली निष्क्रिय कार्रवाई को फिर से कॉन्फ़िगर करने का कोई समर्थन नहीं है, इसलिए प्रति तत्व के आधार पर मेटाबॉक्स को छांटना अक्षम करने के लिए सबसे अधिक हैक किया जा रहा है (मेरा कोड ऊपर है) उस के साक्ष्य)। आदर्श रूप से, यहां आवश्यक है कि वर्डप्रेस में एक सॉर्ट करने योग्य इनिट को हुक करने के लिए एक कार्रवाई हो, लेकिन वर्तमान में पोस्टबॉक्स जावास्क्रिप्ट (जो सिर्फ सेटअप सॉर्टेबल से अधिक होता है) में हार्डकोड किया गया है।
किसी भी मामले में, मुझे उम्मीद है कि मूल प्रश्न को हल करने में मदद मिलेगी।
पिछले सभी उत्तरों को जोड़ने के लिए, यदि आप भी वर्डप्रेस को कस्टम पोस्ट लोड करने से रोकना चाहते हैं, तो निम्नलिखित ट्रिक को करना चाहिए ( post
किसी भी पोस्ट प्रकार के साथ बदलें ):
add_filter( 'get_user_option_meta-box-order_post', '__return_empty_string' );
बस सरल तरीका मिला, आशा है कि नए साधक को इससे मदद मिलेगी। यह मानते हुए कि आप व्यवस्थापक enqueue शैली पर एक css फ़ाइल जोड़ सकते हैं, मैं केवल ऐसा करने के लिए css का उपयोग कर रहा हूं और अपने बुरे अंग्रेजी के लिए क्षमा चाहता हूं।
.postbox#your-metabox-id .ui-sortable-handle {
pointer-events: none;
}
आशा करता हूँ की ये काम करेगा।
$('.postbox .hndle').css('cursor','default');
:::: Re: 2nd संपादित करें , आपको भविष्य में उत्तर देने के लिए अपडेट रखना होगा: P