व्यवस्थापक मेनू लेबल बदलना


44

मैंने अपने क्लाइंट साइटों के लिए वर्डप्रेस को पूरी तरह से अनुकूलित करने के लिए functions.php फ़ाइल का उपयोग करके अंतिम दिन बिताया है। मैं इस बात से चकित हूं कि मैं कितना पूरा कर पाया हूं और यह मेरे ग्राहकों के लिए कितना आसान होगा।

मैंने उन उपयोगकर्ताओं के लिए कुछ मेनू आइटम हटा दिए हैं जो व्यवस्थापक के रूप में लॉग इन नहीं हैं। मैं क्या उम्मीद कर रहा हूं (और जो मैंने पढ़ा है वह जानता है कि यह किया जा सकता है) कुछ मेनू आइटम (व्यवस्थापक क्षेत्र में बाएं साइडबार) का नाम बदलने का एक तरीका ढूंढना है। उदाहरण के लिए पोस्ट को लेख में बदलें।

अगर कोई भी फ़ंक्शन के लिए कोड की आपूर्ति कर सकता है। पीएफ फ़ाइल या मुझे उस दिशा में इंगित करें जो मैं इसकी बहुत सराहना करूंगा!


शायद आपको इसे दो अलग-अलग प्रश्नों में विभाजित करना चाहिए: "व्यवस्थापक मेनू आइटम का नाम बदलना" और "व्यवस्थापक मेनू आइटम का क्रम बदलना" ? इससे आपको अपने प्रश्न के लिए अधिक विचार प्राप्त करने में मदद मिलेगी।
Jan Fabry

जवाबों:


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-menu.php' जोड़कर इसे ऊपर ले जाता है।
नोरक्रॉस

दुर्भाग्यवश नहीं। यह एक ऐसा हिस्सा रहा है, जो मुझे चौंका रहा है। मैं बस मेनू और विगेट्स अपने स्वयं के बटन होने में सक्षम होना चाहता हूं ताकि ग्राहकों के लिए यह आसान हो। यद्यपि कोशिश करने के लिए धन्यवाद
एडम

@ नॉरक्रॉस यह बहुत अच्छा है, लेकिन क्या इसे अनुकूलित करना संभव है ताकि इसमें अनुवाद के उद्देश्यों के लिए पाठ-डोमेन शामिल हो सके?
फिल हीली

@PHHHley इस फ़ंक्शन में लेबलिंग के लिए कोई डेटा नहीं है, बल्कि, केवल आदेश है।
नोर्क्रॉस

8

डिफ़ॉल्ट पोस्ट प्रकार (या उस मामले के लिए कोई अन्य) का नाम बदलने के लिए बस फ़िल्टर का उपयोग करें 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
नॉरक्रॉस का उत्तर उस समय लिखा गया हो सकता है कि सबसे अच्छा था, लेकिन यह एक दूर का क्लीनर दृष्टिकोण है जो एक ही परिणाम को पूरा करने के लिए एक देशी फिल्टर का उपयोग करता है।
रयान

2
मूल लिखने के बाद, मैं मानता हूं कि यह फ़िल्टर बहुत बेहतर है।
नॉरक्रॉस

3

आप इस प्रश्न को देखना चाह सकते हैं

और वर्ग वे पर वहाँ का उल्लेख सार

जो आप के लिए देख रहे हैं कि कार्यों रखती है

rename_admin_menu_section()

उदाहरण के लिए नाम बदलने के लिए लेख के लिए पोस्ट

और आप दिखावे के मेनू को हटा सकते हैं और आपके लिए नया शीर्ष पृष्ठ मेनू आइटम बना सकते हैं


3

मैं सहमत हूँ .. functions.phpफ़ाइल बहुत लचीलापन देता है। मुझे उसी कार्यक्षमता की आवश्यकता है जिसे आपने functions.phpफ़िल्टर और इस प्लगइन के संयोजन के साथ वर्णित किया है ।

मैं जो बता सकता हूं..तो प्लगइन आपके दोनों मुद्दों को पूरा करेगा और यह मल्टी-साइट इंस्टॉल स्थितियों में भी अच्छा काम करता है। उम्मीद है की वो मदद करदे।


ओह ... शूट करें, क्षमा करें, बस एक प्लगइन का उपयोग न करने के बारे में थोड़ा देखा। टैब के नाम और प्लेसमेंट का अनुवाद केवल Functions.php के साथ करने के तरीके निश्चित रूप से हैं। मेरे लिए, इस रास्ते पर जाने के बाद (इसके लिए प्लगइन-मुक्त होने की कोशिश कर रहा है) मैंने फैसला किया कि अतिरिक्त कोडिंग सिर्फ इसके लायक नहीं थी ... यह देखते हुए कि प्लगइन का उपयोग करना कितना आसान था। क्षमा करें, इससे पहले मैंने उस मापदंड को याद किया।
रॉस

कोई समस्या नहीं रॉस, मैं वैसे भी इस पर गौर करने जा रहा हूं। धन्यवाद
एडम

0

ऊपर नॉरक्रॉस का उदाहरण सही है, लेकिन मुझे अंतर्राष्ट्रीयकरण की संभावना की आवश्यकता थी। अगर मेरे पास प्रतिष्ठा थी, तो यह नॉरक्रॉस के जवाब के तहत एक टिप्पणी होगी, लेकिन जब से मैं नहीं करता, मैं सिर्फ संशोधित कोड यहां डालूंगा। '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

अच्छी तरह से मैं अभी तक टिप्पणी नहीं कर सकता ... मुझे भी लगा कि एक कटौती और पेस्ट उस मामले में उपयोगी हो सकता है जो नॉरक्रॉस इसे संपादित करना चाहता है।
निमोलो
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.