Intereting Posts
Экран администратора WordPress очень медленный / тайм-аут при редактировании или добавлении новой страницы / пользовательского сообщения Практическое руководство. Избегайте кучи ненужных записей Auto Draft ID, связанных с таблицей сообщений, и отключите функцию автосохранения в post-new.php? плагин генерировал неожиданный вывод во время активации, но он пуст Wpdb-> last_query возвращает неверный запрос Странные попытки входа Применять другой класс для каждого элемента в foreach () URL, который ссылается конкретно на мобильную версию моего сайта? WPDB для учета почтовых сообщений Пользователь должен войти, чтобы просмотреть сообщение и продукт woocommerce Помогите понять тип сообщений и детей Интеграция с полным подключением кэш-памяти W3 В WooCommerce мне нужно изменить страницу thankyou.php Автоматическое изменение текстового футляра Рамка WordPress Media предварительно загружает изображения из идентификаторов Как найти и заменить (или добавить) конкретное слово в определенной категории?

Сортировка пунктов меню администратора

В связи с примечанием к « Изменение порядка разделов меню администратора? », Я ищу способ сортировать по алфавиту записи в каждом подразделе административной области WordPress.

В настоящее время, когда добавляется новый плагин, его запись будет отображаться в случайном месте в разделе «Настройки / Инструменты / Плагины», и часто бывает трудно найти новый пункт меню. (У меня уже много плагинов, поэтому мои меню довольно полные.)

Будучи тем, что я добавляю и удаляю плагины довольно регулярно, мне не нужно постоянно переходить на страницу настроек плагина для заказа меню и настраивать порядок.

Извините за длинный вопрос; Я просто хочу дать понять, что я ищу.

пример

Вместо:

     настройки
     - Генеральная
     - Письмо
     - Чтение
     - Обсуждение
     - (остаток основных элементов)
     - Плагин 4
     - WP что-то
     - Плагин, чтобы помочь с вещами
     - Плагин, связанный с Google
     - RSS-плагин
     - Плагин FeedBurner
     - и т.д.

Могу ли я настроить меню в алфавитном порядке (или по другому логическому методу), например:

     настройки
     - Плагин, чтобы помочь с вещами
     - Обсуждение
     - Плагин FeedBurner
     - Генеральная
     - Плагин, связанный с Google
     - Плагин 4
     - Чтение
     - (остаток основных элементов)
     - RSS-плагин
     - WP что-то
     - Письмо
     - и т.д.

Еще лучше будет метод сортировки, который сохраняет основные записи, где они по умолчанию, и только сортирует элементы, добавленные плагинами:

     настройки
     - Генеральная
     - Письмо
     - Чтение
     - Обсуждение
     - (остаток основных элементов)
     - Плагин, чтобы помочь с вещами
     - Плагин FeedBurner
     - Плагин, связанный с Google
     - Плагин 4
     - RSS-плагин
     - WP что-то
     - и т.д.

Это можно сделать для сортировки глобального $submenu .

Применяемая сортировка сбрасывает номер ключа $submenu['options-general.php'] sub $submenu['options-general.php'] , который:

 array 'options-general.php' => array 10 => array 0 => string 'General' 1 => string 'manage_options' 2 => string 'options-general.php' 15 => array 0 => string 'Writing' 1 => string 'manage_options' 2 => string 'options-writing.php' // etc 

и становится:

 array 'options-general.php' => array 0 => array 0 => string 'Discussion' 1 => string 'manage_options' 2 => string 'options-discussion.php' 1 => array 0 => string 'General' 1 => string 'manage_options' 2 => string 'options-general.php' // etc 

Здесь мы рассматриваем длину элементов по умолчанию, равную шести. До WordPress 3.5 было 7 элементов, теперь конфиденциальность исчезла и встроена в вкладку « Чтение ».

Проверяя локально, это не приводит к неожиданному результату и работает нормально. Возможно, если плагин зависел от $submenu['options-general.php'][15] чтобы позиционировать себя или что-то еще, могут возникнуть ошибки.

Сортировка применяется отдельно для элементов по умолчанию и для остальных. Просто отключите usort первого блока, и у вас есть желаемый результат.

 add_action( 'admin_menu', 'sort_settings_menu_wpse_2331', 999 ); function sort_settings_menu_wpse_2331() { global $submenu; // Sort default items $default = array_slice( $submenu['options-general.php'], 0, 6, true ); usort( $default, 'sort_arra_asc_so_1597736' ); // Sort rest of items $length = count( $submenu['options-general.php'] ); $extra = array_slice( $submenu['options-general.php'], 6, $length, true ); usort( $extra, 'sort_arra_asc_so_1597736' ); // Apply $submenu['options-general.php'] = array_merge( $default, $extra ); } //http://stackoverflow.com/a/1597788/1287812 function sort_arra_asc_so_1597736( $item1, $item2 ) { if ($item1[0] == $item2[0]) return 0; return ( $item1[0] > $item2[0] ) ? 1 : -1; } 

переупорядоченные пункты меню

Я искал одно и то же, и решил, что я буду копировать код, предоставленный Майком, ниже которого он утверждает, по-прежнему очень много в альфе, так как он был только тем, кто его использовал.

Я тестировал его и, похоже, хорошо работает для меня. Я уверен, что есть варианты использования, которые они еще не обрабатывают.

Возможно, Майк будет комментировать здесь и предоставить дополнительную помощь в том, как вы можете использовать свой класс для достижения своих целей.

Вы можете загрузить этот файл, чтобы его можно было скачать здесь: https://gist.github.com/792b7aa5b695d1092520

Ниже показано, как вы можете вызывать функции в файле functions.php вашей темы:

 <?php require_once('wp-admin-menu-classes.php'); add_action('admin_menu','my_admin_menu'); function my_admin_menu() { swap_admin_menu_sections('Pages','Posts'); // Swap location of Posts Section with Pages Section rename_admin_menu_section('Media','Photos & Video'); // Rename Media Section to "Photos & Video" delete_admin_menu_section('Links'); // Get rid of Links Section $movie_tags_item_array = get_admin_menu_item_array('Movies','Movie Tags'); // Save off the Movie Tags Menu update_admin_menu_section('Movies',array( // Rename two Movie Menu Items and Delete the Movie Tags Item array('rename-item','item'=>'Movies','new_title'=>'List Movies'), array('rename-item','item'=>'Add New','new_title'=>'Add Movie'), array('delete-item','item'=>'Movie Tags'), )); copy_admin_menu_item('Movies',array('Actors','Add New')); // Copy the 'Add New' over from Actors renamed_admin_menu_item('Movies','Add New','Add Actor'); // Rename copied Actor 'Add New' to 'Add Actor add_admin_menu_item('Movies',array( // (Another way to get a 'Add Actor' Link to a section.) 'title' => 'Alt Add Actor ', 'slug' => 'post-new.php?post_type=actor', ), array(// Add Back the Movie Tags at the end. 'where'=>'end' )); add_admin_menu_item('Movies',$movie_tags_item_array,array(// Add Back the Movie Tags at the end. 'where'=>'end' )); delete_admin_menu_section('Actors'); // Finally just get rid of the actors section } 

Более того, эти функции даже рассматриваются (как основа) для включения в WordPress 3.1, поэтому, если нам повезет, они могут даже стать стандартными!

Думал, что это может быть полезно в качестве другого варианта. Вот простое назначение в глобальном подменю $. Я использую hook_init, потому что у admin_menu могут быть другие плагины, добавляющие элементы подменю (в моем случае это было так, что было слишком рано делать сортировку). Также обратите внимание, что анонимная функция (лямбда) в usort требует PHP 5.3+.

 <?php add_action('admin_init','my_admin_init'); function my_admin_init() { global $submenu; $submenu_key = 'my_key'; // See note below on $submenu_key if ( array_key_exists( $submenu_key, $submenu ) ) { // alphabetize submenu items usort( $submenu[ $submenu_key ], function ( $a, $b ) { // format of a submenu item is [ 'My Item', 'read', 'manage-my-items', 'My Item' ] return strcasecmp( $a[0], $b[0] ); } ); } } 

Обратите внимание, что $submenu_key$parent_slug в add_submenu_page , что совпадает с $menu_slug в add_menu_page .