11

这是帖子菜单下的这些子菜单项

在此处输入图像描述

我检查了代码,发现它的标记是这样的

<ul class="wp-submenu wp-submenu-wrap">
  <li class="wp-submenu-head" aria-hidden="true">Posts</li>
  <li class="wp-first-item current"><a href="edit.php" class="wp-first-item current">All Posts</a></li>
  <li><a href="post-new.php">Add New</a></li>
  <li><a href="edit-tags.php?taxonomy=category">Categories</a></li>
  <li><a href="edit-tags.php?taxonomy=post_tag">Tags</a></li>
</ul>

我想要做的是my-custom-class<li>标签上添加一个自定义类(在服务器端处理),这样它就会变成这样

<ul class="wp-submenu wp-submenu-wrap">
  <li class="wp-submenu-head" aria-hidden="true">Posts</li>
  <li class="wp-first-item current my-custom-class"><a href="edit.php" class="wp-first-item current">All Posts</a></li>
  <li class="my-custom-class"><a href="post-new.php">Add New</a></li>
  <li class="my-custom-class"><a href="edit-tags.php?taxonomy=category">Categories</a></li>
  <li class="my-custom-class"><a href="edit-tags.php?taxonomy=post_tag">Tags</a></li>
</ul>

有没有办法将自定义 HTML 类名称添加到管理屏幕子菜单项?

4

5 回答 5

2

您可以在页面加载之前在 html 上执行 str_replace:

只需要计算出选择器或然后用DOMDocument解析它

function callback($buffer) {

    $buffer = str_replace('wp-first-item', 'wp-first-item my-custom-class', $buffer);

    return $buffer;
}

function buffer_start() { ob_start("callback"); }

function buffer_end() { ob_end_flush(); }

add_action('admin_head', 'buffer_start');
add_action('admin_footer', 'buffer_end');
于 2017-04-22T15:00:46.177 回答
2

实际上,我们可以使用这样一个简单的插件来做到这一点:

<?php
/** Plugin Name: Custom Admin Submenu CSS Class **/

add_action( 'admin_menu', function() use ( &$submenu )
{
    $class = 'my-class'; // Edit to your needs!

    if( ! isset( $submenu['edit.php'][5] ) )
        return;

    if( ! empty( $submenu['edit.php'][5][4] ) ) // Append if css class exists
        $submenu['edit.php'][5][4] .= ' ' . $class;
    else                                      
        $submenu['edit.php'][5][4] = $class;

} );

我们通过找出核心功能的这一部分来构建它:_wp_menu_output()

if ( ! empty( $sub_item[4] ) ) {
    $class[] = esc_attr( $sub_item[4] );
}

修改后的 HTML 如下所示:

<ul class='wp-submenu wp-submenu-wrap'>
    <li class='wp-submenu-head' aria-hidden='true'>Posts</li>
    <li class="wp-first-item current my-class">
        <a href='edit.php' class="wp-first-item current my-class">All Posts</a>
    </li>
    <li>
        <a href='post-new.php'>Add New</a>
    </li>
    <li>
        <a href='edit-tags.php?taxonomy=category'>Categories</a>
    </li>
    <li>
        <a href='edit-tags.php?taxonomy=post_tag'>Tags</a>
    </li>
</ul>

其中自定义 css 类被添加到<li>标签和<a>标签中。

一般来说,我不喜欢修改全局变量,但似乎没有通过add_submenu_page()或其他显式过滤器将类添加到子菜单的解决方法。

如果您想修改第一级项目(菜单)的 css 类,您可以查看add_menu_classes过滤器。

如果您强烈认为子菜单的 css 类应该可以通过过滤器直接调整,那么您可以创建一个 trac 票证,详细解释为什么需要这样做,例如建议一个新的add_submenu_classes过滤器。

我希望它有帮助!

于 2017-04-22T21:05:06.350 回答
1

这应该这样做:

function add_admin_class() {
    $find = '.wp-submenu li';
    $add_class = 'my-custom-class';

    echo '"<script type="text/javascript">
        jQuery(function() {
            jQuery("' . $find . '").addClass("' . $add_class . '");
        });
    </script>"';
}
add_action('admin_footer', 'add_admin_class');

在此处输入图像描述

于 2017-04-22T14:46:53.807 回答
1

我研究过这个。除非您破解核心文件,否则您无法将 css 类添加到管理菜单项。

要添加新的子菜单项,您可以使用delete_submenu_page()然后add_submenu_page()但它不允许您为其指定 css 类。

于 2017-04-22T23:29:30.027 回答
1

请试试这个:

这对我有用。

add_action('admin_init','add_custom_class_adminMenu');
function add_custom_class_adminMenu() 
{
    global $menu;
    foreach($menu as $key => $value)
    {
        if('Posts' == $value[0])
        {
            $menu[$key][4] .= " custom-class-1";
        }

        if('Pages' == $value[0])
        {
            $menu[$key][4] .= " custom-class-2";
        }            
    }
}
于 2017-04-25T08:57:57.547 回答