Etkin olduğunda vurgulanacak özel yönetici alt menü öğesini alma


9

Yönetici menüsünde altında 3 sınıflandırma ile özel bir yazı türü, İşler var.

Sınıflandırmalardan biri, Etkin veya Kapalı durumudur. Aktif İşler için İşler altında bir menü öğesi istiyorum. Bu kodla oluşturdum

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

Etkin İşler menü seçeneği etkinken İşler menü öğesinin vurgulanmış kalması dışında, bu mükemmel bir şekilde çalışır. Ekran görüntüsüne bakın

alt menü ekranı örneği

Bu makalede , üst parametre ilk parametre olarak eklemek için add_submenu_page () kullanarak yönetici menüsünde Current sınıfı okudum . Dosya adı bilgisini kaldırdığımda alt menünün doğru gezinme bölümünde görünmesini nasıl sağlayacağımı bilmiyorum.

Bu noktada bir geri arama işlevi kullanmıyorum, görüntülenen yayınları filtreleyen sorgu parametreleri dışında, varsayılan URL alt menü seçeneğiyle aynı URL'yi yürütüyorum. Bunu bir geri arama işlevine taşımak sorunu çözecekse, bunu yapabilirim. Ancak geri arama işlevinde ne yapılması gerektiğini bilmiyorum. Ben sadece bir sınıflandırma filtresi yerinde, standart özel yazı türü düzenleme sayfasını görüntülemek istiyorum. yardım için teşekkürler


Bunun için hangi çözümlerin ortaya çıktığını bilmek isterim, çünkü yapılması oldukça zor görünüyor. 'WordPress' yolu, ekran görüntünüzde gösterildiği gibi bir açılır filtre menüsü eklemek olacaktır.
Stephen Harris

URL'de bir hata var 'edit.php?&post_type=jobs&jobstatus=67' ... ilk &önce orada olmamalı, ardından ?..
Mark Duncan

Mark - haklısın ve ben yukarıdaki yazı ve canlı sitede kod değiştirdim. Ancak bu sorunu çözmez. Bunu işaret ettiğiniz için teşekkür ederim.
stvwlf

Yanıtlar:


5

Bu işi Yayınlar menülerini ve Taslak durumunu kullanarak yaptım. Liste öğesi sınıflarını değiştirmek için jQuery kullanır. Gönderi türünüz ve URL'lerinizle çalışmak için uyarlayın.

Sonuç budur:
fazladan taslaklar alt menü öğesi

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

İşte ben jQuery kullanmayan yeni bir çözüm:

Bir filtre vardır parent_fileiçinde wp-admin/menu-header.phpmenüyü çıktısını almadan sağ çalıştığı. Satır içi yorum şöyle diyor:

Eklentiler için alt menü sekmelerini hareket ettirin.

Sadece küresel değişken üzerinde bir filtre $parent_fileve ne olduğundan emin değilim ama $submenu_filevurgulanan alt menüyü ayarlamak yerine, küresel değişkeni değiştirmek için bu filtreyi kullanacağız . Bu sizin durumunuzdaki çözüm olacaktır:

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

Bunu herhangi bir URL biçimlendirmesiyle uyarlayabilirsiniz. Örneğin, admin.php?page=my_plugin_slug&action=myactioneklentilerimin alt menüleri için biçimi kullanıyorum, bu yüzden alt menülerimi vurgulamak için bunu kullandım:

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

PS: Ben de admin_menuayarlamak için eylem denedim $submenu_file, ve benim durumumda (özel eklenti sayfa / slug) çalıştı ama edit.phpalt menüler (sizin durum) için değil. Daha sonra çalışan başka bir eylem / filtre aradım ve filtre oldu parent_file.


0

Ayrıca bağlantı için html varlıkları kullanmanız gerektiğini öğrendim. sahip olduğun için

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

ve işaretini html varlık eşdeğeri olarak değiştirmeyi deneyebilirsiniz

&amp;

yani sahip olursun

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

Bu benim için çalıştı ... ben de alt menü ve üst menü için çıkış dizesini test ve eşleşip eşleşmediğini kontrol etti. bu şeyleri kontrol etmek için küçük bir yardımcı program işlevi olabilir

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;
}
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.