अपने सक्रिय होने पर हाइलाइट करने के लिए कस्टम व्यवस्थापक सबमेनू आइटम प्राप्त करना


9

मेरे पास एक कस्टम पोस्ट प्रकार है, नौकरियां, व्यवस्थापक मेनू में इसके तहत 3 वर्गीकरण हैं।

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

add_submenu_page(
    'edit.php?post_type=jobs',
    'Active Jobs',
    'Active Jobs',
    'manage_options',
    'edit.php?post_type=jobs&jobstatus=67'
);

यह पूरी तरह से काम करता है, सिवाय इसके कि एक्टिव जॉब्स मेनू विकल्प सक्रिय होने पर जॉब्स मेनू आइटम हाइलाइट रहता है। स्क्रीन शॉट देखें

सबमेनू प्रदर्शन का उदाहरण

मैं इस लेख में वर्तमान वर्ग को व्यवस्थापक मेनू पर add_submenu_page () का उपयोग करके पहले पैरामीटर के रूप में मूल स्लग को शामिल नहीं करने के लिए पढ़ता हूं । मैं कैसे सबमेनू सही एनएवी अनुभाग में प्रदर्शित करना है जब मैं फ़ाइल नाम स्लग को दूर पाने के लिए पता नहीं है।

इस बिंदु पर मैं एक कॉलबैक फ़ंक्शन का उपयोग नहीं कर रहा हूँ, मैं बस, डिफ़ॉल्ट नौकरियां सबमेनू विकल्प के रूप में उसी यूआरएल को क्रियान्वित कर रहा हूँ क्वेरी पैरामीटर वाला, सिवाय इसके कि फिल्टर पदों का प्रदर्शन किया। यदि कॉलबैक फ़ंक्शन में इसे स्थानांतरित करने से समस्या हल हो जाएगी, तो मैं ऐसा कर सकता हूं। लेकिन मुझे नहीं पता कि कॉलबैक फ़ंक्शन में क्या जाना चाहिए। मैं मानक कस्टम पोस्ट प्रकार संपादित पृष्ठ प्रदर्शित करना चाहता हूं, बस एक टैक्सोनॉमी फिल्टर के साथ। सहायता के लिए धन्यवाद


के बाद से यह करने के लिए काफी मुश्किल लगता है मैं, पता है कि समाधान इस के लिए आते हैं रुचि होगी। 'वर्डप्रेस' का तरीका एक ड्रॉप-डाउन फ़िल्टर मेनू जोड़ना होगा जैसा कि आपके स्क्रीनशॉट में दिखाया गया है।
स्टीफन हैरिस

आप यूआरएल में एक गलती है 'edit.php?&post_type=jobs&jobstatus=67' ... कि पहले &वहाँ नहीं होना चाहिए,?
मार्क डंकन

मार्क - आप सही हैं, और मैंने इसे पोस्ट में ऊपर और लाइव साइट पर कोड में बदल दिया है। हालाँकि यह समस्या को हल नहीं करता है। उसे इंगित करने के लिए धन्यवाद।
stvwlf

जवाबों:


5

मैंने पोस्ट मेनू और ड्राफ्ट स्थिति का उपयोग करके यह काम किया है। यह सूची आइटम वर्गों को संशोधित करने के लिए jQuery पर निर्भर करता है। अपने पोस्ट प्रकार और URL के साथ काम करने के लिए अनुकूल करें।

यह परिणाम है:
अतिरिक्त ड्राफ्ट सबमेनू आइटम

add_action( 'admin_menu', 'wpse_44270_menu_admin' );
add_action( 'admin_head-edit.php', 'wpse_44270_highlight_menu_item' );

function wpse_44270_menu_admin() 
{
    add_submenu_page(
        'edit.php',
        'Drafts', 
        '<span id="my-draft-posts">Drafts</span>', 
        'edit_pages', 
        'edit.php?post_status=draft&post_type=post'
    );
}

function wpse_44270_highlight_menu_item()
{
    global $current_screen;

    // Not our post type, exit earlier
    if( 'post' != $current_screen->post_type )
        return;

    if( isset( $_GET['post_status'] ) && 'draft' == $_GET['post_status'] )
    {       
        ?>
        <script type="text/javascript">
            jQuery(document).ready( function($) 
            {
                var reference = $('#my-draft-posts').parent().parent();

                // add highlighting to our custom submenu
                reference.addClass('current');

                //remove higlighting from the default menu
                reference.parent().find('li:first').removeClass('current');             
            });     
        </script>
        <?php
    }
}

5

यहाँ एक समाधान है जो मैं अभी आया हूँ जिसमें jQuery का उपयोग नहीं किया गया है:

एक फिल्टर parent_fileहै wp-admin/menu-header.phpजिसमें मेनू को आउटपुट करने से ठीक पहले चलता है। इनलाइन टिप्पणी कहती है:

प्लगइन के सापेक्ष सबमेनू टैब को स्थानांतरित करने के लिए।

यह वैश्विक चर पर एक फ़िल्टर है $parent_fileऔर मुझे यकीन नहीं है कि यह क्या करता है लेकिन हम इस फ़िल्टर का उपयोग वैश्विक चर को बदलने के लिए करेंगे $submenu_file, जो कि हाइलाइट किए गए सबमेनू को सेट करता है। तो यह आपके मामले में समाधान होगा:

add_filter('parent_file', 'wpse44270_parent_file');

function wpse44270_parent_file($parent_file){
    global $submenu_file;
    if (isset($_GET['jobstatus']) && $_GET['jobstatus'] == 67) $submenu_file = 'edit.php?post_type=jobs&jobstatus=67';

    return $parent_file;
}

आप इसे किसी भी url स्वरूपण के साथ अनुकूलित कर सकते हैं। उदाहरण के लिए मैं admin.php?page=my_plugin_slug&action=myactionअपने प्लगइन्स उप मेनू के लिए प्रारूप का उपयोग करता हूं इसलिए मैंने अपने उप मेनू को उजागर करने के लिए इसका उपयोग किया:

add_filter('parent_file', 'wpse44270_1_parent_file');

function wpse44270_1_parent_file($parent_file){
    global $submenu_file;
    if (isset($_GET['page']) && isset($_GET['action'])) $submenu_file = $_GET['page'] . '&action=' . $_GET['action'];

    return $parent_file;
}

पुनश्च: मैंने भी admin_menuसेट करने के लिए कार्रवाई की कोशिश की $submenu_file, और यह मेरे मामले में काम किया (कस्टम प्लगइन पेज / स्लग) लेकिन edit.phpउप मेनू (आपके मामले) के लिए नहीं। इसलिए मैंने बाद में चलने वाली एक और कार्रवाई / फ़िल्टर की खोज की और वह फ़िल्टर था parent_file


0

मुझे पता चला कि आपको अपने लिंक के लिए html संस्थाओं का उपयोग करने की भी आवश्यकता है। जब से तुम्हारे पास है

add_submenu_page(
    'edit.php?post_type=jobs',
    'Active Jobs',
    'Active Jobs',
    'manage_options',
    'edit.php?post_type=jobs&jobstatus=67'
);

आप अपने HTML निकाय के लिए एम्परसेंड को आज़मा सकते हैं और बदल सकते हैं

&amp;

तो आपके पास होगा

add_submenu_page(
    'edit.php?post_type=jobs',
    'Active Jobs',
    'Active Jobs',
    'manage_options',
    'edit.php?post_type=jobs&amp;jobstatus=67'
);

यह मेरे लिए काम करता है ... मैंने सबमेनू और माता-पिता के मेनू के लिए आउटपुट स्ट्रिंग का परीक्षण किया और जांच की कि क्या वे मेल खाते हैं। इस सामान की जाँच के लिए यह एक छोटा सा उपयोगिता कार्य हो सकता है

add_filter( 'parent_file', 'test_taxonomy_highlight' );
function test_taxonomy_highlight( $parent_file ){
   global $submenu_file;
   echo '<pre>', var_dump( $submenu_file, htmlentities( $submenu_file ) ), '</pre>';
   echo '<pre>', var_dump( $parent_file, htmlentities( $parent_file ) ), '</pre>';
   return $parent_file;
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.