व्यवस्थापक मेनू में एक महत्वाकांक्षी लिंक जोड़ना?


20

क्या वर्डप्रेस व्यवस्थापक मेनू में एक अनियंत्रित हाइपरलिंक जोड़ने का एक तरीका है (मेरा मतलब है कि जब आप व्यवस्थापक डैशबोर्ड में लॉग इन करते हैं तो बाईं ओर स्थित मेनू)? उदाहरण के लिए, क्या कोई Google में लिंक जोड़ सकता है?

मेरे विशेष मामले में, मैं एक वर्डप्रेस विषय के लिए एक स्टाइलगाइड पेज जोड़ना चाहूंगा, जिस पर मैं काम कर रहा हूं इसलिए मैं उपयोगकर्ता को दिखा सकता हूं कि विभिन्न HTML तत्वों को थीम के साथ कैसे स्टाइल किया जाता है और विभिन्न चीजों को अच्छी तरह से कैसे स्टाइल करना है।

यह वह कोड है जो मेरे पास अब तक है ( ध्यान दें: यह अधूरा है ): functions.php में मैंने Appearance सेक्शन में एक नया मेनू आइटम जोड़ा है :

add_action('admin_menu', 'create_theme_style_page');

function create_theme_style_page() {
  add_theme_page('Theme Styleguide', 'Theme Styleguide', 'administrator', basename(__FILE__),'build_styleguide_page');
}

function build_styleguide_page() {
 echo "Not sure what goes here to redirect admin to a arbitrary url?";
}

में build_styleguide_page(), header()एक त्रुटि के साथ पुनर्निर्देशित करने का प्रयास ( हेडर जानकारी को संशोधित नहीं कर सकता )।

जवाबों:


13

हाय @Tom ,

यदि मैं आपके प्रश्न को सही ढंग से समझता हूं तो आपको यह जानने की आवश्यकता नहीं है कि मेनू में लिंक कैसे जोड़ा जाए (ऐसा लगता है कि आप पहले से ही जानते हैं) लेकिन इसके बजाय आपको यह जानने की आवश्यकता है कि अपने लिंक को सही ढंग से कैसे पुनर्निर्देशित करें?

एक व्यवस्थापक मेनू आइटम से एक बाहरी URL पर पुनर्निर्देशित करना

यदि ऐसा करने के लिए आपको मेनू आइटम फ़ंक्शन का उपयोग नहीं करना है, लेकिन इसके बजाय "हुक" वर्डप्रेस पर्याप्त है, तो यह संभवतः HTTP हेडर को छोड़कर कुछ भी आउटपुट नहीं करता है। कॉल करते समय सबसे पहला हुक /wp-admin/themes.phpदिखाई देता है after_setup_themeऔर यह अच्छी तरह से काम करता है।

एक "मेनू स्लग" का उपयोग करें ताकि आप हुक में इसके लिए परीक्षण कर सकें

लेकिन इसे काम पर लाने के लिए हमें सबसे पहले अपने कॉल को हुक / अपने फ़ंक्शन add_theme_pageमें संशोधित करना होगा। हमने पाँचवाँ पैरामीटर (फ़ंक्शन को एडमिन विकल्प को लागू करने के लिए कॉल करने के लिए) गिरा दिया क्योंकि हमें इसकी आवश्यकता नहीं है, और चौथे पैरामीटर ( "मेनू स्लग" ) को बदल दिया है ।admin_menucreate_theme_style_page()themes.php?goto=build-styleguide-page

यद्यपि हम चौथे पैरामीटर के लिए लगभग शाब्दिक रूप से कुछ भी चुन सकते थे, बशर्ते हम एक ही पृष्ठ ( themes.php) के लिए अन्य उपस्थिति विकल्पों के रूप में रूट किए गए रीडायरेक्ट करने जा रहे हों । मैं भी बस मनमाने ढंग से नाम के साथ आया था gotoक्योंकि वर्डप्रेस इसका उपयोग नहीं करता है और इसके लिए यह समझ में आता है।

add_action('admin_menu', 'create_theme_style_page');
function create_theme_style_page() {
  add_theme_page(
    'Theme Styleguide',
    'Theme Styleguide',
    'administrator',
    'themes.php?goto=build-styleguide-page'
  );
}

BTW, हमें आपके build_styleguide_page()फ़ंक्शन से छुटकारा मिल गया क्योंकि हमें इसके समाधान की आवश्यकता नहीं है।

इसके लिए शुरुआती हुक में पुनर्निर्देशित करें themes.php:after_setup_theme

कोड के हमारे अंतिम बिट के रूप में हम अपने after_setup_themeहुक को अपने redirect_from_admin_menu()फ़ंक्शन में लागू करते हैं। हमारे पास यह देखने के लिए परीक्षण है कि क्या वर्तमान पृष्ठ है themes.phpऔर यह सुनिश्चित करने के लिए कि URL पर एक URL पैरामीटर gotoपारित किया गया था। तब यह देखने के लिए / कथन का gotoउपयोग करने के मूल्य का परीक्षण करता है कि क्या इसका मूल्य है ; यदि ऐसा है तो यह आपके बताए गए काल्पनिक उदाहरणों जैसे Google पर अनुप्रेषित करता है अन्यथा हम केवल व्यवस्थापक डैशबोर्ड पर वापस भेज देते हैं:switchcase'build-styleguide-page'

add_action('after_setup_theme', 'redirect_from_admin_menu');
function redirect_from_admin_menu($value) {
  global $pagenow;
  if ($pagenow=='themes.php' && !empty($_GET['goto'])) {
    switch ($_GET['goto']) {
      case 'build-styleguide-page':
        wp_redirect("http://www.google.com");
        break;
      default:
        wp_safe_redirect('/wp-admin/');
        break;
    }
    exit;
  }
}

टिप्पणियाँ:

  1. मैंने हुक / फ़ंक्शन में switch/ caseस्टेटमेंट का उपयोग करने का चयन किया ताकि जरूरत पड़ने पर अतिरिक्त रीडायरेक्ट को जोड़ना आसान हो; अभी और केस स्टेटमेंट जोड़ें।after_setup_themeredirect_from_admin_menu()goto

  2. wp_redirect()और wp_safe_redirect()कार्यों वास्तव में समाप्त नहीं है, वर्डप्रेस को रोकने के लिए और अपने रीडायरेक्ट को ओवरराइड नहीं करने के लिए आपको एक निकास कथन जारी करने की आवश्यकता है।

उम्मीद है की यह मदद करेगा!


22

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

add_action( 'admin_menu' , 'admin_menu_new_items' );
function admin_menu_new_items() {
    global $submenu;
    $submenu['index.php'][500] = array( 'Menu item name', 'manage_options' , 'http://example.com' ); 
}  

index.phpमूल मेनू की कुंजी / लिंक का प्रतिनिधित्व करता है, इसलिए उदाहरण में मैं मूल रूप से डैशबोर्ड मेनू में एक आइटम जोड़ रहा हूं ..

यकीन है, यह add_{type}_pageफ़ंक्शन का उपयोग करने के रूप में बहुत सुंदर नहीं है , लेकिन यह काम करता है-इस तथ्य के आसपास कि वर्डप्रेस ऑफ-साइट URL को व्यवस्थापक मेनू मेनू में रोकता है।

मैं अपने विभिन्न वर्चुअल होस्ट्स को मेनू में जोड़ने के लिए कुछ इसी तरह का उपयोग करता हूं, इसलिए मैं व्यवस्थापक मेनू से सीधे अन्य इंस्टॉलेशन पर जा सकता हूं (सभी एक स्क्रिप्ट के साथ किया जाता है, लेकिन मूल रूप से उपरोक्त कोड के एक महिमा संस्करण का उपयोग करता है)।

नोट: यदि आप कोड का उपयोग करने का निर्णय लेते हैं, तो बस इस बात का ध्यान रखें कि उस कुंजी का उपयोग न करें (उदाहरण कोड में 500 सरणी कुंजी)।

TIP: आप वास्तव में मेनू कुंजियों में नकारात्मक मानों का उपयोग कर सकते हैं, ताकि आप किसी भी मूल WordPress आइटम से पहले मेनू आइटम को बैठने के लिए मजबूर कर सकें।


नोट: मुझे लगता है कि आपको उस नकारात्मक कुंजी को एक स्ट्रिंग के रूप में सेट करना होगा, हालांकि। '-5'और नहीं -5, अन्यथा कुंजी को अमान्य माना जाता है (मुझे लगता है) .. (नकारात्मक तार काम करता है, अगर मैं गलत नहीं हूं) ..
t31os

धन्यवाद, बेकार है कि आप इसे वास्तविक कार्यों के साथ नहीं कर सकते, लेकिन यह एक हुक / रीडायरेक्ट कॉम्बो को जोड़ने के लिए सिर्फ एक लिंक होने से बेहतर है।
एल योबो

2
इस विशेष जवाब ने मुझे मेरे प्लगइन पोस्ट स्टेटस मेनू आइटम के साथ मदद की (आप शायद अनुमान लगा सकते हैं कि यह क्या करता है)। वैसे भी, क्योंकि मुझे नहीं पता था कि अन्य प्लगइन्स क्या मेनू में सामान जोड़ रहे होंगे, मैंने सोचा कि मैं सिर्फ इतना जोड़ूंगा कि मैं array_push()किसी अन्य प्लगइन्स से टकराने से बचने के लिए मेनू आइटम को जोड़ता था ।
mrwweb

इस तरह के एक छोटे स्निपेट का उपयोग करने के लिए एक आकर्षण, प्लस बोनस बिंदु की तरह काम करता है।
जोओ

2
+1। एक कुंजी और उम्मीद चुनने के बजाय, बस आखिरी कुंजी और वेतन वृद्धि को पकड़ो। उदाहरण के लिए, टूल मेनू में सबमेनू आइटम जोड़ने पर: global $submenu; $key = end(array_keys($submenu['tools.php'])) + 1; $submenu['tools.php'][$key++] = आदि
वेबवेयर

3

मैंने इसके साथ ही हासिल किया है:

function add_custom_menu_item(){
    add_menu_page( 'Menu Item Title', 'Page Title', 'manage_options', 'page_slug', 'function', 'dashicons-icon', 1 );
}
add_action( 'admin_menu', 'add_custom_menu_item' );

function custom_menu_item_redirect() {

    $menu_redirect = isset($_GET['page']) ? $_GET['page'] : false;

    if($menu_redirect == 'page_slug' ) {
        wp_safe_redirect( home_url('/my-page') );
        exit();
    }

}
add_action( 'admin_init', 'custom_menu_item_redirect', 1 );

आप यहां क्या करते हैं आप मेनू आइटम जोड़ते हैं और स्लग को परिभाषित करते हैं, फिर 'admin_init' पर आप जांचते हैं कि क्या स्लग मौजूद है और अपने इच्छित स्थान पर रीडायरेक्ट करता है।

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