এখানে একটি উদাহরণ;
প্রথমে সাব মেনু আইটেমগুলির অ্যারে কী এর উপর ভিত্তি করে তার ক্রমটি বের করার জন্য আপনি var_dump
men সাবমেনু গ্লোবাল ভেরিয়েবলের উপর একটি করতে পারেন যা নিম্নলিখিতগুলি আউটপুট দেয়;
(আমি উদাহরণ হিসাবে পোস্ট মেনু এবং সাব মেনু ব্যবহার করছি)
//shortened for brevity....
["edit.php"]=>
array(6) {
[5]=>
array(3) {
[0]=> string(9) "All Posts"
[1]=> string(10) "edit_posts"
[2]=> string(8) "edit.php"
}
[10]=>
array(3) {
[0]=> string(7) "Add New"
[1]=> string(10) "edit_posts"
[2]=> string(12) "post-new.php"
}
[15]=>
array(3) {
[0]=> string(10) "Categories"
[1]=> string(17) "manage_categories"
[2]=> string(31) "edit-tags.php?taxonomy=category"
}
[17]=>
array(3) {
[0]=> string(14) "Sub Menu Title"
[1]=> string(10) "edit_posts"
[2]=> string(17) "sub_menu_page.php"
}
}
আমরা দেখতে পাচ্ছি যে আমার সাব মেনু আইটেমটি ডিফল্ট আইটেমগুলির পরে 17 এর কী দিয়ে অ্যারেতে যুক্ত হয়।
উদাহরণস্বরূপ যদি আমি আমার সাব মেনু আইটেমটি যুক্ত করতে চাই, সরাসরি সমস্ত পোস্ট সাব মেনু আইটেমের পরে আমার অ্যারে কীটি যথাক্রমে,,,, 8 বা ৯ (যেকোনও কিছুর পরে 5 এবং 10 এর আগে সেট করে) করা দরকার।
এইভাবে আপনি এটি ...
function change_submenu_order() {
global $menu;
global $submenu;
//set our new key
$new_key['edit.php'][6] = $submenu['edit.php'][17];
//unset the old key
unset($submenu['edit.php'][17]);
//get our new key back into the array
$submenu['edit.php'][6] = $new_key['edit.php'][6];
//sort the array - important! If you don't the key will be appended
//to the end of $submenu['edit.php'] array. We don't want that, we
//our keys to be in descending order
ksort($submenu['edit.php']);
}
ফলাফল,
["edit.php"]=>
array(6) {
[5]=>
array(3) {
[0]=> string(9) "All Posts"
[1]=> string(10) "edit_posts"
[2]=> string(8) "edit.php"
}
[6]=>
array(3) {
[0]=> string(14) "Sub Menu Title"
[1]=> string(10) "edit_posts"
[2]=> string(17) "sub_menu_page.php"
}
[10]=>
array(3) {
[0]=> string(7) "Add New"
[1]=> string(10) "edit_posts"
[2]=> string(12) "post-new.php"
}
[15]=>
array(3) {
[0]=> string(10) "Categories"
[1]=> string(17) "manage_categories"
[2]=> string(31) "edit-tags.php?taxonomy=category"
}
}
... একবার চেষ্টা করে দেখুন আপনি কীভাবে যাবেন তা আমাদের জানান!
আপডেট 1:
এটি আপনার ফাংশন.এফপি ফাইলে যুক্ত করুন;
function change_post_menu_label() {
global $menu;
global $submenu;
$my_menu = 'example_page'; //set submenu page via its ID
$location = 1; //set the position (1 = first item etc)
$target_menu = 'edit.php'; //the menu we are adding our item to
/* ----- do not edit below this line ----- */
//check if our desired location is already used by another submenu item
//if TRUE add 1 to our value so menu items don't clash and override each other
$existing_key = array_keys( $submenu[$target_menu] );
if ($existing_key = $location)
$location = $location + 1;
$key = false;
foreach ( $submenu[$target_menu] as $index => $values ){
$key = array_search( $my_menu, $values );
if ( false !== $key ){
$key = $index;
break;
}
}
$new['edit.php'][$location] = $submenu[$target_menu][$key];
unset($submenu[$target_menu][$key]);
$submenu[$target_menu][$location] = $new[$target_menu][$location];
ksort($submenu[$target_menu]);
}
আমার আপডেটে আপনার মেনু অবস্থানের সেটিং পরিচালনা করার জন্য কিছুটা সহজ উপায় অন্তর্ভুক্ত রয়েছে, আপনাকে কেবল আপনার সাবমেনু পৃষ্ঠার নাম এবং মেনুটির মধ্যে আপনি যে অবস্থানটি চান তা নির্ধারণ করতে হবে। তবে আপনি যদি $location
কোনও বিদ্যমান কী এর সমান সাবমেনু পৃষ্ঠা নির্বাচন করেন তবে এটি আপনার সাথে সেই কীটি ওভাররাইড করবে, সুতরাং মেনু আইটেমটি তার জায়গায় আপনার মেনু আইটেমটির সাথে অদৃশ্য হয়ে যাবে। আপনার মেনুটি সঠিকভাবে অর্ডার করার জন্য সংখ্যাটি বৃদ্ধি বা হ্রাস হ্রাস যদি তা হয়। অনুরূপ, যদি কেউ একটি প্লাগইন ইনস্টল করে যা একই মেনু অঞ্চলটিকে প্রভাবিত করে এবং যার জন্য $location
আপনার সাবমেনু আইটেমের সমান হয় তবে একই সমস্যা দেখা দেবে। এটি রোধ করার জন্য কায়সারের উদাহরণ এটির জন্য কিছু প্রাথমিক পরীক্ষা করে।
আপডেট 2:
আমি কোডের একটি অতিরিক্ত ব্লক যুক্ত করেছি যা অ্যারের মধ্যে থাকা সমস্ত কীগুলি আমাদের পছন্দসইটির বিরুদ্ধে পরীক্ষা করে $location
এবং যদি কোনও মিল খুঁজে পাওয়া যায় তবে আমরা একে অপরের উপরের নিয়ন্ত্রণে থাকা মেনু আইটেমগুলি এড়ানোর জন্য আমাদের $location
মান বাড়িয়ে তুলব 1
। এটি তার জন্য দায়ী কোড,
//excerpted snippet only for example purposes (found in original code above)
$existing_key = array_keys( $submenu[$target_menu] );
if ($existing_key = $location)
$location = $location + 1;
আপডেট 3: (একাধিক সাব মেনু আইটেম বাছাই করতে স্ক্রিপ্ট সংশোধিত)
add_action('admin_init', 'move_theme_options_label', 999);
function move_theme_options_label() {
global $menu;
global $submenu;
$target_menu = array(
'themes.php' => array(
array('id' => 'optionsframework', 'pos' => 2),
array('id' => 'bp-tpack-options', 'pos' => 4),
array('id' => 'multiple_sidebars', 'pos' => 3),
)
);
$key = false;
foreach ( $target_menu as $menus => $atts ){
foreach ($atts as $att){
foreach ($submenu[$menus] as $index => $value){
$current = $index;
if(array_search( $att['id'], $value)){
$key = $current;
}
while (array_key_exists($att['pos'], $submenu[$menus]))
$att['pos'] = $att['pos'] + 1;
if ( false !== $key ){
if (array_key_exists($key, $submenu[$menus])){
$new[$menus][$key] = $submenu[$menus][$key];
unset($submenu[$menus][$key]);
$submenu[$menus][$att['pos']] = $new[$menus][$key];
}
}
}
}
}
ksort($submenu[$menus]);
return $submenu;
}
উপরের উদাহরণে আপনি $target_menu
ভেরিয়েবলের মধ্যে প্যারামিটারগুলি নির্ধারণ করে একাধিক সাব মেনু এবং উপ মেনু প্রতি একাধিক আইটেমগুলিকে টার্গেট করতে পারেন যা মানগুলির একটি বহুমাত্রিক অ্যারে ধারণ করে।
$target_menu = array(
//menu to target (e.g. appearance menu)
'themes.php' => array(
//id of menu item you want to target followed by the position you want in sub menu
array('id' => 'optionsframework', 'pos' => 2),
//id of menu item you want to target followed by the position you want in sub menu
array('id' => 'bp-tpack-options', 'pos' => 3),
//id of menu item you want to target followed by the position you want in sub menu
array('id' => 'multiple_sidebars', 'pos' => 4),
)
//etc....
);
এই পুনর্বিবেচনাটি উপ-মেনু আইটেমগুলিতে একে অপরের উপর একই লিখিত (অবস্থান) থাকলে ওভার-লিখনকে বাধা দেবে, কারণ এটি কোনও উপলব্ধ কী (পজিশন) অস্তিত্ব না পাওয়া অবধি চক্রাকারে চলে যাবে।