Как добавить собственное имя класса HTML в элементы подменю экрана администратора?
Вот эти подменю в меню Сообщения
![введите описание изображения здесь]()
Я проверил код и выяснил, что его разметка - это
<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>
Ответы
Ответ 1
Вы можете сделать str_replace в html, который произойдет до загрузки страницы:
Просто нужно выработать селектора или затем проанализировать его с помощью 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');
Ответ 2
Это должно сделать это:
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');
![введите описание изображения здесь]()
Ответ 3
Мы можем сделать это с помощью простого плагина, подобного этому:
<?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 для подменю должны быть напрямую настраиваемы с помощью фильтра, вы можете создать траковый билет, подробно объясните, почему это необходимо и, например, предложите новый фильтр add_submenu_classes
.
Надеюсь, это поможет!
Ответ 4
Я исследовал это. Вы не можете добавлять css-классы в пункты меню администратора, если вы не взломаете основные файлы.
Чтобы добавить новый элемент подменю, вы можете использовать delete_submenu_page(), а затем add_submenu_page(), но он не позволяет указать для него класс css.
Ответ 5
Пожалуйста, попробуйте следующее:
Это сработало для меня.
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";
}
}
}
Ответ 6
Если вы не хотите менять основной файл, вы можете создать новый файл CSS, переопределить CSS и вставить его в состояние if(is_admin())
в function.php