यहाँ एक उदाहरण है;
अपनी सरणी कुंजी के आधार पर उप मेनू आइटम के क्रम का पता लगाने के लिए आप var_dump
$ सबमेनू वैश्विक चर पर कर सकते हैं जो निम्नलिखित आउटपुट करेगा;
(मैं उदाहरण के रूप में पोस्ट मेनू और उप मेनू का उपयोग कर रहा हूं)
//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 की कुंजी के साथ सरणी में जुड़ जाता है।
यदि उदाहरण के लिए मैं अपना सब मेनू आइटम जोड़ना चाहता हूं, तो सीधे सभी पोस्ट उप मेनू आइटम के बाद मुझे अपनी सरणी कुंजी को 6, 7, 8 या 9 (क्रमशः 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....
);
यह संशोधन उप मेनू आइटम को एक-दूसरे को लिखने से रोक देगा यदि उनके पास एक ही कुंजी (स्थिति) है, क्योंकि यह तब तक चक्र होगा जब तक कि यह एक उपलब्ध कुंजी (स्थिति) नहीं ढूंढता है जो मौजूद नहीं है।