मेटा बॉक्सों को खींचना अक्षम करें?


17

किसी को पता है कि इस कार्यक्षमता को कैसे अक्षम किया जाए ताकि मेटा बॉक्स को रिपॉजिट न किया जा सके?

जवाबों:


13

मुझे भी यही समस्या थी, और Google ने मुझे यहाँ तक पहुँचाया। दुर्भाग्य से इनमें से किसी भी उत्तर ने मदद नहीं की, लेकिन मैंने अंततः उत्तर का पता लगा लिया, और यह काफी आसान है!

  1. सबसे पहले, एक जावास्क्रिप्ट फ़ाइल संलग्न करें (मैं इस प्रक्रिया को पुनः प्राप्त नहीं करूंगा; कई ट्यूटोरियल हैं जो इस प्रक्रिया को I से बेहतर बता सकते हैं)। मैं में झुका admin_enqueue_scripts, और यह ठीक काम किया।
  2. उस जावास्क्रिप्ट फ़ाइल में डालकर छँटाई कार्यक्षमता को अक्षम करें:

    jQuery(document).ready( function($) {
        $('.meta-box-sortables').sortable({
            disabled: true
        });
    
        $('.postbox .hndle').css('cursor', 'pointer');
    });

अनिवार्य रूप से यह सिर्फ jQuery UI सॉर्टेबल को निष्क्रिय करता है , जो मेटाबोक्स ड्रैगिंग कार्यक्षमता ( पोस्टबॉक्स.देव.जेएस: 64 ) को शक्ति देता है । यह मेटाबोक्स हैंडल पर कर्सर को एक मूव कर्सर ( नीचे ब्रैसोफिलो के विचार ) के बजाय एक मानक माउस पॉइंटर पर स्विच करता है ।

उम्मीद है की यह मदद करेगा!

संपादित करें: मुझे यह जोड़ना चाहिए कि यह शायद यहां कुछ अन्य सलाह का पालन करने के लायक है और मेटाबोक्स ऑर्डर की बचत को अक्षम करता है। यह ऑफ-मौका पर भ्रम को रोकेगा जिससे कुछ गलती से पुनः सक्षम हो जाता है।

दूसरा संपादन: भविष्य की पीढ़ियों (और भविष्य के Google खोजकर्ताओं) के लाभ के लिए, इस फिक्स का परीक्षण वर्डप्रेस 3.3.1 पर किया गया था। मैं अन्य संस्करणों के लिए बात नहीं कर सकता!


क्यू, आईएमएचओ के लिए +1 कम परेशानी मुक्त समाधान। और बहुत सारे भारी-भरकम वज़न में;) :::: मैं सभी के लिए केवल JS का उपयोग कर रहा हूँ, $('.postbox .hndle').css('cursor','default');:::: Re: 2nd संपादित करें , आपको भविष्य में उत्तर देने के लिए अपडेट रखना होगा: P
ब्रासोफिलो

जेएस से सीएसएस चालाकी से चालाक है! मैं अपने उत्तर में जोड़ दूंगा।
क्रिस वान पैटन

यह कोड वर्तमान वर्डप्रेस 3.9.1 के साथ काम कर रहा है - बहुत अच्छा! :)
फिलिप

4

इस फ़ंक्शन के लिए सबसे तेज़ तरीका JS को निष्क्रिय कर रहा है। लेकिन मुझे लगता है, यह बेहतर है जब आप बॉक्स के लिए शैली को निष्क्रिय कर देते हैं और माउस के लिए प्रभावों के बिना एक कस्टम शैली और मेटा बक्से पर खुले / बंद आइकन को निष्क्रिय कर देते हैं।

function fb_remove_postbox() {
    wp_deregister_script('postbox');
}
add_action( 'admin_init', 'fb_remove_postbox' );

क्या होगा यदि आप किसी विशिष्ट कस्टम पोस्ट प्रकार पर किसी विशिष्ट मेटाबॉक्स के लिए ड्रैगिंग को अक्षम करना चाहते हैं?
NetConstructor.com 8

4
यह काम करता है लेकिन यह पोस्ट कार्यक्षमता जैसे अन्य कार्यक्षमता को भी निष्क्रिय करता है
fxfuture

मुझे लगता है हाँ, लेकिन मैं यह परीक्षण नहीं है। आप प्लगइन के साथ छिपा सकते हैं एक आसान तरीका के रूप में प्रशासित करें।
bueltge

1
अच्छा है! हम इसे admin_initकेवल कुछ विशिष्ट प्रकार के पोस्ट में कैसे भेजेंगे?
ब्रासोफिलो

1
पहली बार में एक सही समाधान लग रहा था - लेकिन अफसोस - यह भी श्रेणी / वर्गीकरण को जोड़ने के लिए सभी कार्यक्षमता को अक्षम करता है ...
ptriek

4

मैंने ड्रैगिंग की अनुमति देने के सुझाव के साथ एक समान प्रश्न का उत्तर दिया, लेकिन सर्वर पर नए ऑर्डर को सहेजने को अक्षम करें। यह आपको अधिक नियंत्रण दे सकता है, और अधिक भविष्य के प्रमाण हो सकते हैं क्योंकि जावास्क्रिप्ट जल्दी बदल सकता है, लेकिन सर्वर के साथ संचार करने के लिए प्रोटोकॉल अधिक मजबूत रह सकता है। यह उदाहरण सभी ड्रैगिंग को अक्षम करता है, लेकिन आप इसे अपने विशिष्ट बॉक्स या मेटा पेज की जांच के लिए विस्तारित कर सकते हैं।

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');
   }
}

धन्यवाद जनवरी - मैंने इसे अपने फंक्शन्स में जोड़ा है। एफपी लेकिन यह कुछ नहीं करता है?
fxfuture

@fxfuture: सिली मी, check_ajax_refererएक एक्शन है, फिल्टर नहीं। आपको बस die()स्क्रिप्ट निष्पादन समाप्त करना चाहिए , कुछ भी वापस नहीं करना चाहिए । मैं अपना कोड ठीक करूंगा।
जन फैब्री

हाँ, आपका सुधार काम नहीं करता है..ओआर, फ़ायरफ़ॉक्स और क्रोम किसी कारण से पृष्ठ को कैशिंग कर रहे हैं। : /
ज़ैक

3

वर्डप्रेस जावास्क्रिप्ट "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");
});

2

मैं इस जावास्क्रिप्ट हैक को भी जोड़ूंगा:

<script type='text/javascript'>
    jQuery(document).ready(function ($) {
        $('.handlediv').remove();
    });
</script>

... और यह सीएसएस:

.postbox .hndle:hover {
    cursor:default;
}

मैंने उस कोड का उपयोग मेटा बॉक्स का लाभ उठाने के लिए किया, लेकिन ड्रैग-एंड-ड्रॉप और ओपन / क्लोज फंक्शन के बिना।


@Bueltge उत्तर के लिए अच्छा जोड़ (मैंने दोनों के संयोजन का उपयोग किया) - हालांकि आप jQuery बिट को भी छोड़ सकते हैं, और .postbox:hover .handlediv { display:none; }.handlediv
ptriek

0

मैंने देखा कि यह प्रश्न अनुत्तरित रह गया है, क्योंकि पूछने वाला सही उत्तर का चयन नहीं कर रहा है।

जान ने अजाक्स पर बचाए जा रहे मेटाबॉक्स री-ऑर्डर को रोकने का एक कार्यशील उदाहरण दिया, जबकि अन्य ने जेएस से संबंधित सुझाव दिए।

जहाँ तक मैं समझता हूँ कि आप यह सब करना चाहते हैं, ड्रैगिंग को अक्षम करना है, इससे अधिक कुछ नहीं। ऐसा करने के लिए आपको दो चीजों की आवश्यकता होगी, सबसे पहले अजाक्स सेविंग एक्शन को इंटरसेप्ट करने के लिए एक फंक्शन, लेकिन दूसरा यह कि आपको जेएस ड्रैगिंग को रोकने की जरूरत है और पेज में कहीं और फंक्शनलिटी मारे बिना ड्रापिंग करना है, जबकि इसे सेलेक्ट करने के लिए भी करना होगा। एक पोस्ट प्रकार या विशेष रूप से मेटाबॉक्स।

Jans फ़ंक्शन और कुछ jQuery का उपयोग करके हम ऐसा कर सकते हैं कि पूरी तरह से अन्य कार्यक्षमता को मारे बिना पोस्टबॉक्स स्क्रिप्ट बनाता है, जैसे ..

PHP कोड थीम फ़ंक्शन फ़ाइल या प्लगइन फ़ाइल के लिए

एनक्यू काम करने के लिए उपयुक्त लाइनों में से 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 / JS

बहुत ही मूल 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कॉल में) सेट करता है ।

कुल मिलाकर मुझे नहीं लगता है कि चयनात्मक रूप से मेटाबोक्स को अक्षम करना कमियों का कम होना है, वर्डप्रेस में छांटने वाली निष्क्रिय कार्रवाई को फिर से कॉन्फ़िगर करने का कोई समर्थन नहीं है, इसलिए प्रति तत्व के आधार पर मेटाबॉक्स को छांटना अक्षम करने के लिए सबसे अधिक हैक किया जा रहा है (मेरा कोड ऊपर है) उस के साक्ष्य)। आदर्श रूप से, यहां आवश्यक है कि वर्डप्रेस में एक सॉर्ट करने योग्य इनिट को हुक करने के लिए एक कार्रवाई हो, लेकिन वर्तमान में पोस्टबॉक्स जावास्क्रिप्ट (जो सिर्फ सेटअप सॉर्टेबल से अधिक होता है) में हार्डकोड किया गया है।

किसी भी मामले में, मुझे उम्मीद है कि मूल प्रश्न को हल करने में मदद मिलेगी।


नोट: यह कोड वर्डप्रेस के वर्तमान संस्करण (3.9.1) के साथ काम नहीं कर रहा है
फिलिप

0

पिछले सभी उत्तरों को जोड़ने के लिए, यदि आप भी वर्डप्रेस को कस्टम पोस्ट लोड करने से रोकना चाहते हैं, तो निम्नलिखित ट्रिक को करना चाहिए ( postकिसी भी पोस्ट प्रकार के साथ बदलें ):

add_filter( 'get_user_option_meta-box-order_post', '__return_empty_string' );

0

बस सरल तरीका मिला, आशा है कि नए साधक को इससे मदद मिलेगी। यह मानते हुए कि आप व्यवस्थापक enqueue शैली पर एक css फ़ाइल जोड़ सकते हैं, मैं केवल ऐसा करने के लिए css का उपयोग कर रहा हूं और अपने बुरे अंग्रेजी के लिए क्षमा चाहता हूं।

.postbox#your-metabox-id .ui-sortable-handle {
    pointer-events: none;
}

आशा करता हूँ की ये काम करेगा।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.