व्यवस्थापक मेनू में एक विभाजक जोड़ें?


22

किसी को पता है कि कैसे एक व्यवस्थापक मेनू विभाजक जोड़ने के लिए? मुझे यह मिला लेकिन इससे कोई फायदा नहीं हुआ।

कोई विचार?


यदि किसी के लिए अभी भी इसका उत्तर खोजा जा रहा है , तो यह प्लगइन काम को संभाल सकता है।
user31760

जवाबों:


33

यहां एक त्वरित और गंदा तरीका है जिसे आप चाहते हैं।

पृष्ठभूमि

वर्डप्रेस एक वैश्विक सरणी में व्यवस्थापक मेनू अनुभागों को संग्रहीत करता है $menu। किसी विभाजक को जोड़ने के लिए आप एक तत्व को $menuएक अनुक्रमणिका का उपयोग करके जोड़ते हैं जो उन विकल्पों के अनुक्रमितों के बीच होता है जिन्हें आप अलग करना चाहते हैं।

add_admin_menu_separator()फ़ंक्शन का उपयोग करना

इसलिए मैंने इसके लिए तर्क को एनकैप्सुलेट करने के लिए एक फंक्शन लिखा है add_admin_menu_separator()। आपको एक सरणी अनुक्रमणिका संख्या चुनने की आवश्यकता होगी जो उस विकल्प से अधिक है जिसके बाद आप एक विभाजक जोड़ना चाहते हैं, और फिर add_admin_menu_separator()पासिंग फ़ंक्शन को अपने सूचकांक के रूप में कहा जाता है।

उदाहरण के लिए:

add_admin_menu_separator(37);

add_admin_menu_separator()समारोह में ही

यहां फ़ंक्शन की परिभाषा है add_admin_menu_separator()जिसे आप अपने थीम की functions.phpफ़ाइल में कॉपी कर सकते हैं । हां यह आर्कन है, लेकिन फिर ऐसा कोड है जो वैश्विक $menuसरणी बनाता है और उसका उपयोग करता है । (योजनाएँ अंतत: इसका आभार व्यक्त करने के लिए हैं, लेकिन यह शायद कुछ साल होगा।)

function add_admin_menu_separator($position) {
  global $menu;
  $index = 0;
  foreach($menu as $offset => $section) {
    if (substr($section[2],0,9)=='separator')
      $index++;
    if ($offset>=$position) {
      $menu[$position] = array('','read',"separator{$index}",'','wp-menu-separator');
      break;
    }
  }
  ksort( $menu );
}

उस इंडेक्स को खोजना $menuजिसमें आपको जरूरत है

यह जानने के लिए आप यदि आप एक कर सकते हैं की जरूरत है क्या इंडेक्स नंबर var_dump()की $GLOBALS['menu']एक के भीतर से admin_initहुक। यहाँ कोड का एक सा है आप functions.phpअस्थायी रूप से अपने विषय की फ़ाइल में देख सकते हैं कि मूल्यों क्या हैं। यह केवल तभी काम करेगा जब आप शुरू होने वाले URL का अनुरोध करें /wp-admin/ (लेकिन FTP के साथ करना सुनिश्चित करें और थीम संपादक में बिल्ट न करें या आप अपनी साइट तक पहुंच ढीली कर देंगे, कम से कम तब तक जब तक कि आप अपने विषय की functions.phpफ़ाइल में एफ़टीपी एक्सेस प्राप्त न करें !)

add_action('admin_init','dump_admin_menu');
function dump_admin_menu() {
  if (is_admin()) {
    header('Content-Type:text/plain');
    var_dump($GLOBALS['menu']);
    exit;
  }
}

यह भी देखें:

BTW, आपको सामान्य रूप से व्यवस्थापक मेनू के साथ काम करने के लिए ये लिंक उपयोगी मिल सकते हैं:

हालांकि मेरे व्यवस्थापक मेनू कक्षाएं वर्तमान में विभाजकों को जोड़ने का एक आसान तरीका प्रदान नहीं करती हैं, जो मुझे लगता है कि मैं अब वह जोड़ूंगा जब मेरे पास समय होगा।


धन्यवाद माइक, मैंने पूरी रात वैश्विक संस्करण मेनू का अध्ययन किया, लेकिन मैं एक विभाजक जोड़ने में कामयाब नहीं हुआ, अब यह मेरे लिए बहुत स्पष्ट है कि मेनू wp में कैसे काम करता है।
user1147 16

हाय @ user1147 : हाँ, उन्हें यह पता लगाना बहुत कठिन है। जब मुझे पहली बार ऐसा करना पड़ा तो मुझे काफी समय लग गया, और मैं अभी भी उनके साथ संघर्ष करता हूं। इसलिए मैंने उन कार्यों को क्यों लिखा, इसलिए मैं इसे अभी से आसान तरीका बता सकता हूं! वैसे भी, मेरे जवाब से खुशी हुई।
माइकस्किंकल

1
@MikeSchinkel यह विधि मेरे लिए वर्डप्रेस 3.3.1 के साथ काम नहीं कर रही है।
जिम ज्यूर्ट्स

1
@JimGeurts - यह मेरे लिए भी काम नहीं कर रहा है: /
इवान मैटसन

2
मैंने सिर्फ इसका परीक्षण किया था और यह 4.5 में "काम" करता है, लेकिन वर्डप्रेस ने उन लाइनों से छुटकारा पाने का फैसला किया जो वे अभी दिखाई नहीं देते हैं। मुझे लगता है कि अगर सीएसएस को जोड़ने के लिए समाधान है, लेकिन मेरे जीवन के लिए मैं समझ नहीं पा रहा हूं कि सीएसएस जोड़ने के लिए क्या करूं क्योंकि मैं बैकएंड देव हूं और सीएसएस को चूसता हूं। शायद कोई और सुझाव दे सकता है?
माइकस्किंकल

4

यह आसान है:

add_action( 'admin_init', 'add_sep' );
function add_sep() {

    if ( ! is_admin() )
        return false;

    global $menu;
    $sep = $menu[4]; // that's the default separator
    $pos = 6; // change it for the desired position
    $menu = array_merge(
        array_slice( $menu, 0, $pos ),
        array( $sep ),
        array_slice( $menu, $pos + 1, -1)
    );
    $menu[ $pos - 1 ][4] .= ' menu-top-last';
    $menu[ $pos + 1 ][4] .= ' menu-top-first';

}

नोट: डिफॉल्ट सेपरेटर पोज़िशन ( $menu[4]) इस हुक के पहले आपके द्वारा किए गए कॉन्फ़िगरेशन (या आपके प्लग इन) के आधार पर भिन्न हो सकती है।

बेशक, आप menu-top-firstऔर menu-top-lastवर्गों को आत्मनिरीक्षण भी कर सकते हैं ।


2

विभाजकों के साथ कुछ मुद्दों को जोड़ा नहीं जा रहा था, यह उस तरह से था जैसे कि वर्डप्रेस नकली विभाजकों को हटा देता है। ksort($menu);फ़ंक्शन के निचले भाग में जोड़कर समस्या को ठीक किया।


1

यह MastaBaba के उत्तर पर बनाता है, लेकिन आपके द्वारा निर्दिष्ट स्थिति में कुछ भी प्रतिस्थापित नहीं करता है - यह विभाजक को बाद में जोड़ता है।

एक अनाम फ़ंक्शन का भी उपयोग करता है इसलिए यह केवल PHP संस्करण 5.3 और इसके बाद के संस्करण के साथ संगत है।

add_action( 'admin_menu', function () {
    $position = 29;
    global $menu;
    $separator = [
        0 => '',
        1 => 'read',
        2 => 'separator' . $position,
        3 => '',
        4 => 'wp-menu-separator'
    ];
    if (isset($menu[$position])) {
        $menu = array_splice($menu, $position, 0, $separator);
    } else {
        $menu[$position] = $separator;
    }
});

0

यह निर्धारित करना थोड़ा कठिन है कि आप क्या करने की कोशिश कर रहे हैं, लेकिन मुझे लगता है कि आप WordPress व्यवस्थापक मेनू में एक शीर्ष-स्तरीय प्रविष्टि जोड़ना चाहते हैं।

इस कोड को वर्डप्रेस कोडेक्स में देखें ।

संक्षेप में, आप add_menu_page()फ़ंक्शन के उपयोग की तलाश कर रहे हैं , जो कई तरह के तर्क लेता है और प्रशासनिक मेनू में "डैशबोर्ड", "पोस्ट", "मीडिया", आदि के भाई के रूप में एक अतिरिक्त आइटम प्रदर्शित करता है।

आशा है कि मैं सही हो गया। :-)


मैं सिर्फ एक व्यवस्थापक मेनू seprator जोड़ने की कोशिश कर रहा हूँ। प्रश्न पोस्ट करने से पहले मैंने उपयोग करने का प्रयास किया add_menu_page()
user1147

ऐसा लगता है जैसे माइकस्किंकेल आपको बहुत अच्छी तरह से कवर किया गया। गलतफहमी के बारे में क्षमा करें। सौभाग्य!
dgw

0

नीचे Wordpress के लिए एक कार्रवाई है जो व्यवस्थापक मेनू प्रदान किए जाने पर चलाया जाता है। व्यवस्थापक मेनू एक सरणी है और आप जो भी कर रहे हैं, यहां एक सरणी तत्व जोड़ रहे हैं जो एक विभाजक को परिभाषित करता है, आपके द्वारा निर्दिष्ट स्थिति में।

से यहाँ :

add_action( 'admin_menu', 'set_admin_menu_separator' );
function set_admin_menu_separator() {
$position = 79;
global $menu;
$menu[$position] = array(
0   =>  '',
1   =>  'read',
2   =>  'separator' . $position,
3   =>  '',
4   =>  'wp-menu-separator'
);
}

ध्यान दें कि, हालांकि यह वर्तमान में स्वीकार किए गए उत्तर जैसा दिखता है, वर्तमान में स्वीकृत उत्तर मेरे लिए काम नहीं करता था (और, टिप्पणियों को देखते हुए, कई अन्य लोगों के लिए)।


मौजूदा, स्वीकृत जवाब में कोई अंतर नहीं है, सिवाय इसके कि आप कोई स्पष्टीकरण न दें। कृपया जवाब देने के लिए पढ़ें ।
FUXIA

@toscho: खैर, यह मेरे लिए काम करता है और स्वीकृत उत्तर नहीं देता है।
मस्ताबा
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.