Eklentiler tarafından eklenen yönetici menüsü sayfaları nasıl kaldırılır?


39

Yönetici alanında kullanılmayacak pek çok şeyi temizleyen aşağıdaki kodu aldım:

add_action( 'admin_menu', 'my_remove_menu_pages' );

function my_remove_menu_pages() {
  remove_menu_page( 'edit.php' );                   //Posts
  remove_menu_page( 'upload.php' );                 //Media
  remove_menu_page( 'edit-comments.php' );          //Comments
  remove_menu_page( 'themes.php' );                 //Appearance
  remove_menu_page( 'users.php' );                  //Users
  remove_menu_page( 'tools.php' );                  //Tools
  remove_menu_page( 'options-general.php' );        //Settings

};

Ancak, eklentilerden eklenmiş iki menü öğesi vardır.

Her menü maddesinin üzerine geldiğimde, linkler şöyle diyor:

/wp-admin/edit.php?post_type=acf
/wp-admin/admin.php?page=wpcf7

Bu menü sayfalarını da gizlemenin bir yolu var mı?


Sormak aptalca olabilir, ancak neden söz konusu eklentileri devre dışı bıraktırabiliyorsunuz?
eyoung100

5
@ eyoung100 Bunun birkaç nedeni var. En belirgin olanı, belirli işlevleri belirli kullanıcılardan (rollerden) gizlemek olacaktır . Ayrıca yönetici menüsünü yeniden yapılandırmak isteyebilir ve bu nedenle belirli menü girişlerini kaldırmanız (ve yeniden eklemek) gerekebilir.
tfrommen

Kodlama yoluyla bir çözüm kullanırsanız, eklenti bağlamda 'Yönetici Yap' eklentisi gibi bir yardımcıdır. Eklenti listesi aynı zamanda eklentilerin ayarları sizin gereksiniminiz değilse, özel kodla çıkarmanız gereken sümüklü böcekleri de içerir.
bueltge

Yanıtlar:


61

Doğru kancaları kullanmanız gerekir (bunlar her zaman URL'ler / sümükler ile aynı değildir) ve daha sonra çalışan bir kanca kullanmaktan zarar vermez (örn. admin_init):

add_action( 'admin_init', 'wpse_136058_remove_menu_pages' );

function wpse_136058_remove_menu_pages() {

    remove_menu_page( 'edit.php?post_type=acf' );
    remove_menu_page( 'wpcf7' );
}

Hata ayıklamak için aşağıdakileri kullanabilirsiniz:

add_action( 'admin_init', 'wpse_136058_debug_admin_menu' );

function wpse_136058_debug_admin_menu() {

    echo '<pre>' . print_r( $GLOBALS[ 'menu' ], TRUE) . '</pre>';
}

Bu, (kurulumum için) İletişim Formu 7 eklentisi menü sayfası için aşağıdakileri verir:

[27] => Array
        (
            [0] => Formular
            [1] => wpcf7_read_contact_forms
            [2] => wpcf7
            [3] => Contact Form 7
            [4] => menu-top menu-icon-generic toplevel_page_wpcf7 menu-top-last
            [5] => toplevel_page_wpcf7
            [6] => none
        )

Anahtarla dizi öğesi 2aradığınız budur: wpcf7.


5
Menüden nasıl çıkılacağını ve neyin kullanılacağını bulmak remove_menu_page()çok yardımcı oldu - bana sadece balıkları vermek yerine nasıl balık tutulacağını öğrettim!
Matthew Clark

Acf

Hata ayıklama kodu çok yardımcı oluyor. Paylaşım için bir ton teşekkürler!
Devner

16
    // PLUGINS THAT ADD AS DASHBOARD SUBMENU
    // IF THIS IS THE URL BELOW - THE PAGE VARIABLE IS WHAT I NEED ( SO WHATEVER COMES AFTER PAGE= )
    // http://example.com/wp-admin/index.php?page=iconize-plugin-update-notifier
    remove_submenu_page( 'index.php', 'iconize-plugin-update-notifier' );

    // OR FOR EXAMPLE WOOCOMMERCE DASHBOARD SUBMENU
    remove_submenu_page( 'index.php', 'wc-about' ); //WOO
    remove_submenu_page( 'index.php', 'wc-credits' ); //WOO
    remove_submenu_page( 'index.php', 'wc-translators' ); //WOO

    // CUSTOM POST TYPE TOP LEVELS
    remove_menu_page( 'edit.php?post_type={$POST_TYPE}' ); //LOOK FOR WHAT COMES AFTER POST TYPE IN THE URL
    remove_menu_page( 'edit.php?post_type=testimonials-widget' ); //TESTIMONIALS WIDGET
    remove_menu_page( 'edit.php?post_type=product' ); //WOOCOMMERCE

    // CUSTOM POST TYPE SUBMENU
     remove_submenu_page( 'edit.php?post_type={$POST_TYPE}', '{$SUBMENU_URL_VARIABLE}' ); //EXAMPLE FORMAT
     // SO IF BELOW IS THE URL
     // http://example.com/wp-admin/edit.php?post_type=testimonials-widget&page=testimonialswidget_settings
     // YOU NEED TO SEE WHATS AFTER PAGE
     remove_submenu_page( 'edit.php?post_type=testimonials-widget', 'testimonialswidget_settings' ); //TESTIMONIALS WIDGET

    // OTHER EXAMPLES
    remove_menu_page( 'revslider' ); // REVSLIDER
    remove_menu_page( 'woocommerce' ); // WOOCOMMERCE
    remove_menu_page( 'order-post-types-shop_order' ); // WOOCOMMERCE
    remove_menu_page( 'order-post-types-shop_coupons' ); // WOOCOMMERCE
    remove_menu_page( 'shortcodes-ultimate' ); // SHORTCODES ULTIMATE
    remove_menu_page( 'wp-admin-microblog/wp-admin-microblog.php' ); // ADMIN MICROBLOG
    remove_menu_page( 'snippets' ); //CODE SNIPPETS
    remove_menu_page( 'gf_edit_forms' ); // GRAVITY FORMS
        remove_submenu_page( 'gf_edit_forms', 'gf_settings' ); // GRAVITY FORMS
        remove_submenu_page( 'gf_edit_forms', 'gf_export' ); // GRAVITY FORMS
        remove_submenu_page( 'gf_edit_forms', 'gf_update' ); // GRAVITY FORMS
        remove_submenu_page( 'gf_edit_forms', 'gf_addons' ); // GRAVITY FORMS
        remove_submenu_page( 'gf_edit_forms', 'gf_help' ); // GRAVITY FORMS

        remove_submenu_page( 'cleverness-to-do-list', 'cleverness-to-do-list-settings' ); //Cleverness TODO

İHTİYACINIZ İLE İLGİLİ TÜM BİLGİLERİ ALMAK İÇİN AŞAĞIDAKİ BU BÜYÜK KABUL EDECEĞİNİZ:

if (!function_exists('debug_admin_menus')):
function debug_admin_menus() {
if ( !is_admin())
        return;
    global $submenu, $menu, $pagenow;
    if ( current_user_can('manage_options') ) { // ONLY DO THIS FOR ADMIN
        if( $pagenow == 'index.php' ) {  // PRINTS ON DASHBOARD
            echo '<pre>'; print_r( $menu ); echo '</pre>'; // TOP LEVEL MENUS
            echo '<pre>'; print_r( $submenu ); echo '</pre>'; // SUBMENUS
        }
    }
}
add_action( 'admin_notices', 'debug_admin_menus' );
endif;

Anahtarlar size tüm bunları wordpress globals ile yapmanıza izin veren dizi değerleri verecektir (tavsiye edilmese de)

function remove_submenus_all_please() {
if ( !is_admin())
        return;
  global $submenu;
    unset($submenu['index.php'][10]); // Removes Updates
  //Posts menu
 // unset($submenu['edit.php'][5]); // Leads to listing of available posts to edit
 // unset($submenu['edit.php'][10]); // Add new post
 // unset($submenu['edit.php'][15]); // Remove categories
 // unset($submenu['edit.php'][16]); // Removes Post Tags
}
add_action('admin_menu', 'remove_submenus_all_please', 999);

Ve bazı kullanıcılar için kaldırılması, eklenmiş yeteneklerin haricinde aynı şeyi yapmasıdır:

function remove_by_caps_admin_menu() {
if ( !is_admin())
        return;
    if ( !current_user_can('manage_options') ) {
        remove_menu_page( 'revslider' ); // REVSLIDER
    } elseif ( !current_user_can('edit_posts') ) {
        remove_menu_page( 'woocommerce' ); // WOO
    } else {
    }
}
add_action('admin_menu', 'remove_by_caps_admin_menu', 999);

VE TÜM BİRLİKTE BİZİM KODU NEDEN KISA DEĞİL? YAZDIRMAYI YAPMAK İÇİN ARRAYLARI KULLANABİLİRSİNİZ remove_submenu_page 50 kez. Bu, araç çubuğu düğümleriyle de çalışır:

if ( !function_exists( 'remove_admin_menupages_in_array' ) ) {
function remove_admin_menupages_in_array() {
    if ( !is_admin())
        return;
          $admin_menus = array(
                                'revslider',
                                'woocommerce',
                                'shortcodes-ultimate',
          );

    foreach ( $admin_menus as $menu_page ) {
        if ( !current_user_can('manage_options') ) {
            remove_menu_page( $menu_page );
        }
    } // foreach
 } // function
add_action('admin_menu', 'remove_admin_menupages_in_array', 9999);
} // exists

15

Add_action önceliğini daha yüksek bir sayıya ayarlamanız ve özellikle şu iki yeni bağlantıyı hedeflemeniz gerekir:

add_action( 'admin_menu', 'my_remove_menu_pages', 999 );

function my_remove_menu_pages() {
  remove_menu_page( 'edit.php' );                   //Posts
  remove_menu_page( 'upload.php' );                 //Media
  remove_menu_page( 'edit-comments.php' );          //Comments
  remove_menu_page( 'themes.php' );                 //Appearance
  remove_menu_page( 'users.php' );                  //Users
  remove_menu_page( 'tools.php' );                  //Tools
  remove_menu_page( 'options-general.php' );        //Settings
  remove_menu_page( 'edit.php?post_type=acf' );
  remove_menu_page( 'wpcf7' );
};

Gelişmiş Özel Alanlar ayrıca, buradaki menü için bunun nasıl yapılacağına ilişkin bir yardım belgesi sunar:

http://www.advancedcustomfields.com/resources/how-to/how-to-hide-acf-menu-from-clients/

İletişim Formu 7 ayrıca menünün görünürlüğünü kısıtlama yöntemine sahiptir:

http://contactform7.com/restricting-access-to-the-administration-panel/


contactform7'yi kullanmak benim için çalıştıremove_menu_page( 'wpcf7' );
Abel Melquiades Callejo

8

Güncelleme

Ben bir kod parçası oluşturdu daha sağlam bir işlevle ana menü ve alt menü öğeleri hem fırsatlar.

Orijinal cevap

Kaldırmak istediğiniz menüleri belirtmek yerine, saklamak istediğiniz menüleri belirtin :)

add_action('admin_init', 'nwcm_admin_init');

function nwcm_admin_init()
{   
    // Remove unnecessary menus 
    $menus_to_stay = array(
        // Client manager
        'nwcm',

        // Dashboard
        'index.php',

        // Users
        'users.php'
    );      
    foreach ($GLOBALS['menu'] as $key => $value) {          
        if (!in_array($value[2], $menus_to_stay)) remove_menu_page($value[2]);
    }   

} 

Bu şekilde, eklenti adları aramak ve yeni eklentiler eklerken kodu değiştirmek zorunda kalmazsınız.


Tam olarak aradığım şey! Ayrıca Kod snippet'iniz harika görünüyor! Çözümünüzü eklediğiniz için teşekkür ederiz. Takdir et!
Devner

5

Doğru $ menu_slug bulmanız gerekir. Aşağıdaki kod benim için çalıştı:

add_action( 'admin_init', 'remove_menus' );
function remove_menus(){
  remove_menu_page( 'wpcf7' );
}

4

Tabii ki, yalnızca kaldırmak istediğiniz öğeleri belirleyebilirsiniz. Aşağıdaki koda bir göz atın:

/wordpress/wp-content/plugins/your_plugin/your_plugin.php :


add_action('admin_init', 'nwcm_admin_init');

function nwcm_admin_init()
{   
// Remove unnecessary menus 
$menus_to_remove = array(
    // menu items you want to remove
    'menu_item_1',
    'menu_item_2',
    .
    .
    'menu_item_n'
);     

// To avoid warning message, check whether 'menu' is set AND is an array
if(isset($GLOBALS['menu']) && is_array($GLOBALS['menu'])) {
   foreach ($GLOBALS['menu'] as $key => $value) {  
     //Remove the '!' in the 'if' condition.        
     if (in_array($value[2], $menus_to_remove)) remove_menu_page($value[2]);
   }
}   

} 

Bu sadece numediaweb'in metodunun negatifidir. @Numediaweb teşekkürler. İyi çalışıyor.

Not: 'menu_item_1 / n' -> fareyi menü öğesinin üzerine getirin ve linkte gösterilen menü öğesinin tam sayfasını getirin.


0

bu kod pasajını kullanın

function your_custom_name() {    
    remove_menu_page('vc-general'); //the slug as seen wp-admin.php?page=vc-general  
}    
add_action( 'admin_init', 'your_custom_name' );

Lütfen cevabınızı düzenleyin ve bir açıklama ekleyin: bu neden sorunu çözdü?
fuxia
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.