手动突出显示Wordpress管理菜单项

时间:2010-02-22 03:05:23

标签: wordpress

在Wordpress管理页面的“页面”菜单下,我得到了这个布局:

  

  • 修改 (网址:edit-pages.php)
  • 添加新 (网址:page-new.php)
  • 特殊页面(网址:edit-pages.php?special-pages = true)

正如您所看到的,我添加了一个名为Special Pages的新子菜单项,它几乎是指向带有自定义过滤器的Edit页面的链接。因为Wordpress使用文件名来标识和突出显示子菜单项,所以每当我单击特殊页面时,都会选择编辑子菜单项。反正是否强迫Wordpress选择特殊页面菜单项?

干杯

7 个答案:

答案 0 :(得分:5)

为了进一步澄清Ken Vu的答案,请编辑全局变量$submenu_file$parent_file。例如,突出显示您的页面:

global $submenu_file;
$submenu_file = "edit-pages.php?special-pages=true";

如果您需要更改突出显示的顶级项目,请使用$parent_file。例如,突出显示“写作”设置页面:

global $parent_file;
global $submenu_file;
$parent_file = 'options-general.php';
$submenu_file = 'options-writing.php';

答案 1 :(得分:5)

更好的解决方案:

add_filter('parent_file', 'my_plugin_select_submenu');
function my_plugin_select_submenu($file) {
        global $plugin_page;
        if ('__my-current-submenu-slug__' == $plugin_page) {
            $plugin_page = '__my-submenu-slug-to-select__';
        }
        return $file;
}

答案 2 :(得分:3)

解决方案:使用$ submenu_file变量

  

$ submenu_file =“edit-pages.php?special-pages = true”

答案 3 :(得分:2)

感谢Ken Vu和Jonathan Brinley。使用您的答案,我终于突出显示了我的管理菜单,以便正常工作。当我努力工作时,我会在这里发布整个结果,所以其他人可以更容易地找到它:

我们的想法是调用parent_file过滤器(没有记录,因为很多Wordpress部件都是不幸的)。在我的例子中,我添加了一个自定义菜单,而不是创建自定义帖子类型时生成的默认菜单。

在我的自定义邮政编码中,我调用了add_meta_boxes操作。在这个钩子中,我发出了对parent_file过滤器的调用:

add_filter('parent_file',     array(&$this, 'highlight_admin_menu'));

_

这就是我的hightlight_admin_menu函数的样子:

function highlight_admin_menu($some_slug){

  global $parent_file;

  $parent_file = 'post.php?post=149&action=edit';

  return $parent_file;
}

_

这使我的菜单正确突出显示。尝试使用自己的代码来了解add_filter('parent_file', ...)代码的发布位置。查找仅在该特定页面加载时执行的一些代码,但很快就可以修改$parent_file变量。

我希望这有帮助!

答案 4 :(得分:1)

要更改子菜单项的突出显示的菜单项,正确的过滤器为submenu_file

add_filter('submenu_file', 'menuBold');

static function menuBold($submenu_file)
{
    if ( checkProperPage($_GET) ) {
        // The address of the link to be highlighted
        return 'post-new?post_type=foobar&foo=bar';
    }

    // Don't change anything
    return $submenu_file;
}

检查发生在第194行的WP ~/wp-admin/menu-header.php文件中(Wordpress 4.5.3):

if ( isset( $submenu_file ) ) {
    if ( $submenu_file == $sub_item[2] )
        $class[] = 'current';
...
}

答案 5 :(得分:0)

您可以修改此代码以使其适合您。您可以同时更改父菜单和子菜单。经过测试的代码。

git reset --hard HEAD

答案 6 :(得分:0)

使用 load-{$page_hook} 操作挂钩并修改必要的全局变量:

/**
 *  For giggles, lets make an admin page that is not "in the menu" to play with.
 */
add_action('admin_menu', 'mort1305_admin_menu');
function mort1305_admin_menu() {
    add_submenu_page(
        NULL,
        'Page Title',
        '',
        'administrator',
        'my_slug',
        'mort1305_page_content'
    );
}

/**
 *  The menu item to highlight and the submenu item to embolden.
 */
add_action('load-admin_page_my_slug', 'mort1305_on_page_load');
function mort1305_on_page_load(){
    global $plugin_file, $submenu_file, $title;
    $plugin_page = 'slug-of-menu-item-to-be-highlighted';
    $submenu_file = 'slug-of-submenu-item-to-be-bold';
    foreach($submenu[NULL] as $submenu_arr) {
        if($submenu_arr[2] === 'test_page_slug') {
            $title = $submenu_arr[3];
            break;
        }
    }
}

/**
 *  Page content to display.
 */
function mort_1305_page_content() {
    echo This is the '. get_admin_page_title() .' page.  The slug of my parent is '. get_admin_page_parent() .'.';
}