মেটা বাক্সগুলি টেনে আনতে অক্ষম করবেন?


17

যে কেউ এই কার্যকারিতাটি অক্ষম করবেন কীভাবে জানেন যাতে মেটা বাক্সগুলি পুনরায় স্থাপন করা যায় না?

উত্তর:


13

আমারও একই সমস্যা ছিল এবং গুগল আমাকে এখানে নিয়ে যায়। দুর্ভাগ্যক্রমে এই উত্তরগুলির কোনওটিই সহায়তা করেনি, তবে শেষ পর্যন্ত আমি উত্তরটি বের করেছিলাম, এবং এটি বেশ সহজ!

  1. প্রথমে একটি জাভাস্ক্রিপ্ট ফাইল সজ্জিত করুন (আমি এই প্রক্রিয়াটি পুনঃভাগ করব না; এমন অনেক টিউটোরিয়াল রয়েছে যা এই প্রক্রিয়াটিকে আমার চেয়ে আরও ভালভাবে বর্ণনা করতে পারে)। আমি ঝুঁকেছি admin_enqueue_scripts, এবং এটি দুর্দান্ত কাজ করেছে।
  2. এটিকে জাভাস্ক্রিপ্ট ফাইলটিতে রেখে বাছাই কার্যকারিতা অক্ষম করুন:

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

মূলত এটি কেবল jQuery UI বাছাইযোগ্য অক্ষম করে , যা মেটাবক্সকে টেনে আনার কার্যকারিতা ( postbox.dev.js: 64 ) গুলিকে শক্তি দেয় । এটি মেটাবক্স হ্যান্ডেলের কার্সারটিকে মুভি কার্সারের পরিবর্তে একটি আদর্শ মাউস পয়েন্টারে ( নীচে ব্রাসোফিলোর সৌজন্যে ) স্যুইচ করে।

আশাকরি এটা সাহায্য করবে!

সম্পাদনা: আমার যুক্ত করা উচিত যে এটি সম্ভবত এখানে অন্য কিছু পরামর্শ অনুসরণ করা এবং মেটাবক্সের ক্রমটি অক্ষম করা কার্যকর। এটি অফ-সুযোগে বিভ্রান্তি রোধ করবে কিছু ভুলক্রমে পুনরায় সক্ষম হয়েছে।

দ্বিতীয় সম্পাদনা: ভবিষ্যতের প্রজন্মের (এবং ভবিষ্যতের গুগল অনুসন্ধানকারীদের) সুবিধার জন্য, এই ফিক্সটি ওয়ার্ডপ্রেস 3.3.1 এ পরীক্ষা করা হয়েছিল। আমি অন্য সংস্করণে কথা বলতে পারি না!


অবশ্যই Q, IMHO এর জন্য +1 কম ঝামেলা মুক্ত সমাধান। এবং প্রচুর ভারী ওজনে ওজনযুক্ত;) :::: আমি সবার জন্য কেবল জেএস ব্যবহার করছি, $('.postbox .hndle').css('cursor','default');:::: পুনরায়: ২ য় সম্পাদনা , আপনাকে ভবিষ্যতের উত্তরটি আপডেট করতে হবে: পি
brasofilo

জেএস থেকে সিএসএস চালানো চালাক! আমি আমার উত্তরে এটি যুক্ত করব।
ক্রিস ভ্যান প্যাটেন

এই কোডটি বর্তমান ওয়ার্ডপ্রেস 3.9.1 এর সাথে কাজ করছে - খুব সুন্দর! :)
ফিলিপ

4

দ্রুততম উপায়টি এই ফাংশনের জন্য জেএসকে নিষ্ক্রিয় করা হয়। তবে আমি মনে করি, আপনি যখন বাক্সের জন্য শৈলীটি নিবন্ধভুক্ত করেন এবং মেটা বাক্সগুলিতে মাউস এবং খোলা / বন্ধ আইকনটির প্রভাব ছাড়াই একটি কাস্টম শৈলী শুরু করেন তখন এটি আরও ভাল।

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

আপনি যদি কেবলমাত্র কোনও নির্দিষ্ট কাস্টম পোস্ট ধরণের নির্দিষ্ট মেটাবক্সের জন্য টেনে আনতে অক্ষম করতে চান তবে কী হবে?
নেটকন্সট্রাক্টর.কম

4
এটি কাজ করে তবে এটি পোস্টের স্থিতির মতো অন্যান্য কার্যকারিতাও অক্ষম করে
fxfuture

আমি হ্যাঁ মনে করি, তবে আমি এটি পরীক্ষা করি না। আপনি একটি সহজ উপায় হিসাবে অ্যাডমিনিমাইজ প্লাগইন দিয়ে আড়াল করতে পারেন।
বুলেটজ

1
সুন্দর! আমরা কীভাবে admin_initকেবল কোনও নির্দিষ্ট পোস্ট টাইপে প্রেরণ করব ?
brasofilo

1
প্রথমে একটি নিখুঁত সমাধান বলে মনে হয়েছিল - তবে হায় - এটি বিভাগ / শ্রেণীবিন্যাস যোগ করার জন্য সমস্ত কার্যকারিতা অক্ষম করে ...
ptriek

4

আমি টানা টানা অনুমতি দেওয়ার পরামর্শের সাথে অনুরূপ প্রশ্নের উত্তর দিয়েছি , তবে সার্ভারের পাশ দিয়ে নতুন ক্রমটি সংরক্ষণ করা অক্ষম করে। এটি আপনাকে আরও নিয়ন্ত্রণ দিতে পারে এবং জাভাস্ক্রিপ্ট দ্রুত পরিবর্তন করতে পারে বলে আরও ভবিষ্যতের প্রমাণ হতে পারে তবে সার্ভারের সাথে যোগাযোগের জন্য প্রোটোকলটি আরও দৃ rob় থাকতে পারে। এই উদাহরণটি সমস্ত টেনে আনতে অক্ষম করে, তবে আপনি আপনার নির্দিষ্ট বাক্স বা মেটা পৃষ্ঠার জন্য এটি পরীক্ষা করতে এটি প্রসারিত করতে পারেন।

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

@ এফএক্সফিউচার: বোকা আমার, check_ajax_refererএকটি ক্রিয়া, ফিল্টার নয়। die()স্ক্রিপ্ট সম্পাদন শেষ করার জন্য আপনাকে কিছুটা করা উচিত , কিছু ফেরত দেওয়া উচিত নয়। আমি আমার কোড ঠিক করব।
জান ফ্যাব্রি

হ্যাঁ, আপনার সংশোধন কাজ করে না..আর, ফায়ারফক্স এবং ক্রোম কোনও কারণে পৃষ্ঠাটিকে ক্যাশে করছে। : /
জ্যাক 21

3

ওয়ার্ডপ্রেস জাভাস্ক্রিপ্ট তাদের এইচ 3 শিরোনাম দ্বারা ড্রাগ "ক্লাব" এর সাথে টেনে নেওয়া যায় এমন মেটাবক্সকে সনাক্ত করে। প্রশ্নে মেটাবক্সের উল্লেখ করে (বিশেষত যদি আপনি কাস্টম মেটাবক্স তৈরি করে থাকেন তবে আপনি এটির পরিচয়কারীকে অর্পণ করবেন) এবং ক্লাসের নামটি মুছে ফেলা বা নাম পরিবর্তন করে কোনও হ্যান্ডেল ক্লাস অক্ষম করে এটি এটিকে অক্ষম করার পক্ষে যথেষ্ট সহজ। আমার ক্ষেত্রে আমার কাছে বেশ কয়েকটি বিভাজক প্রকার রয়েছে যা আমি .hndle h3 এর সাথে লেবেল করেছি, তবে অন্য কারও পক্ষে এভাবে কাজ করা সম্ভব না is সুতরাং, আমি নীচে যা করেছি তা আপনি করতে পারেন বা আপনি ব্যবহার করতে পারেন fফাইন্ড ('। Hndle') att অ্যাটর ('শ্রেণি', '') .... বা এর মতোই কিছু। এটি আপনার ফাংশন.এফপি ফাইলে সজ্জিত একটি জেএসএস ফাইলে যাবে (এটি আপনার থিম ফোল্ডারে বা আপনার প্লাগইন ফোল্ডারে থাকুক)। এনকুইয়িংটি প্রশাসক_প্রিন্ট_স্ক্রিপ্ট দ্বারা কল করা হবে,

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

আমি সেই কোডটি মেটা বাক্সগুলির সুবিধার্থে ব্যবহার করেছিলাম কিন্তু ড্র্যাগ-অ্যান্ড-ড্রপ এবং খোলা / ক্লোজ ফাংশন ছাড়াই।


@ বেল্টজ উত্তরে (আমি উভয়ের সংমিশ্রণটি ব্যবহার করেছি) ভাল সংযোজন - যদিও আপনি jQuery বিট এড়িয়ে যেতে, এবং .postbox:hover .handlediv { display:none; }হ্যান্ডলডিভটি লুকানোর জন্য সিএসএসে যোগ করতে পারেন
ptriek

0

আমি লক্ষ্য করেছি যে এই প্রশ্নটি উত্তরহীন রয়ে গেছে, প্রশ্নকর্তা একটি সঠিক উত্তর নির্বাচন না করে হিসাবে ইনফার হয়েছে।

অন্যরা জেএস সম্পর্কিত পরামর্শ দেওয়ার সাথে সাথে জন অ্যাজাক্সের বিপক্ষে পুনঃ-অর্ডারিং সংরক্ষণ করা বন্ধ করার একটি কার্যকরী উদাহরণ দিয়েছিল।

আমি যতদূর বুঝতে পেরেছি আপনি যা করতে চান তা টেনে আনতে অক্ষম করা, এর বেশি কিছু নয়। এটি করার জন্য আপনার দু'টি জিনিস প্রয়োজন, প্রথমত একটি ফাংশন এজ্যাক্স সেভিং অ্যাকশনে বাধা দেওয়ার জন্য, তবে দ্বিতীয়ত আপনাকে জেএসটিকে টানা এবং পৃষ্ঠায় অন্য কোথাও কার্যকারিতা হত্যার ছাড়াই বন্ধ করতে হবে, যদিও এটি নির্বাচনের জন্য এটি নির্বাচন করার জন্যও রয়েছে il একটি পোস্ট টাইপ বা নির্দিষ্ট মেটাবক্স।

জ্যানস ফাংশন এবং কিছু 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 যা ফলপ্রসূ উপাদানগুলি থেকে বিপাক বাছাইযোগ্য শ্রেণিটি সরিয়ে দেয়, এটি টানতে বাধা দেয়।

jQuery(document).ready(function($){
    $('.meta-box-sortables').removeClass('meta-box-sortables');
});

আপনি দেখতে পাচ্ছেন যে আমি কোড যোগ করার জন্য 1 উদাহরণ পোস্টের ধরণে যুক্ত করেছি, এই ক্ষেত্রে বইটি book তবে আপনি উল্লেখ করেছেন যে এটি নির্দিষ্ট বিপাকের জন্য এটি নিষ্ক্রিয় করার সম্ভাবনাও রয়েছে।

এটি সম্পন্ন করা যেতে পারে, তাদের মধ্যে কয়েকটি ছোট্ট পার্শ্ব-প্রতিক্রিয়া রয়েছে, যেগুলি টেনে আনতে রোধ করার জন্য প্রদত্ত মেটাবক্স থেকে ক্লাসগুলি সরিয়ে আপনি টগল ফাংশন (যেমন মেটাবক্স শিরোনাম টগল কার্যকারিতা) প্রতিরোধ করে।

বলেছিল, এটা করা যায় ...

প্রথমত, আপনি এতে 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রেখাটি uncomment করা প্রয়োজন ।

লোকালাইজ কলের অভ্যন্তরে অ্যারেটি কোন মেটাবক্সগুলি অক্ষম করতে হবে তা নির্ধারণ করে, খালি 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

সবেমাত্র সহজ উপায়টি খুঁজে পেয়েছি, আশা করি নতুন সন্ধানকারী এটির জন্য সহায়তা করবে। ধরে নিচ্ছি আপনি অ্যাডমিন এনকুই স্টাইলে একটি সিএসএস ফাইল যুক্ত করতে পারছেন, আমি কেবল এটি করতে সিএসএস ব্যবহার করছি এবং আমার খারাপ ইংরেজির জন্য দুঃখিত।

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

আশা করি এটা সাহায্য করবে.

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.