সক্রিয় থাকাকালীন কাস্টম অ্যাডমিন সাবমেনু আইটেমটি হাইলাইট করা


9

অ্যাডমিন মেনুতে এটির অধীনে 3 ট্যাক্সনোমির সাথে আমার একটি কাস্টম পোস্টের ধরণ রয়েছে Jobs

কর বিভাগগুলির মধ্যে একটি হ'ল স্থিতি, যা হয় সক্রিয় বা বন্ধ। আমি জবস ফর অ্যাক্টিভ জবসের অধীনে একটি মেনু আইটেম চাই। আমি এই কোড দিয়ে এটি তৈরি

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 এর উপর নির্ভর করে। আপনার পোস্টের ধরণ এবং ইউআরএলগুলির সাথে কাজ করতে মানিয়ে নিন।

এটি ফলাফল:
অতিরিক্ত খসড়া সাবমেনু আইটেম

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;
}

আপনি যে কোনও ইউআরএল ফর্ম্যাটিংয়ের সাথে এটি মানিয়ে নিতে পারেন। উদাহরণস্বরূপ আমি 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

আমি জানতে পেরেছিলাম যে আপনার লিঙ্কের জন্য আপনাকে এইচটিএমএল সত্তাও ব্যবহার করতে হবে। যেহেতু আপনার আছে

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

আপনি চেষ্টা করতে পারেন এবং তার এইচটিএমএল সত্তা সমতুল্য এম্পারস্যান্ডটি পরিবর্তন করতে পারেন

&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;
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.