web-dev-qa-db-de.com

Machen Sie Untermenüpunkte mit functions.php zu einem Hauptlink im Admin-Menü

Ich versuche, den Admin-Bereich mit der Datei functions.php anzupassen, um meinen Kunden die Arbeit zu erleichtern. Eine Bitte, die ich zuvor bekommen habe und die ich erfüllen möchte, besteht darin, einige der Untermenüs in die Hauptnavigation zu verschieben.

Zum Beispiel möchte ich Widgets und Menüs in der Hauptnavigation erscheinen lassen, anstatt ein Untermenü für Erscheinungsbilder zu sein. Ich würde dann am Ende die Registerkarte Aussehen alle zusammen entfernen.

Ich konnte den Tab entfernen, aber die neuen Schaltflächen für Widgets und Menüs nicht erstellen. Auch wenn ich Hilfe bekommen kann, wenn ich sie nicht technisch bewege, sondern stattdessen eine neue Schaltfläche erstelle und den Link selbst einrichte (zB für Menüs -> /nav-menus.php).

Ist irgendetwas davon möglich?

Vielen Dank

3
Adam

OK, es ist ein bisschen chaotisch, aber es funktioniert. Schau mal

function remove_submenus() {
  global $submenu;
  unset($submenu['themes.php'][10]); // Removes Menu  
}
add_action('admin_menu', 'remove_submenus');



function new_nav_menu () {
    global $menu;
    $menu[99] = array('', 'read', 'separator', '', 'menu-top menu-nav');
    add_menu_page(__('Nav Menus', 'mav-menus'), __('Nav Menus', 'nav-menus'), 'edit_themes', 'nav-menus.php', '', 99);
}
add_action('admin_menu', 'new_nav_menu');

Im Wesentlichen werden die Einstellungen des Navigationsmenüs aus dem Unterfenster "Darstellung" entfernt und dann als Seite der obersten Ebene (ähnlich einem Plugin) erneut hinzugefügt. Dort können Sie auch eine Symbol-URL festlegen. Das Einzige, was ich nicht so machen kann, wie ich es will, ist die Positionierung.

3
Norcross

Noch einfacher ist es, wenn Sie wie im OP nur Menüs und Widgets aus dem Erscheinungsbild in die oberste Ebene verschieben möchten. Das habe ich auch gebraucht.

Da wir nur WP Hauptmenüelemente verschieben, müssen wir add_menu_page nicht verwenden, um die Menüelemente wieder hinzuzufügen - wir fügen keine neuen Menüelemente hinzu. Deaktivieren Sie sie einfach aus dem $ -Untermenü-Array und setzen Sie sie an einer anderen Stelle im $ -Menü-Array zurück.

function re_sort_menu() {
  global $menu;
  global $submenu;
  // Note: find the position of every submenu in Appearance by uncommenting the following: 
  // print_r($submenu['themes.php'];
  unset($submenu['themes.php'][10]); // Unsets Appearance -> Menu (position 10)
  unset($submenu['themes.php'][7]); // Unsets Appearance -> Widgets

  // Add Menu and Widgets back at top level with some dashicons
  // Be careful not to give menu positions (array keys) that conflict with other menu items
  // TIP: print_r($menu); to see existing menu positions and also to check out the proper order of these array values. WP docu seems to list them in the incorrect order.
  $menu[31] = array( __( 'Menus', 'theme-slug' ), 'edit_themes', 'nav-menus.php', __( 'Menus', 'theme-slug' ), 'menu-top menu-nav', 'menu-nav', 'dashicons-menu');  
  $menu[32] = array( __( 'Widgets', 'theme-slug' ), 'edit_themes', 'widgets.php', __( 'Widgets', 'theme-slug' ), 'menu-top menu-nav', 'menu-nav', 'dashicons-admin-generic');  
}
add_action( 'admin_menu', 're_sort_menu' );

Die obige Antwort von Norcross hat mich auf den richtigen Weg gebracht, aber aus irgendeinem Grund konnte ich mit add_menu_item in WP 4.1 keinen funktionierenden Abschnitt "Navigationsmenü" als obersten Menüpunkt im Admin neu generieren. Das Problem schien in der Reihenfolge der Array-Werte zu liegen, die an diese Funktion übergeben wurden, aber egal, wie ich die Dinge neu anordnete und direkt nach dem neuen WP Developer API-Artikel arbeitete, es hat nie funktioniert .

0
nimmolo

Guter Artikel über diesen alten Link, der dabei helfen kann, http://wpengineer.com/475/top-level-menu-in-wordpress-27/

Auch die Lösung, die @Norcross vorschlägt, funktioniert hervorragend, aber das Symbol 99 wird einen Fehler auslösen. Sie können es leer lassen, z. '' statt 99. Sie können auch ein eigenes benutzerdefiniertes Symbol verwenden, indem Sie basename(__FILE__) und den Dateinamen verwenden.

0

Wie für Wordpress 4.4 muss ich folgenden Code verwenden, damit es funktioniert:

function adjust_admin_menu() {
  global $menu;

  remove_submenu_page( 'themes.php', 'nav-menus.php' );

  // Add nav menu as top element
  $menu[31] = array( __( 'Menus', 'theme-slug' ), 'edit_theme_options', 'nav-menus.php', __( 'Menus', 'theme-slug' ), 'menu-top menu-nav', 'menu-nav', 'dashicons-menu');  
}
add_action( 'admin_menu', 'adjust_admin_menu' );
0
jmarceli

Sie können die Reihenfolge mithilfe des Filters menu_order ändern:

function custom_menu_order($menu_ord) {  
if (!$menu_ord) return true;  

return array(  
    'index.php', // Dashboard  
    'edit.php', // Posts 
    'upload.php', // Media
    'edit.php?post_type=page', // Pages
    'edit-comments.php', // Comments 
    'link-manager.php', // Links 
    'separator1', // First separator  
    'nav-menus.php', // Navigation
    'separator2', // Second separator  
    'themes.php', // Appearance  
    'plugins.php', // Plugins  
    'users.php', // Users  
    'tools.php', // Tools  
    'options-general.php', // Settings  
    'separator-last', // Last separator  
);
}  
add_filter('custom_menu_order', 'custom_menu_order'); // Activate custom_menu_order  
add_filter('menu_order', 'custom_menu_order');

Dies wurde aus diesem Artikel hier entnommen: Anpassen Ihres WordPress-Administrators

Beachten Sie, dass die Datei nav-menu.php zum Hauptmenü hinzugefügt wurde. Um jeden Menüpunkt neu zu positionieren, müssen Sie sie nur neu anordnen.

0
Steven