Nhận danh sách các hộp Meta đã đăng ký và xóa chúng


9

Có chức năng nào để nhận danh sách Meta Box đã đăng ký và xóa chúng không? Tôi thấy có một phương pháp để thêm và xóa.

http://codex.wordpress.org/Function_Reference/remove_meta_box

http://codex.wordpress.org/Function_Reference/add_meta_box


1
Vui lòng khôi phục các thay đổi của bạn và đặt câu hỏi mới thay vì chỉ thêm vào một câu hỏi hiện có. Nhận tùy chọn màn hình rất khác so với nhận hộp meta.
EAMann

Câu trả lời:


9

Không thực sự, nhưng bạn có thể xác định của riêng bạn. Tất cả các hộp meta được lưu trữ trong biến toàn cục $wp_meta_boxeslà một mảng đa chiều.

function get_meta_boxes( $screen = null, $context = 'advanced' ) {
    global $wp_meta_boxes;

    if ( empty( $screen ) )
        $screen = get_current_screen();
    elseif ( is_string( $screen ) )
        $screen = convert_to_screen( $screen );

    $page = $screen->id;

    return $wp_meta_boxes[$page][$context];          
}

Mảng này sẽ hiển thị tất cả các hộp meta được đăng ký cho một màn hình cụ thể và bối cảnh cụ thể. Bạn cũng có thể đi sâu hơn nữa vì mảng này cũng là một mảng nhiều chiều, phân tách các hộp meta theo mức độ ưu tiên và id.


Vì vậy, giả sử bạn muốn có một mảng chứa tất cả các hộp meta có mức độ ưu tiên "bình thường" trên Bảng điều khiển quản trị viên. Bạn sẽ gọi như sau:

$dashboard_boxes = get_meta_boxes( 'dashboard', 'normal' );

Điều này giống hệt với mảng toàn cầu$wp_meta_boxes['dashboard']['normal'] và nó cũng là một mảng đa chiều.

Loại bỏ các hộp meta lõi

Giả sử bạn muốn xóa một loạt các hộp meta. Chức năng trên có thể được điều chỉnh một chút để tận dụng rằng:

function remove_meta_boxes( $screen = null, $context = 'advanced', $priority = 'default', $id ) {
    global $wp_meta_boxes;

    if ( empty( $screen ) )
        $screen = get_current_screen();
    elseif ( is_string( $screen ) )
        $screen = convert_to_screen( $screen );

    $page = $screen->id;

    unset( $wp_meta_boxes[$page][$context][$priority][$id] );
}

Nếu bạn muốn xóa, giả sử, tiện ích liên kết đến từ Bảng điều khiển, bạn sẽ gọi:

remove_meta_boxes( 'dashboard', 'normal', 'core', 'dashboard_incoming_links' );

này, tôi biết đã lâu rồi bạn mới trả lời nhưng bạn có thể xem câu hỏi của tôi về vấn đề chính xác này không? Việc globalnày không hiệu quả với tôi! Cảm ơn. wordpress.stackexchange.com/questions/318834/ Cách
middlelady

1

Trên Bảng điều khiển WordPress, có các hộp meta được hiển thị. Có một cột bình thường, và một cột bên.

Tôi có thể lấy danh sách các hộp meta đã đăng ký và xóa chúng khỏi bảng điều khiển bằng cách sử dụng mã sau đây:

// Remove some non-sense meta boxes
function remove_dashboard_meta_boxes(){
    global $wp_meta_boxes;
    // Dashboard core widgets :: Left Column
    unset($wp_meta_boxes['dashboard']['normal']['core']['dashboard_incoming_links']);
    unset($wp_meta_boxes['dashboard']['normal']['core']['dashboard_recent_comments']);
    unset($wp_meta_boxes['dashboard']['normal']['core']['dashboard_plugins']);
    unset($wp_meta_boxes['dashboard']['normal']['core']['dashboard_right_now']);
    // Additional dashboard core widgets :: Right Column
    unset($wp_meta_boxes['dashboard']['side']['core']['dashboard_recent_drafts']);
    unset($wp_meta_boxes['dashboard']['side']['core']['dashboard_quick_press']);
    unset($wp_meta_boxes['dashboard']['side']['core']['dashboard_primary']);
    unset($wp_meta_boxes['dashboard']['side']['core']['dashboard_secondary']);
    // Remove the welcome panel
    update_user_meta(get_current_user_id(), 'show_welcome_panel', false);
}
add_action('wp_dashboard_setup', 'remove_dashboard_meta_boxes');

Chỉ cần sử dụng print_r($wp_meta_boxes);để xem danh sách các hộp meta đã đăng ký.


1
Mã này không cung cấp danh sách các hộp meta có sẵn.
fuxia

@toscho Nó làm nếu bạnprint_r($wp_meta_boxes);
Michael Ecklund
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.