如何将自定义 HTML class 名称添加到管理屏幕子菜单项?
How to add a custom HTML class name to admin screen submenu items?
这是 帖子 菜单下的这些子菜单项
我检查了代码,发现它的标记是这样的
<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>
我想做的是在 <li>
标签上添加自定义 class my-custom-class
(在服务器端处理),这样它就会变成这样
<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 class 名称添加到管理屏幕子菜单项?
应该这样做:
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');
您可以在 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');
我们实际上可以使用像这样的简单插件来做到这一点:
<?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()
核心函数的这个 this part 来构造它:
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 class 被添加到 <li>
标签和 <a>
标签。
一般来说,我不喜欢修改全局变量,但似乎没有通过 add_submenu_page()
或其他显式过滤器将 class 添加到子菜单的解决方法。
如果要修改第一级项目(菜单)的 css classes,您可以例如查看 add_menu_classes
过滤器。
如果您强烈认为子菜单的 css class 应该可以通过过滤器直接调整,那么您可以 create a trac ticket,详细解释为什么需要这样做,以及例如建议新的 add_submenu_classes
过滤器。
希望对您有所帮助!
我研究过这个。除非破解核心文件,否则无法将 css-classes 添加到管理菜单项。
要添加新的子菜单项,您可以使用 delete_submenu_page() 然后 add_submenu_page() 但它不允许您为其指定 css class。
请试试这个:
这对我有用。
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";
}
}
}
这是 帖子 菜单下的这些子菜单项
我检查了代码,发现它的标记是这样的
<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>
我想做的是在 <li>
标签上添加自定义 class my-custom-class
(在服务器端处理),这样它就会变成这样
<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 class 名称添加到管理屏幕子菜单项?
应该这样做:
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');
您可以在 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');
我们实际上可以使用像这样的简单插件来做到这一点:
<?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()
核心函数的这个 this part 来构造它:
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 class 被添加到 <li>
标签和 <a>
标签。
一般来说,我不喜欢修改全局变量,但似乎没有通过 add_submenu_page()
或其他显式过滤器将 class 添加到子菜单的解决方法。
如果要修改第一级项目(菜单)的 css classes,您可以例如查看 add_menu_classes
过滤器。
如果您强烈认为子菜单的 css class 应该可以通过过滤器直接调整,那么您可以 create a trac ticket,详细解释为什么需要这样做,以及例如建议新的 add_submenu_classes
过滤器。
希望对您有所帮助!
我研究过这个。除非破解核心文件,否则无法将 css-classes 添加到管理菜单项。
要添加新的子菜单项,您可以使用 delete_submenu_page() 然后 add_submenu_page() 但它不允许您为其指定 css class。
请试试这个:
这对我有用。
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";
}
}
}