Obtendo o item de submenu admin customizado para destacar quando seu ativo

9

Eu tenho um tipo de postagem personalizada, Jobs, com três taxonomias no menu Admin.

Uma das taxonomias é Status, que é Ativo ou Fechado. Eu quero um item de menu em trabalhos para trabalhos ativos. Eu criei com este código

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

Isso funciona perfeitamente, exceto que o item de menu Trabalhos permanece destacado quando a opção de menu Tarefas ativas está ativa. Veja a captura de tela

Eulinesteartigo A classe atual no menu admin usando add_submenu_page () para não incluir o slug pai como o primeiro parâmetro. Não sei como fazer com que o submenu apareça na seção de navegação correta quando removo o slug de nome de arquivo.

Neste ponto, não estou usando uma função de retorno de chamada, estou simplesmente executando a mesma URL que a opção de submenu Trabalhos padrão, exceto com parâmetros de consulta que filtram as postagens exibidas. Se mover isso para uma função de retorno de chamada resolverá o problema, posso fazer isso. Mas eu não sei o que deve ir na função de retorno de chamada. Quero exibir a página de edição de tipo de postagem personalizada padrão, apenas com um filtro de taxonomia em vigor. obrigado pela ajuda

    
por stvwlf 02.03.2012 / 23:07

3 respostas

5

Eu fiz esse trabalho usando os menus "Postagens" e o status "Rascunho". Ele depende do jQuery para modificar as classes do item de lista. Adapte-se para trabalhar com seu tipo de postagem e URLs.

Este é o resultado:

add_action('admin_menu','wpse_44270_menu_admin');add_action('admin_head-edit.php','wpse_44270_highlight_menu_item');functionwpse_44270_menu_admin(){add_submenu_page('edit.php','Drafts','<spanid="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
    }
}
    
por brasofilo 08.12.2012 / 22:24
3

Aqui está uma solução que acabei de criar e que não usa o jQuery:

Existe um filtro parent_file em wp-admin/menu-header.php que é executado imediatamente antes da saída do menu. O comentário inline diz:

  

Para plugins para mover as guias do submenu.

É apenas um filtro na variável global $parent_file e não tenho certeza do que ele faz, mas usaremos esse filtro para alterar a variável global $submenu_file , que configura o submenu realçado. Então, esta será a solução no seu caso:

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

Você pode adaptar isso com qualquer formatação de URL. Por exemplo, eu uso o formato admin.php?page=my_plugin_slug&action=myaction para os submenus dos meus plugins, então usei isso para destacar meus submenus:

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: Eu também tentei a ação admin_menu para definir $submenu_file , e funcionou no meu caso (página do plugin personalizado / slug) mas não para edit.php submenus (seu caso). Então eu procurei por outra ação / filtro que corre mais tarde e foi o filtro parent_file .

    
por Parham 30.01.2014 / 20:58
0

Eu descobri que você também precisa usar entidades html para o seu link. desde que você tenha

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

você pode tentar alterar o "e" comercial para seu equivalente de entidade html

&amp;

então você teria

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

isso funcionou para mim ... eu também testei a string de saída para submenu e menu pai e verifiquei se eles combinam. isso pode ser uma pequena função de utilidade para verificar essas coisas

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;
}
    
por Mujnoi Gyula Tamas 03.04.2015 / 12:34