将分隔符添加到管理子菜单

时间:2013-02-01 作者:Giraldi

我想添加一个separatoradmin submenu 部分NOT in the top level section.

enter image description here

我正在考虑使用javascript和样式来完成这项工作,但我想知道在添加a separator to the top level menu section.

我还在试验这个。我会提供我的方法,一旦我得到它的工作。

[更新]

5 个回复
最合适的回答,由SO网友:kaiser 整理而成

管理菜单(&M)子菜单分隔符

在检查并扩展核心API以允许主菜单分隔符位于自定义位置后,我快速浏览了核心菜单文件,彻底清除了其中的所有内容,并找到了一个允许将核心API也用于自定义子菜单分隔符的解决方案。

结果是,在添加分隔符后,我们的菜单就是这样的。

Admin menu and sub menu separators

要做到这一点,只需添加一个小插件,或将此代码片段放入插件文件或函数中。php。下面是一个插件示例。如您所见,您必须在希望分隔符出现的位置添加父页面。然后您必须添加标识符wp-menu-separator. 您可以通过更改read-此菜单中任何其他项目的功能。这个11 才是最重要的。将其调整到您希望分隔符显示在菜单中的任何位置。

<?php
defined( \'ABSPATH\' ) OR exit;
/** Plugin Name: Example Admin Menu Separator */

add_action( \'admin_menu\', \'add_admin_menu_separator\' );
function add_admin_menu_separator()
{
    add_menu_page( \'\', \'\', \'read\', \'wp-menu-separator\', \'\', \'\', \'21\' );
    add_submenu_page( \'edit.php?post_type=page\', \'wp-menu-separator\', \'\', \'read\', \'11\', \'\' );
}
插件本身

同样,此插件可以用作插件、另一个插件的一部分或(最好)用作muplugin。

要跟踪任何更新,请订阅/启动this GitHub Gist. 我将只在那里发布更新。

<?php
defined( \'ABSPATH\' ) OR exit;
/**
 * Plugin Name: Admin Menu Separator
 * Description: Adds a separator on whatver priority is needed.
 */

add_filter( \'parent_file\', \'admin_menu_separator\' );
function admin_menu_separator( $parent_file )
{
    $menu = &$GLOBALS[\'menu\'];
    $submenu = &$GLOBALS[\'submenu\'];
    foreach( $submenu as $key => $item )
    {
        foreach ( $item as $index => $data )
        {
            // Check if we got the identifier
            if ( in_array( \'wp-menu-separator\', $data, true ) )
            {
                // Set the MarkUp, so it gets used instead of the menu title
                $data[0] = \'<div class="separator"></div>\';
                // Grab our index and temporarily save it, so we can safely overrid it
                $new_index = $data[2];
                // Set the parent file as new index, so core attaches the "current" class
                $data[2] = $GLOBALS[\'parent_file\'];
                // Reattach to the global with the new index
                $submenu[ $key ][ $new_index ] = $data;
                // Prevent duplicate
                unset( $submenu[ $key ][ $index ] );
                // Get back into the right order
                ksort( $submenu[ $key ] );
            }
        }
    }
    foreach( $menu as $key => $item )
    {
        if (
            in_array( \'wp-menu-separator\', $item )
            AND 5 < count( $item )
            )
        {
            $menu[ $key ][2] = \'separator0\';
            $menu[ $key ][4] = \'wp-menu-separator\';
            unset(
                 $menu[ $key ][5]
                ,$menu[ $key ][6]
            );
        }
    }
    return $parent_file;
}

SO网友:kaiser

添加管理菜单分隔符,如果此问题针对此分隔符,则分隔符是管理菜单的分隔符,用于将菜单分隔为多个部分。默认情况下,它分为“发布”和“管理”区域。

救援插件之后我们将拥有一个自定义分隔符。

enter image description here

我写了一个非常简单的插件,作为mu插件运行。正如您从示例中看到的,其用法非常简单,并且与内部API完全一致。

// @example
add_action( \'admin_menu\', \'add_admin_menu_separator\' );
function add_admin_menu_separator()
{
    add_menu_page( \'\', \'\', \'read\', \'wp-menu-separator\', \'\', \'\', \'10\' );
}
只需将此插件加载到mu-pluginsplugins 文件夹,您就可以开始了。插件将自动检测到您想要添加分隔符,并将添加的菜单项转换为分隔符。

<?php
defined( \'ABSPATH\' ) OR exit;
/**
 * Plugin Name: Admin Menu Separator
 * Description: Adds a separator on whatver priority is needed.
 */

add_filter( \'parent_file\', \'admin_menu_separator\' );
function admin_menu_separator( $parent_file )
{
    $menu = &$GLOBALS[\'menu\'];
    foreach( $menu as $key => $item )
    {
        if (
            in_array( \'wp-menu-separator\', $item )
            AND 5 < count( $item )
        )
        {
            $menu[ $key ][2] = \'separator0\';
            $menu[ $key ][4] = \'wp-menu-separator\';
            unset(
                 $menu[ $key ][5]
                ,$menu[ $key ][6]
            );
        }
    }
    return $parent_file;
}

SO网友:Adam

注意:可能有一种更合适的方法来解决这个问题,但我只是向您展示另一个插件如何解决这个问题。

所讨论的插件是s2Member

enter image description here

他们如何实现这一点是通过向父菜单项本身添加子菜单页项;

    add_submenu_page(
        $parent_slug,                //parent menu slug to attach to
        "",                          //page title (left blank)
                                     //menu title (inserted span with inline CSS)
       \'<span style="display:block;  
        margin:1px 0 1px -5px; 
        padding:0; 
        height:1px; 
        line-height:1px; 
        background:#CCCCCC;"></span>\',
        "create_users",              //capability (set to your requirement)
        "#"                          //slug (URL) shows Hash domain.com/# incase of mouse over
     );
您可以在s2Member 如果要在以下位置检查,请插入插件:plugins\\s2member\\includes\\classes\\menu-pages.inc.php 启动line 138

供参考add_menu_page 功能请参见:

http://codex.wordpress.org/Function_Reference/add_submenu_page

SO网友:Dankicity

CSS选择器解决方案:

添加新的管理样式。css文件到您的主题:

.wp-submenu a[href="post-new.php?post_type=city"],
.wp-submenu a[href="post-new.php?post_type=region"] {
  border-bottom:1px solid #ccc
}
.wp-submenu li:last-child a {
  border-bottom:none
}
并加载样式

wp_register_style( \'my_admin_styles\', trailingslashit( get_template_directory_uri() ) . \'admin-styles.css\');
add_action( \'admin_print_styles\', \'admin_styles\' );

function admin_styles() { wp_enqueue_style( \'my_admin_styles\' ); }

SO网友:Giraldi

[更新]

这就是我想到的。下面是我将如何在post menu 第节:

(感谢@userabuser的建议)

function add_submenu_separator( $menu_ord ) {
  global $submenu;

  // Create \'separator\' array for submenu
  $submenuSep = Array (\'<div class="separator"></div>\', \'read\', \'#\');

    // Note: Use \'div\' with class \'separator\' to use
    //       WP\'s built-in separator styling

  $offset = 2; // Position of separator

  // Insert separator into POST menu array
  $post = $submenu[\'edit.php\'];               
  $post = array_slice($post, 0, $offset, true) +
          array($submenuSep) +
          array_slice($post, $offset, NULL, true);
  $submenu[\'edit.php\'] = $post;

  return $menu_ord;
}
add_filter( \'custom_menu_order\', \'add_submenu_separator\' );
此部分不是必需的,但如果您希望摆脱a 分隔符上的标记,您可能必须使用javascript. 因此,添加以下内容:

// Add the script
function submenu_scripts() {
  wp_enqueue_script(\'submenu_script\', get_template_directory_uri().\'/js/submenu_scripts.js\', false, null);
}
add_action(\'admin_enqueue_scripts\', \'submenu_scripts\', 100);
以下是javascript 看起来像是我命名的submenu_scripts.js &;将其放置在名为js:

(function($){
    $(document).ready( function() {

        // Remove \'a\' tag on submenu separators
        $(\'a div[class="separator"]\').unwrap();

    });
})(jQuery);
下面是它的外观:

enter image description here

结束

相关推荐

Admin user can't update WP

我有一个运行WP 3.3.2的站点。后端显示一个栏,上面写着“WordPress 3.5可用!请通知网站管理员。”有趣的是,我是用一个管理员用户登录的,我仔细检查了一下。尝试访问更新页面(位于wp admin/update core.php)时,我遇到以下错误:“您没有足够的权限访问此页面。”关于这里可能发生的事情有什么线索吗?谢谢