Đặt tùy chọn màn hình quản trị mặc định & thứ tự Metabox


28

Tôi tuyệt vọng tìm kiếm một số cách (bất kỳ cách nào) để đặt "tùy chọn màn hình" mặc định và thứ tự metabox thông qua tệp tin.php. Có ai có bất kỳ trợ giúp họ có thể cung cấp ở đây?


Cập nhật 2014: Đối với những người chỉ cần sắp xếp lại các hộp meta, hãy xem câu trả lời của Nabil bên dưới .
rinogo

Câu trả lời:


23

Đặt thứ tự các hộp meta trên các trang chỉnh sửa bài

Bạn sẽ cần phải loại bỏ các hộp meta và thêm chúng một lần nữa theo thứ tự bạn muốn.

Để tắt hộp meta: (tùy chỉnh theo nhu cầu của bạn, hãy xem id metabox trong mã html để biết tên nào bạn nên sử dụng làm tham số đầu tiên của các hàm)

function my_remove_meta_boxes() {

    remove_meta_box('postcustom', 'post', 'core');

    remove_meta_box('commentsdiv', 'post', 'core');

    ...
}

add_action( 'admin_menu', 'my_remove_meta_boxes' );

Sau khi xóa chúng, bạn có thể sử dụng hàm add_meta_box để thêm chúng vào các vị trí mới: http://codex.wordpress.org/Function_Reference/add_meta_box . Thứ tự của các hộp meta phụ thuộc vào thứ tự bạn gọi hàm add_meta_box. Ví dụ: với đoạn mã sau, hộp meta nhận xét sẽ ở trước hộp meta trường tùy chỉnh.

function my_add_meta_boxes( $post_type, $post ) {
    if ( ('publish' == $post->post_status || 'private' == $post->post_status) && post_type_supports($post_type, 'comments') )
        add_meta_box('commentsdiv', __('Comments'), 'post_comment_meta_box', $post_type, 'normal', 'core');

    if ( post_type_supports($post_type, 'custom-fields') )
        add_meta_box('postcustom', __('Custom Fields'), 'post_custom_meta_box', $post_type, 'normal', 'core');

    ...
}

add_action( 'add_meta_boxes', 'my_add_meta_boxes' );

Bạn có thể muốn xem tệp wp-admin / edit-form-advanced.php

Đặt tiêu đề cột nào hiển thị trên trang danh sách bài đăng

Bạn cần sử dụng bộ lọc quản lý _ {$ post_type} _posts_columns. Ví dụ: đoạn mã sau sẽ xóa cột nhận xét.

function my_remove_columns( $posts_columns ) {
    unset( $posts_columns['comments'] );

    return $posts_columns;
}

add_filter( 'manage_post_posts_columns', 'my_remove_columns' );

Đặt kết quả mặc định sẽ được hiển thị trên trang danh sách bài đăng

Sử dụng các bộ lọc 'chỉnh sửa _ {$ post_type} _per_page' và 'edit_posts_per_page'.

function my_edit_post_per_page( $per_page, $post_type ) {

    $edit_per_page = 'edit_' . $post_type . '_per_page';
    $per_page = (int) get_user_option( $edit_per_page );
    if ( empty( $per_page ) || $per_page < 1 )
        $per_page = 1;

    return $per_page;
}

add_filter( 'edit_posts_per_page', 'my_edit_post_per_page' );

Để nhắm mục tiêu một loại bài cụ thể:

  • sử dụng add_filter( 'edit_{post type}_per_page', 'my_edit_post_per_page' );ví dụ add_filter( 'edit_post_per_page', 'my_edit_post_per_page' );cho bài viết, add_filter( 'edit_page_per_page', 'my_edit_post_per_page' );cho các trang.

  • hoặc sử dụng một điều kiện trong chức năng của bạn. ví dụ:

    chức năng my_edit_post_per_page ($ per_page, $ post_type) {

    if( $post_type == 'post' ) {
        $edit_per_page = 'edit_' . $post_type . '_per_page';
        $per_page = (int) get_user_option( $edit_per_page );
        if ( empty( $per_page ) || $per_page < 1 )
            $per_page = 1;
    }
    
    
    return $per_page;
    

Xin lỗi, có lẽ tôi đã không giải thích chính xác. Tôi đã đề cập đến các hộp meta trên trang chỉnh sửa bài đăng trong khu vực quản trị cũng như đặt số lượng bài đăng mặc định để hiển thị trên trang danh sách bài đăng của quản trị viên.
NetConstructor.com

1
Vì vậy, về mặt kỹ thuật đây không phải là một câu hỏi, nó thực sự là 2 câu hỏi?
Tom J Nowell

Tôi đã sửa đổi câu trả lời của tôi. Hãy cho tôi biết nếu như bạn cần thêm chị tiết.
sorich87

@ sorich87 cảm ơn bạn đã phản hồi của bạn tuy nhiên từ những gì tôi nhớ không có cách nào để xác định thứ tự chính xác của từng metabox hay ở đó? Có lẽ tôi nên cụ thể hơn một chút. Về cơ bản, tôi đang tìm kiếm các đoạn mã khác nhau cho phép tôi đặt trước các tùy chọn khác nhau cho tất cả người dùng mà không phải đăng nhập vào từng tài khoản. Ví dụ: đặt thứ tự chính xác của các hộp meta trên các trang chỉnh sửa bài đăng, đặt tiêu đề cột hiển thị trên trang danh sách bài đăng, đặt kết quả mặc định sẽ được hiển thị trên trang danh sách bài đăng ... những thứ tương tự. Cảm ơn trước.
NetConstructor.com

Tôi đã sửa đổi câu trả lời của tôi.
sorich87

9

Trong ví dụ sau, thay thế {CPT}với tên bài kiểu như post, page, book, event, imaginary, foobar... Vì vậy, nếu bạn có một loại bài đặt tên event, bạn sẽ cần phải thêm một bộ lọc cho get_user_option_meta-box-order_event.

add_filter( 'get_user_option_meta-box-order_{CPT}', 'metabox_order' );
function metabox_order( $order ) {
    return array(
        'normal' => join( 
            ",", 
            array(       // vvv  Arrange here as you desire
                'customdiv-{CPT}',
                'authordiv',
                'slugdiv',
            )
        ),
    );
}

Ghi chú:

  • Cùng với normal, bạn cũng có thể có sideadvanced
  • Các giá trị là id id được phân tách bằng dấu phẩy, bạn có thể lấy bằng cách xem mã nguồn trang hoặc bạn có thể đoán
  • Bất kỳ metabox nào tồn tại không được bao gồm trong đơn hàng tùy chỉnh của bạn sẽ được thêm tự động vào cuối danh sách của bạn.

1
Tôi đã hơi bối rối bởi {CPT}danh pháp; để làm rõ, nếu bạn có một loại bài đăng có tên event, bạn sẽ cần thêm bộ lọc cho get_user_option_meta-box-order_event.
rinogo
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.