Ändern der Bezeichnungen des Admin-Menüs

44

Ich habe den letzten Tag damit verbracht, die Datei functions.php zu verwenden, um WordPress vollständig für meine Client-Sites anzupassen. Ich bin erstaunt, wie viel ich erreichen konnte und wie viel einfacher es für meine Kunden wird.

Ich habe bestimmte Menüpunkte für Benutzer entfernt, die nicht als Administrator angemeldet sind. Ich hoffe (und soweit ich weiß, dass es möglich ist), einen Weg zu finden, einige der Menüpunkte umzubenennen (linke Seitenleiste im Admin-Bereich). Ändern Sie zum Beispiel Beiträge in Artikel.

Wenn jemand den Code für die Datei functions.php bereitstellen oder mich in die Richtung weisen kann, wäre ich sehr dankbar!

Adam
quelle
Vielleicht sollten Sie dies in zwei verschiedene Fragen aufteilen: "Admin-Menüpunkte umbenennen" und "Reihenfolge der Admin-Menüpunkte ändern" ? Auf diese Weise erhalten Sie mehr Ansichten für Ihre Frage.
Jan Fabry

Antworten:

66

Hier ist der Vorgang zum Ändern der Bezeichnungen (in meinem Beispiel habe ich die Beiträge in "Kontakte" geändert)

function change_post_menu_label() {
    global $menu;
    global $submenu;
    $menu[5][0] = 'Contacts';
    $submenu['edit.php'][5][0] = 'Contacts';
    $submenu['edit.php'][10][0] = 'Add Contacts';
    $submenu['edit.php'][15][0] = 'Status'; // Change name for categories
    $submenu['edit.php'][16][0] = 'Labels'; // Change name for tags
    echo '';
}

function change_post_object_label() {
        global $wp_post_types;
        $labels = &$wp_post_types['post']->labels;
        $labels->name = 'Contacts';
        $labels->singular_name = 'Contact';
        $labels->add_new = 'Add Contact';
        $labels->add_new_item = 'Add Contact';
        $labels->edit_item = 'Edit Contacts';
        $labels->new_item = 'Contact';
        $labels->view_item = 'View Contact';
        $labels->search_items = 'Search Contacts';
        $labels->not_found = 'No Contacts found';
        $labels->not_found_in_trash = 'No Contacts found in Trash';
    }
    add_action( 'init', 'change_post_object_label' );
    add_action( 'admin_menu', 'change_post_menu_label' );

Gehen Sie folgendermaßen vor, um die Menüreihenfolge zu ändern:

// CUSTOMIZE ADMIN MENU ORDER
   function custom_menu_order($menu_ord) {
       if (!$menu_ord) return true;
       return array(
        'index.php', // this represents the dashboard link
        'edit.php', //the posts tab
        'upload.php', // the media manager
        'edit.php?post_type=page', //the posts tab
    );
   }
   add_filter('custom_menu_order', 'custom_menu_order');
   add_filter('menu_order', 'custom_menu_order');

Ich habe Code zum Entfernen von Elementen, aber er ist global und basiert nicht auf der Benutzerzugriffsebene

Norcross
quelle
Das ist hervorragend, danke! Jetzt muss ich nur noch einen Weg finden, um einen Untermenüpunkt (z. B. Menüs) als Hauptmenütaste zu verschieben. Irgendeine Idee dazu?
Adam
Nicht getestet, aber prüfen Sie, ob das Hinzufügen von 'nav-menus.php' zum Array es nach oben verschiebt.
Norcross
Unglücklicherweise nicht. Dies war der eine Teil, der mich nervte. Ich möchte nur, dass die Menüs und Widgets ihre eigenen Schaltflächen sind, damit es für Kunden einfacher ist. Vielen Dank für den Versuch
Adam
@Norcross Das ist großartig, aber ist es möglich, es so anzupassen, dass es die Textdomäne für Übersetzungszwecke enthalten kann?
Phill Healey
@PhillHealey Diese Funktion enthält überhaupt keine Daten zur Beschriftung, sondern nur die Bestellung selbst.
Norcross
8

Verwenden Sie zum Umbenennen des Standardposttyps (oder eines anderen Posttyps) einfach den Filter post_type_labels_{$post_type}. Standardmäßig wird postes sein post_type_labels_post. Im folgenden Code finden Sie die vollständige Liste der Labels ( WP 4.7.1). Sie müssen nicht alles ändern.

add_filter( 'post_type_labels_post', 'news_rename_labels' );

/**
* Rename default post type to news
*
* @param object $labels
* @hooked post_type_labels_post
* @return object $labels
*/
function news_rename_labels( $labels )
{
    # Labels
    $labels->name = 'News';
    $labels->singular_name = 'News';
    $labels->add_new = 'Add News';
    $labels->add_new_item = 'Add News';
    $labels->edit_item = 'Edit News';
    $labels->new_item = 'New News';
    $labels->view_item = 'View News';
    $labels->view_items = 'View News';
    $labels->search_items = 'Search News';
    $labels->not_found = 'No news found.';
    $labels->not_found_in_trash = 'No news found in Trash.';
    $labels->parent_item_colon = 'Parent news'; // Not for "post"
    $labels->archives = 'News Archives';
    $labels->attributes = 'News Attributes';
    $labels->insert_into_item = 'Insert into news';
    $labels->uploaded_to_this_item = 'Uploaded to this news';
    $labels->featured_image = 'Featured Image';
    $labels->set_featured_image = 'Set featured image';
    $labels->remove_featured_image = 'Remove featured image';
    $labels->use_featured_image = 'Use as featured image';
    $labels->filter_items_list = 'Filter news list';
    $labels->items_list_navigation = 'News list navigation';
    $labels->items_list = 'News list';

    # Menu
    $labels->menu_name = 'News';
    $labels->all_items = 'All News';
    $labels->name_admin_bar = 'News';

    return $labels;
}

Wenn Sie Unterstützung bei der Internationalisierung wünschen, verwenden Sie einfach Folgendes __( $text, $textdomain ):

$labels->name = __( 'News', 'textdomain' );

Ich habe den Filter in Funktion gefunden: get_post_type_labels()aus einer Datei wp-includes/post.php:

/**
 * Filter the labels of a specific post type.
 *
 * The dynamic portion of the hook name, `$post_type`, refers to
 * the post type slug.
 *
 * @since 3.5.0
 *
 * @see get_post_type_labels() for the full list of labels.
 *
 * @param object $labels Object with labels for the post type as member variables.
 */
$labels = apply_filters( "post_type_labels_{$post_type}", $labels );
Ivan
quelle
2
Die Antwort von Norcross war zum Zeitpunkt der Erstellung vielleicht die beste, aber dies ist ein weitaus saubererer Ansatz, bei dem ein systemeigener Filter verwendet wird, um dasselbe Ergebnis zu erzielen.
Ryan
2
Nachdem ich das Original geschrieben habe, stimme ich zu, dass dieser Filter viel besser ist.
Norcross
3

Vielleicht möchten Sie sich diese Frage ansehen

und die Klasse, die dort erwähnt wird

die Funktionen enthält, die Sie suchen

rename_admin_menu_section()

zum Beispiel umbenennen ändern Beiträge zu Artikeln

und Sie können das Erscheinungsbild-Menü entfernen und einen neuen Menüpunkt für die Startseite erstellen

Bainternet
quelle
3

Ich bin damit einverstanden. Die functions.phpDatei bietet viel Flexibilität. Ich habe einige der gleichen Funktionen benötigt, die Sie mit einer Kombination aus functions.phpFiltern und diesem Plugin beschrieben haben .

Nach allem, was ich sagen kann, würde dieses Plugin beide Probleme lösen und funktioniert auch in Situationen mit mehreren Standorten. Ich hoffe, das hilft.

Ross
quelle
Hoppla ... schieß, sorry, habe gerade gesehen, dass ich kein Plugin verwenden möchte. Es gibt definitiv Möglichkeiten, die Registerkartennamen und Platzierungen nur mit der Datei Functions.php zu übersetzen. Nachdem ich mich auf den Weg gemacht hatte (und versucht hatte, dafür Plug-in-frei zu sein), entschied ich, dass sich die zusätzliche Codierung einfach nicht lohnt, da das Plug-in so einfach zu bedienen ist. Entschuldigung, ich habe dieses Kriterium bereits verpasst.
Ross
Kein Problem, Ross, ich werde es mir trotzdem ansehen. Vielen Dank
Adam
0

Das obige Beispiel von Norcross ist richtig, aber ich brauchte die Möglichkeit der Internationalisierung. Wenn ich den Ruf hätte, wäre dies ein Kommentar unter Norcross 'Antwort, aber da ich das nicht tue, werde ich nur den geänderten Code hier einfügen. 'i18n_context' ist ein beliebiger Namespace für den Übersetzungskontext. Dies kann beispielsweise der Name Ihres Plugins oder Themas sein.

function change_post_menu_label() {
  global $menu;
  global $submenu;
  $menu[5][0] = __('Contacts', 'i18n_context');
  $submenu['edit.php'][5][0] = __('Contacts', 'i18n_context');
  $submenu['edit.php'][10][0] = __('Add Contacts', 'i18n_context');
  $submenu['edit.php'][15][0] = __('Status', 'i18n_context'); // Change name for categories
  $submenu['edit.php'][16][0] = __('Labels', 'i18n_context'); // Change name for tags
  echo '';
}

function change_post_object_label() {
  global $wp_post_types;
  $labels = &$wp_post_types['post']->labels;
  $labels->name = __('Contacts', 'i18n_context');
  $labels->singular_name = __('Contact', 'i18n_context');
  $labels->add_new = __('Add Contact', 'i18n_context');
  $labels->add_new_item = __('Add Contact', 'i18n_context');
  $labels->edit_item = __('Edit Contacts', 'i18n_context');
  $labels->new_item = __('Contact', 'i18n_context');
  $labels->view_item = __('View Contact', 'i18n_context');
  $labels->search_items = __('Search Contacts', 'i18n_context');
  $labels->not_found = __('No Contacts found', 'i18n_context');
  $labels->not_found_in_trash = __('No Contacts found in Trash', 'i18n_context');
}
add_action( 'init', 'change_post_object_label' );
add_action( 'admin_menu', 'change_post_menu_label' );
Nimmolo
quelle
Warum haben Sie der anderen Antwort keine Änderung vorgeschlagen?
fuxia
Nun, ich kann noch keinen Kommentar abgeben. Außerdem dachte ich, ein Ausschneiden und Einfügen könnte nützlich sein, wenn Norcross es bearbeiten möchte.
Nimmolo