Я хотел бы добавить разделитель к администраторскому разделу подменю, НЕ в высокоуровневом разделе.
Я думаю об использовании JavaScript и моделировании, чтобы сделать задание, но я задавался вопросом, существует ли более простой метод такой как, которые при добавлении разделителя к меню верхнего уровня разделяют.
Я все еще экспериментирую на этом. Я предоставлю свой метод, после того как я получаю его работа.
[ОБНОВЛЕННЫЙ]
После осмотра через него и расширения базового API для разрешения разделителей главного меню в пользовательских положениях я сделал быстрое, пробегает базовые файлы меню, вывел ад из, все - то, что там и нашел решение, которое позволяет использовать базовый API также для пользовательских разделителей подменю.
Это - то, как наше меню будет похоже, после того, как мы добавили разделители.
Чтобы заставить это произойти, просто добавьте маленький плагин или бросьте этот отрывок в свой файл плагинов или functions.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.
Подпишитесь/соедините эту Суть GitHub звездой. Я отправлю обновления только там.
<?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;
}
Разделители, если этот вопрос предназначается для этого, являются делителями меню администратора, которые разделяют меню на разделы. На значение по умолчанию это разделено на "публикование" и область "администрирования".
Вот то, что мы собираемся иметь впоследствии: пользовательский разделитель.
Я записал довольно простой плагин, который я выполняю как 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-plugins
или plugins
папка и Вы готовы пойти. Плагин автоматически обнаружит, что Вы хотите добавить разделитель и преобразовать добавленный пункт меню одному.
<?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;
}
Примечание: мог бы быть более соответствующий способ сделать это, однако я просто показываю Вам, как другой плагин приближается к этой проблеме.
Рассматриваемый плагин является s2Member
Как они достигают, это путем добавления объекта страницы подменю к самому объекту родительского меню;
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
Решение для селектора CSS:
добавьте новый администраторский-styles.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' ); }
[ОБНОВЛЕННЫЙ]
Это - то, что я имел, придумал. Ниже образец того, как я сделал бы это на разделе меню сообщения:
(Благодаря @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);
Вот то, как это должно посмотреть:
div
в массиве, но вместо a div
используйте a span
и дайте его class="separator"
?
– Adam
02.02.2013, 08:55
a
тег от разделителя. Включая div
в массиве хорошая идея. Причина я использовал div
должен использовать встроенное моделирование WP для разделителя.
– Giraldi
02.02.2013, 10:05
a
отметьте, таким образом, разделитель не становится гиперссылкой (персональное предпочтение). Во-вторых, как я настолько 'недоступен', может спросить?
– Giraldi
10.02.2013, 05:32