管理メニューのラベルの変更


44

最終日、functions.phpファイルを使用して、クライアントサイトのWordPressを完全にカスタマイズしました。私はどれだけ達成でき、それがクライアントにとって物事をどれだけ簡単にできるかに驚く。

管理者としてログインしていないユーザーの特定のメニュー項目を削除しました。私が望んでいること(そして私が読んだことから、それができることを知っています)は、いくつかのメニュー項目の名前を変更する方法を見つけることです(管理エリアの左側のサイドバー)。たとえば、投稿を記事に変更します。

誰かがfunctions.phpファイルのコードを提供したり、私をその方向に向けてくれたりすることができれば、とても感謝しています!


これを「管理メニュー項目の名前変更」「管理メニュー項目の順序の変更」の 2つの異なる質問に分割する必要があるかもしれません。これにより、質問に対するより多くの意見を得ることができます。
ヤンファブリ

回答:


66

ラベルを変更するプロセスは次のとおりです(この例では投稿を「連絡先」に変更しました)

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' );

メニューの順序を変更するには、次のようにします:

// 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');

アイテムを削除するコードを持っていますが、それはグローバルであり、ユーザーアクセスレベルに基づいていません


これは素晴らしい感謝です!ここで、メインメニューボタンとしてサブメニュー項目(メニューなど)を移動する方法を見つける必要があります。それについてのアイデアはありますか?
アダム

テストはしていませんが、配列に「nav-menus.php」を追加すると上に移動するかどうかを確認します。
ノークロス

残念だけど違う。これは私を悩ませてきた1つの部分でした。クライアントが簡単になるように、メニューとウィジェットを独自のボタンにできるようにしたいだけです。試してくれてありがとう
アダム

@Norcrossこれは素晴らしいですが、翻訳目的でテキストドメインを含めることができるように適応させることは可能ですか?
フィルヒーリー14年

@PhillHealeyこの関数には、ラベル付けのためのデータは一切含まれておらず、注文そのもののみが含まれています。
ノークロス14年

8

デフォルトの投稿タイプ(またはその他の投稿タイプ)の名前を変更するには、filterを使用しますpost_type_labels_{$post_type}。デフォルトpostではになりますpost_type_labels_post。以下のコードには、ラベルの完全なリスト(WP 4.7.1)があります。すべてを変更する必要はありません。

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;
}

国際化のサポートが必要な場合は、次の__( $text, $textdomain )ように使用します。

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

関数でフィルタを見つけました:get_post_type_labels()ファイルから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 );

2
Norcrossの回答は、執筆時点で最良だったかもしれませんが、これはネイティブフィルタを使用して同じ結果を達成するはるかにクリーンなアプローチです。
ライアン

2
オリジナルを書いた後、私はこのフィルターがはるかに優れていることに同意します。
ノークロス

3

あなたは見たいかもしれない、この質問

そして、彼らが要点について言及しているクラス

あなたが探している機能を保持しています

rename_admin_menu_section()

インスタンスの名前を変更するには、投稿を記事に変更します

外観メニューを削除して、新しいトップページメニュー項目を作成できます


3

私は同意します。このfunctions.phpファイルは多くの柔軟性を提供します。functions.phpフィルターとこのプラグインの組み合わせで説明したのと同じ機能のいくつかが必要でした。

私が言えることから、このプラグインはあなたの問題の両方を達成し、マルチサイトのインストール状況でもうまく機能します。お役に立てば幸いです。


おっと...撮影、申し訳ありませんが、プラグインを使用したくないということを少し見ました。Functions.phpだけでタブ名と配置を翻訳する方法は間違いなくあります。私にとって、この道をたどった後(プラグインを使わないようにしようと)、余分なコーディングはそれだけの価値はないと判断しました...そのプラグインがどれほど簡単かを考えました。申し訳ありませんが、前にその基準を逃しました。
ロス

ロス、問題ありません。とにかく調べます。ありがとう
アダム

0

上記のNorcrossの例は正解ですが、国際化の可能性が必要でした。評判が良ければ、これはノークロスの答えに基づくコメントになりますが、そうではないので、修正したコードをここに配置します。「i18n_context」は、翻訳コンテキストの任意の名前空間です。これは、たとえばプラグインまたはテーマの名前です。

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' );

他の回答の編集を提案しなかったのはなぜですか?
FUXIA

まだコメントできません...また、ノークロスが編集したい場合にカットアンドペーストが役立つと思いました。
ニモロ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.