2012-01-29 32 views
8

Tôi đang cố gắng xóa một vài menu cấp cao nhất trên bảng quản trị wordpress. Rất lạ là tôi nhận được thông báo lỗi từ tệp plugin.php, trong đó hàm được khai báo, cho biết: "Đối số không hợp lệ được cung cấp cho foreach() trong C: \ wamp \ www \ wordpress-alut \ wp-admin \ include \ plugin.php trên dòng 1261 ". tôi đã đi đến tập tin và tìm thấy đoạn mã sau:chức năng wordpress remove_menu_page() ném một lỗi

function remove_menu_page($menu_slug) { 
    global $menu; 

    foreach ($menu as $i => $item) { // **this is line 1261** 
     if ($menu_slug == $item[2]) { 
      unset($menu[$i]); 
      return $item; 
     } 
    } 

    return false; 
} 

Điều quan trọng cần lưu ý là khi tôi sử dụng remove_ menu con _page(), đó là chức năng tiếp theo trong plugin.php, tôi nhận được không như vậy lỗi. chức năng của tôi, nằm ở functions.php:

add_action('admin_init', 'mf_remove_menu_pages'); 
function mf_remove_menu_pages() { 
    remove_menu_page('link-manager.php'); 
    remove_menu_page('index.php'); 
    remove_menu_page('users.php'); 
    remove_menu_page('upload.php'); 
    remove_menu_page('tools.php'); 
    remove_menu_page('edit.php'); 
    remove_menu_page('edit-comments.php'); 
    remove_menu_page('post-new.php'); 
    remove_submenu_page('themes.php','themes.php'); 
    remove_submenu_page('themes.php','theme-editor.php'); 
    remove_submenu_page('themes.php','widgets.php'); 
}; 
+0

chúng có cần '.php' ở cuối không? –

Trả lời

17

Bạn đang gọi điện thoại mf_remove_menu_pages() trước $menu là thực sự thiết lập, hoặc có vẻ như trong những trường hợp khi $menu không bao giờ được thiết lập. Bạn cần đợi móc admin_menu để thực sự gọi remove_menu_page(). Nếu bạn đang thực hiện nó trên admin_init, thì bạn đang sử dụng móc sai, và đó là lý do tại sao nó borking trên các yêu cầu AJAX

Vì vậy, bạn cần phải thay đổi móc của bạn. Vui lòng thử với điều này:

add_action('admin_menu', 'mf_remove_menu_pages'); 
function mf_remove_menu_pages() { 
    remove_menu_page('link-manager.php'); 
    remove_menu_page('index.php'); 
    remove_menu_page('users.php'); 
    remove_menu_page('upload.php'); 
    remove_menu_page('tools.php'); 
    remove_menu_page('edit.php'); 
    remove_menu_page('edit-comments.php'); 
    remove_menu_page('post-new.php'); 
    remove_submenu_page('themes.php','themes.php'); 
    remove_submenu_page('themes.php','theme-editor.php'); 
    remove_submenu_page('themes.php','widgets.php'); 
} 

Hope this helps :)

+0

có, nó đã hoạt động! thx :) – Matanya

+0

Thx u rất nhiều, đã cứu tôi quá nhiều thời gian –

+0

@sabari bạn là thiên tài, nó hoạt động như sự quyến rũ: –

0

Trong các phiên bản mới hơn của WordPress, để loại bỏ một số trang con như theme-editor.php (hoặc trang con được giới thiệu bởi các plugin Jetpack), bạn phải liên kết với móc admin_menu với ưu tiên rất cao.

Ví dụ: để xóa theme-editor.php, bạn cần đặt mức độ ưu tiên là khoảng 120. Đối với các trang Jetpack, bạn cần mọi thứ xung quanh 2000.

add_action('admin_menu', 'mf_remove_menu_pages', 120); 
function mf_remove_menu_pages() { 
    remove_menu_page('link-manager.php'); 
    remove_menu_page('index.php'); 
    remove_menu_page('users.php'); 
    remove_menu_page('upload.php'); 
    remove_menu_page('tools.php'); 
    remove_menu_page('edit.php'); 
    remove_menu_page('edit-comments.php'); 
    remove_menu_page('post-new.php'); 
    remove_submenu_page('themes.php','themes.php'); 
    remove_submenu_page('themes.php','theme-editor.php'); 
    remove_submenu_page('themes.php','widgets.php'); 
} 

này cũng được ghi trong Wordpress Codex đồng Wordpress Support Forums.

Các vấn đề liên quan