add_rol () একবার চালাবেন?


11

আমি অবাক হয়ে আবিষ্কার করেছিলাম যে অ্যাড_রোল () ডাটাবেসটি সংশোধন করে এবং ভূমিকা ইতিমধ্যে উপস্থিত থাকলে ব্যর্থ হয়। এখানে দুটি বিষয় অন্তর্ভুক্ত রয়েছে, প্রথমে অন্যটির চেয়ে গুরুতর: 1) আপনি যদি বিকাশে থাকেন এবং আপনার অ্যাড_রোল কোডটি আপডেট করেন তবে আপনাকে প্রথমে সরানো_রোল () 2) একবার ঠিক করা থাকলে, আপনাকে কখনই সেই কোডটি চালানো উচিত নয় আবার।

তাই সাধারণত আমি আমার অ্যাড_রেল () একটি ডাব্লুপি_ লোডড অ্যাকশন হুকের ভিতরে রাখছি। এবং যেহেতু আমি বিকাশে আছি, আমি আমার অ্যাড_রোলের আগে একটি মুছে ফেলা ()ও যুক্ত করেছি যাতে আমি নিশ্চিত হতে পারি যে আমি যদি আমার ক্যাপগুলির তালিকাটি পরিবর্তন করি তবে এটি বাস্তবে কার্যকর হবে।

তবে স্পষ্টতই এখন এটি প্রতিবার ব্লগের কোনও পৃষ্ঠা অ্যাক্সেস করার সময় চলছে। ঠিক আছে, আমি এটিকে কেবল প্রশাসক-পদক্ষেপে রাখতে পারি বা ব্যবহারকারী বা সরঞ্জামগুলির অধীনে একটি প্লাগইন পৃষ্ঠা তৈরি করতে পারি যেখানে এই ভূমিকাটি একবার তৈরি করা যেতে পারে। আমি অনুমান করি যে আমি আশা করছি সেখানে একটি সহজ, আরও মার্জিত সমাধান আছে।

আমি ভাবছি না যে সেখানে কোন রান_অনসেস অ্যাকশন আছে?

বা কেবল ভূমিকাটি যোগ করার এবং তারপরে অ্যাড_ক্যাপ () কয়েকবার ব্যবহার করার জন্য সেরা অনুশীলন? এবং তারপরেও আমি কল্পনা করি অ্যাড_ক্যাপটি ডিবি অ্যাক্সেস করছে।

আনসানসারি ডিবি অ্যাক্সেস হ্রাস করার সর্বোত্তম উপায়ের দিক দিয়ে কেবল চিন্তা করা। আপনার সেরা অনুশীলন কি?


অসাধারণ! এই প্রশ্নের জন্য ধন্যবাদ..জাস্ট remove_role()ফাংশন যোগ করার আগে add_role()আমাকে সাহায্য করেছে।
beytarovski

উত্তর:


10

ব্যবহারকারীর ভূমিকা এবং ক্ষমতাগুলি ডাটাবেসে সংরক্ষণ করা হয় তাই আপনি একবার add_role()এটি সংরক্ষণ করে ব্যবহার করেন এবং তারপরে পরবর্তী লোড ওয়ার্ডপ্রেস সেই ভূমিকাটি যেমন ভূমিকায় নির্মিত তার মতোই জানতে পারে।

এখন আপনি যদি 141 নং লাইনেadd_role() আরও বিশেষভাবে ফাংশনটি দেখেন তবে আপনি দেখতে পাবেন যে ভেরুটি সত্য হিসাবে সেট করা থাকলে (যা তিনি ডিফল্টরূপে আছেন) কেবলমাত্র এটি পরিবর্তন করতে পারবেন আপনার কল করার আগেই কেবল এটি পরিবর্তন করতে পারবেন ফাংশন এবং ভূমিকা সংরক্ষণ করা হবে না।$use_dbadd_role()

চেষ্টা করে দেখুন:

//globalize $wp_roles
global $wp_roles;
//set use_db to flase
$wp_roles->use_db = false;
//then add your role
$wp_roles->add_role( $role, $display_name, $capabilities );

হালনাগাদ:

যদি এটি কোনও পরীক্ষার / বিকাশের পরিবেশে হয় তবে আমি কোনও খারাপ দিক দেখছি না, তবে আপনি যদি কোনও লাইভ পরিবেশে থাকেন তবে আপনি প্রতিটি লোডের ভূমিকাটি তৈরি করতে সময়টি সাশ্রয় করেন।

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

function run_once($key){
    $test_case = get_option('run_once');
    if (isset($test_case[$key]) && $test_case[$key]){
        return false;
    }else{
        $test_case[$key] = true;
        update_option('run_once',$test_case);
        return true;
    }
}

**usage:**
if (run_once('add_user_role')){
    //do you stuff and it will only run once
}

আঃ বাজে কথা। এমনকি আমি এটি সম্পর্কেও ডাব্লুপি_রোলস ক্লাসটি সম্পর্কে কিছু প্রাথমিকের কাছ থেকে জানতাম। ভূমিকাগুলির জন্য ডেটাবেসটি ব্যবহার না করার কোনও খারাপ দিক আপনি ভাবতে পারেন? এবং কেবল একবার করার জন্য কি কোনও ডাব্লুপি সর্বোত্তম অনুশীলন রয়েছে?
টম অগার

আপডেটের জন্য ধন্যবাদ - আমি আপডেট_প্লেশন সমাধানের সরলতা পছন্দ করি
টম অগার

সত্যই সন্তোষজনক নয় তবে এটি সর্বোত্তম সমাধান বলে মনে হচ্ছে
Black

এই ফাংশন run_onceপ্রতিটি পৃষ্ঠার লোডে ডাটাবেস ক্রিয়াকলাপগুলি অনেক বেশি পড়ুন / লিখুন। দয়া করে এটি ব্যবহার করবেন না।
মায়াঙ্ক দুদাকিয়া
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.