यहाँ वर्डप्रेस व्यवस्थापक मेनू कैसे बनाया जाता है, इसका एक त्वरित तरीका है - मैं बात नहीं कर रहा हूँ add_menu_page
है, इसका एपीआई की , मेरा मतलब है कि वास्तविक डिफ़ॉल्ट वर्डप्रेस मेनू।
मेनू फ़ाइल को कॉल करना
मेनू, जाहिर है, द्वारा लोड किया गया है wp-admin/admin.php
। लेकिन यह उस मानक एपीआई के माध्यम से लोड नहीं किया जाता है जिसका उपयोग हम वर्डप्रेस प्रलेखन के आधार पर करते हैं। बल्कि, पूरे मेनू (सभी संभावित विकल्प, सबमेनस, आदि) को एक साधारण सरणी के माध्यम से लोड किया जाता है जिसे परिभाषित किया गया है wp-admin/menu.php
।
तो मेनू प्रणाली लोड करने के लिए, admin.php
बस require
है menu.php
वर्डप्रेस 3.0 में ... लाइन लगभग 99।
मेनू लोड हो रहा है
मेनू को वैश्विक सरणी में संग्रहीत किया गया है $menu
। इन-लाइन प्रलेखन के अनुसार, मेनू सरणी में ये तत्व हैं:
The elements in the array are:
* 0: Menu item name
* 1: Minimum level or capability required.
* 2: The URL of the item's file
* 3: Class
* 4: ID
* 5: Icon for top level menu
उदाहरण के लिए, डैशबोर्ड है:
$menu[2] = array( __('Dashboard'), 'read', 'index.php', '', 'menu-top menu-top-first menu-icon-dashboard', 'menu-dashboard', 'div' );
फ़ाइल प्रत्येक मेनू आइटम को सरणी में जाती है और लोड करती है और अपने सभी उप-मेनू आइटम को एक सरणी में लोड करती है, जिसे $submenu
मूल मेनू के यूआरएल पर आधारित अनुक्रमित कहा जाता है। तो डैशबोर्ड का सबमेनू आइटम जिसे "डैशबोर्ड" कहा जाता है:
$submenu[ 'index.php' ][0] = array( __('Dashboard'), 'read', 'index.php' );
सिस्टम को सभी मेनू लोड करने के बाद किया जाता है (इसमें बहुत सारे नहीं हैं, लेकिन सिस्टम 5 या 10 तक समय पर सूचकांक के माध्यम से कदम उठाता है ... ध्यान दें कि डैशबोर्ड, भले ही यह पहला मेनू आइटम है, अभी भी अनुक्रमित है आइटम "2" (PHP arrays इंडेक्स 0 पर शुरू होता है ... तो यह आपको कुछ पैंतरेबाज़ी कमरा देता है)।
इस बिंदु पर, सिस्टम कॉल करता है wp-admin/includes/menu.php
।
मेनू के माध्यम से कदम
यह तीसरी फ़ाइल प्रत्येक मेनू आइटम के माध्यम से चलती है और, वर्तमान उपयोगकर्ता को सौंपे गए विशेषाधिकारों के आधार पर, या तो मेनू का उपयोग करती है या इसे हटा देती है। पहले यह सभी उप-मेनू के माध्यम से लूप करता है और उन पेजों को हटा देता है जिन्हें उपयोगकर्ता एक्सेस नहीं कर सकता है। फिर यह मूल पृष्ठों के माध्यम से लूप करता है और वही काम करता है। फिर यह किसी भी डुप्लिकेट विभाजक को हटा देता है जो समाप्त मेनू होने से रहता है।
अंत में, यह उनके नियत मेनू क्रम के आधार पर मेनू को क्रमबद्ध करता है।
कस्टम मेनू का आदेश देना
admin_menu
मेनू को सेट करने के बाद हुक को कहा जाता है लेकिन कुछ भी ऑर्डर करने से पहले । इसलिए एपीआई को "हैकिंग" किए बिना पूरे वर्डप्रेस मेनू सिस्टम को ऑर्डर करना संभव है।
कार्रवाई admin_menu
निकाल दिए जाने के बाद , आपके कस्टम पृष्ठ सिस्टम में लोड हो जाते हैं। अगली चीज जो होती है, वह है वर्डप्रेस एक फिल्टर जिसे कहा जाता है custom_menu_order
... यह फिल्टर हमेशा वापस आ जाता हैfalse
और वर्डप्रेस को बताता है कि आप कस्टम ऑर्डर का उपयोग करना चाहते हैं या नहीं।
true
इसके बजाय ध्वज सेट करने के लिए अपने विषय में निम्नलिखित जोड़ें और अपने स्पष्ट मेनू क्रम को परिभाषित करें:
function custom_menu_order($menu_ord) {
if (!$menu_ord) return true;
return array('index.php', 'edit.php', 'edit-comments.php');
}
add_filter('custom_menu_order', 'custom_menu_order');
add_filter('menu_order', 'custom_menu_order');
सभी मेनू के लिए इच्छित ऑर्डर निर्दिष्ट करें (मैंने मेनू-लोडिंग फ़ाइल में संदर्भों की आपूर्ति की ताकि आप फ़ाइल नाम की सूची प्राप्त कर सकें) और इसे इसका ध्यान रखना चाहिए।
EDIT (9/2/2010):
इस पद्धति का उपयोग करके कस्टम पोस्ट प्रकार के संपादन स्क्रीन के आदेश को निर्दिष्ट करने के लिए, आपको संपादन स्क्रीन के URL को जानना होगा। मैं ज्यादातर मामलों, यह होगा http://blog.url/wp-admin/edit.php?post_type=POST_TYPE
। यह इस बात पर निर्भर करता है कि वर्डप्रेस आपकी साइट पर कैसे सेट किया गया है (यदि यह रूट या सबफ़ोल्डर में स्थापित है) और आपके द्वारा उपयोग किए जा रहे कस्टम पोस्ट प्रकार का स्लग।
उदाहरण के लिए...
मान लें कि आपके पास 'स्टैक एक्सचेंज प्रश्न' के लिए एक कस्टम पोस्ट प्रकार है और आप चाहते हैं कि संपादक उसी अनुभाग में दिखाई दे जो डैशबोर्ड आइकन के ठीक नीचे डैशबोर्ड पर है। आप अपनी थीम की functions.php
फ़ाइल में निम्न कोड का उपयोग करेंगे:
function custom_menu_order($menu_ord) {
if (!$menu_ord) return true;
return array('index.php', 'edit.php?post_type=stack_exchange_questions');
}
add_filter('custom_menu_order', 'custom_menu_order');
add_filter('menu_order', 'custom_menu_order');
बाकी मेनू अप्रभावित रहेगा, लेकिन आपका कस्टम संपादन पृष्ठ डैशबोर्ड के समान अनुभाग में ले जाया जाएगा और इसके तुरंत बाद दिखाई देगा। आप अपने कस्टम पोस्ट प्रकारों को व्यवस्थापक मेनू के किसी भी भाग में ले जाने और उन्हें किसी भी क्रम में रखने के लिए इसका उपयोग कर सकते हैं। आप उसी तरह से मानक मेनू आइटम भी स्थानांतरित कर सकते हैं।
बस यह सुनिश्चित करें कि आप दिए गए अनुभाग में सभी मेनू आइटम का क्रम निर्दिष्ट करते हैं , अन्यथा आपका मेनू कुछ अनपेक्षित अजीबता के अधीन हो सकता है।