কীভাবে ডিফল্ট স্ক্রিন অপশন সেট করবেন?


20

আমি পর্দার বিকল্পগুলি ব্যবহার করে মেটা বাক্সগুলি আড়াল করতে সক্ষম হতে চাই, সেগুলি সরাতে বা তাদের ব্যবহারকারীর ভূমিকাতে সীমাবদ্ধ না করে, লক্ষ্যটি হ'ল ব্যবহারকারীর জন্য মেটা বাক্সটি "অনিচ্ছুক" করা।

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

কোন ধারনা?


প্রতি ব্যবহারকারীর নাম অনুসারে আপনাকে এমন নিজস্ব প্লাগইন তৈরি করতে হবে যা তাদের নামের পাশে একটি চেকবাক্স সহ সমস্ত ব্যবহারকারীকে পপুলেট করে এবং মেটা বাক্স বা একাধিক মেটা বাক্স দেখানোর জন্য একটি ফিল্টারে হুক করে।
উইক

দ্বারা ডিফল্ট মানে তারা একবার যখন নতুন ব্যবহারকারী তৈরি করা হয়, সঠিক প্রয়োগ করতে হবে?
রাস্ট

উত্তর:


25

আপনি ঠিক অ্যাডমিন পোস্ট স্ক্রিনে মেটাবক্সগুলি উল্লেখ করছেন?

তার জন্য আপনার কোনও প্লাগইন লাগবে না, কেবল আপনার ফাংশন.এফপি ফাইলের মধ্যে নিম্নলিখিতটি ফেলে দিন।

// add_action('user_register', 'set_user_metaboxes');
add_action('admin_init', 'set_user_metaboxes');
function set_user_metaboxes($user_id=NULL) {

    // These are the metakeys we will need to update
    $meta_key['order'] = 'meta-box-order_post';
    $meta_key['hidden'] = 'metaboxhidden_post';

    // So this can be used without hooking into user_register
    if ( ! $user_id)
        $user_id = get_current_user_id(); 

    // Set the default order if it has not been set yet
    if ( ! get_user_meta( $user_id, $meta_key['order'], true) ) {
        $meta_value = array(
            'side' => 'submitdiv,formatdiv,categorydiv,postimagediv',
            'normal' => 'postexcerpt,tagsdiv-post_tag,postcustom,commentstatusdiv,commentsdiv,trackbacksdiv,slugdiv,authordiv,revisionsdiv',
            'advanced' => '',
        );
        update_user_meta( $user_id, $meta_key['order'], $meta_value );
    }

    // Set the default hiddens if it has not been set yet
    if ( ! get_user_meta( $user_id, $meta_key['hidden'], true) ) {
        $meta_value = array('postcustom','trackbacksdiv','commentstatusdiv','commentsdiv','slugdiv','authordiv','revisionsdiv');
        update_user_meta( $user_id, $meta_key['hidden'], $meta_value );
    }
}

মূলত যা ঘটছে তা হ'ল বর্তমানে লগ ইন করা ব্যবহারকারীর জন্য, আপনি wp_usermeta টেবিলের কিছু সংরক্ষিত মেটা_ভ্যালু পরিবর্তন করছেন।

এই ফাংশনটি ব্যবহার করার দুটি উপায় রয়েছে, আপনি হয় 'ইউজার_রেজিস্টারে' প্রবেশ করতে পারেন অথবা আপনি 'অ্যাডমিন_ইনিট' এ প্রবেশ করতে পারেন।

'User_register' ব্যবহারের সুবিধাটি হ'ল নতুন ব্যবহারকারী নিবন্ধিত হলে (এইভাবে ওভারহেড নিম্নতর) কেবল তখনই এই ফাংশনটি চালু হবে। তবে এটি ইতিমধ্যে বিদ্যমান ব্যবহারকারীদের জন্য কাজ করবে না।

আপনি যদি এটি ইতিমধ্যে বিদ্যমান ব্যবহারকারীদের জন্য কাজ করতে চান তবে 'প্রশাসন_ইনিট'-এ intoুকুন। অবশ্যই অসুবিধেটি হ'ল এখন ব্যবহারকারী যখনই প্রশাসক পৃষ্ঠায় যান ততবার এই ফাংশনটি জ্বলে ওঠে।


15
এই না একটি থিম কাজ এবং থিমের functions.php মধ্যে অন্তর্গত নয়।
ফুসিয়া

6
@ টসচো আমি সত্যিই এর সাথে একমত নই স্বাভাবিকভাবেই আপনি এটি একটি প্লাগিনে রেখে দিতে পারেন তবে উদাহরণস্বরূপ আপনি যদি নিজের জন্য বা সম্ভবত এমন কোনও ক্লায়েন্টের জন্য কোনও থিম তৈরি করে যাচ্ছেন যা নির্দিষ্ট কিছু বাক্স দেখার দরকার নেই তবে এটি অতিরিক্ত ম্যানেজমেন্টের ওভারহেড যুক্ত করে কেন এটি প্লাগিনে অন্তর্ভুক্ত করে। এটিকে ফাংশন.এফপি ফাইলের মধ্যে ফেলে দেওয়ার মাধ্যমে আপনি নিশ্চিত করে যে কোনও প্লাগইন ইনস্টল ও সক্রিয় হয়েছে তা নিশ্চিত না করে থিমের জন্য অভিজ্ঞতাটি সুসংগত।
ড্রেববেলস

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

+1 ভাল উত্তর - কখনও কখনও আপনি এগুলি সুস্পষ্টভাবে সেট করতে চান। এটি একটি ভাল বেস, এবং অবশ্যই এই কোডটি যখন প্রয়োজন হয় তখন কল করার জন্য সহজেই পরিবর্তন করা যেতে পারে (উদাহরণস্বরূপ একটি নতুন ব্যবহারকারী যুক্ত করা), যাতে আপনি সত্যিকার অর্থে "ডিফল্ট" বিকল্পগুলি সেট করছেন এবং তাদের পরিবর্তনকারী ব্যবহারকারীদের উপর জোর করে বিকল্পগুলি চাপছেন না। আমি আমার থিমের functions.phpফাইলে এই কোডটি যুক্ত করব কারণ ডিফল্ট বিকল্পগুলি একটি নির্দিষ্ট প্রকল্পের জন্য, যা আমি যে থিমটি বিকাশ করছি তার দ্বারা প্রতিনিধিত্ব / গৃহীত হয়।
cwd

1
এই উত্তরটি লেখার কয়েক মাস পরে, ফিল্টারগুলি যেখানে উত্তরটি অচল করে দেওয়ার মূলটিতে যুক্ত হয়েছিল।
WraithKenny

16

সেখানে default_hidden_meta_boxesফিল্টার রয়েছে get_hidden_meta_boxes()যা সংশোধন করতে দেয় যা ব্যবহারকারী যতক্ষণ না স্ক্রিন বিকল্পগুলিতে তার পছন্দগুলি সংশোধন না করে ততক্ষণ প্রদর্শিত হয় না।


7

ইতিমধ্যে পোস্ট করা তিনটি সমাধান সম্পর্কে আমার কাছে কোড মন্তব্য রয়েছে, তবে একটি সাধারণ মন্তব্যও

তারা একটি সাব-থিম পছন্দ উপস্থাপন করে: হয় হয় ব্যবহারকারীর স্ক্রিন অপশন চেকবক্স পছন্দকে ওভাররাইড করে; বা এটিকে সম্মান করুন তবে ব্যবহারকারী যদি অন্য মেটা_বক্সে এমনকি আপনার কোডটি ডব্লিউপি-তে থাকাকালীন চেকবক্সগুলি পরিবর্তন করে থাকে তবে আপনার কোডটিকে উপেক্ষা করুন। আপনার সমস্ত ব্যবহারকারী নতুন হলে সম্মানজনক পছন্দটি কেবল কার্যকর হবে বলে মনে হয়। সর্বোত্তম সমাধানটি হ'ল আপনার নির্দিষ্ট মেটা_বক্স ডিফল্ট ব্যবহারকারীর দ্বারা পরিবর্তন করা হয়েছে কিনা তা নির্ধারণ করার জন্য একটি কাস্টম ব্যবহারকারী বিকল্প সেট করা হবে এবং সেটিকে সম্মান করুন। না, আমি কোডটি লিখিনি! সহজ হওয়া উচিত ... :)

তিনটি সমাধান পোস্ট:

1. WraithKenny এর hidden_meta_boxesসমাধান হ'ল ব্যবহারকারী_শক্তিকে ওভাররাইড করে। নোট করুন এটিতে সমস্ত পোস্টের প্রকার ('পোস্ট', 'পৃষ্ঠা', 'লিঙ্ক', 'সংযুক্তি', এবং কোনও কাস্টম পোস্টের প্রকারগুলি) রয়েছে covers আপনি এটি সুনির্দিষ্ট না করতে চাইলে তা ঠিক। আপনি আপনার add_meta_box()কলগুলিতে পোস্ট টাইপ নির্দিষ্ট করেছেন । আপনি সেগুলির সাথে মেলে দেখার চেষ্টা করতে পারেন বা এটির সাথে ডানা মেলে যা মেলে না সেগুলি উপেক্ষা করা হবে। আপনি যদি ফিল্টারটিতে পোস্ট_ টাইপটি জানতে চান তবে আপনি অতিরিক্ত screenপ্যারামিটারটি ব্যবহার করতে পারেন :

add_filter('hidden_meta_boxes', 'foo_hidden_meta_boxes', 10, 2);
function foo_hidden_meta_boxes($hidden, $screen) {
    $post_type= $screen->id;
    switch ($post_type) {
        // case 'post', 'page', 'link', 'attachment', and any custom post types
        // $hidden[]= 'foo_box_id';
        // /or/
        // $hidden= array_diff($hidden, array('foo_box_id'));
    }
    return $hidden;
}

২. রার্স্ট যেমন বলেছেন, ব্যবহারকারী_পশনকে default_hidden_meta_boxesসম্মান করে। হিসাবে hidden_meta_boxes, আপনি পোস্ট_ টাইপ পৃথক করতে to স্ক্রিন প্যারামিটার ব্যবহার করতে পারেন।

৩. ড্রেবেবেলসের সেট_উজার_মেটাবক্স () ফাংশনও ব্যবহারকারী_পশনকে সম্মান করে। নোট করুন এটি 'পোস্ট' সম্পাদনা স্ক্রিনের জন্য হার্ড-কোডড। 'পৃষ্ঠা' সম্পাদনা স্ক্রিন এবং অন্যান্য পোস্ট_ টাইপগুলি পরিচালনা করতে এই লুপটিতে কোডটি মোড়ক করুন:

function set_user_metaboxes($user_id=NULL) {
    $post_types= array( 'post', 'page', 'link', 'attachment' );
    // add any custom post types here:
    // $post_types[]= 'my_custom_post_type';
    foreach ($post_types as $post_type) {

       // These are the metakeys we will need to update
       $meta_key= array(
           'order' => "meta-box-order_$post_type",
           'hidden' => "metaboxhidden_$post_type",
       );

       // The rest is the same as drebabels's code,
       // with '*_user_meta()' changed to '*_user_option()'

       // So this can be used without hooking into user_register
       if ( ! $user_id)
           $user_id = get_current_user_id(); 

       // Set the default order if it has not been set yet
       if ( ! get_user_option( $meta_key['order'], $user_id ) ) {
           $meta_value = array(
               'side' => 'submitdiv,formatdiv,categorydiv,postimagediv',
               'normal' => 'postexcerpt,tagsdiv-post_tag,postcustom,commentstatusdiv,commentsdiv,trackbacksdiv,slugdiv,authordiv,revisionsdiv',
               'advanced' => '',
           );
           update_user_option( $user_id, $meta_key['order'], $meta_value, true );
       }

       // Set the default hiddens if it has not been set yet
       if ( ! get_user_option( $meta_key['hidden'], $user_id ) ) {
           $meta_value = array('postcustom','trackbacksdiv','commentstatusdiv','commentsdiv','slugdiv','authordiv','revisionsdiv');
           update_user_option( $user_id, $meta_key['hidden'], $meta_value, true );
       }
    }
 }

হ্যাঁ, get_user_metaহওয়া উচিত get_user_option। একক-সাইটের জন্য এটি কোনও ব্যাপার নয়, এমনকি বহু-সাইটের জন্য এটিও সম্ভবত কার্যকর নয়। কেন: update_user_optionএর জন্য 'সত্য' গ্লোবাল প্যারামিটার রয়েছে তার জন্য ডাব্লুপি-অ্যাডমিন / অন্তর্ভুক্ত / অজ্যাক্স-ক্রিয়াকলাপগুলি দেখুন ।


1
add_filter( 'hidden_meta_boxes', 'custom_hidden_meta_boxes' );
function custom_hidden_meta_boxes( $hidden ) {
    $hidden[] = 'your_metabox';
    return $hidden;
}

এমন একটি hidden_meta_boxesফিল্টারও রয়েছে যা প্রতিটি পৃষ্ঠার লোডে মেটাবক্সকে (এটি গোপন করে) "আনচেক" করবে (তবে একেবারে ডাটাবেস আপডেট করতে হবে না)। আপনি যদি নতুন ব্যবহারকারীদের নিজেরাই বাক্সটি চেক না করা অবধি বন্ধ করতে চান তবে রাস্টের উত্তরটি ব্যবহার করুন।

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