wp_add_dashboard_widget()

wp_add_dashboard_widget ( $widget_id, $widget_name, $callback, $control_callback = null, $callback_args = null )

Thêm box widget vào trang dashboard.


Tham số đầu vào

$widget_id

(string) (không bắt buộc) Đặt tên id cho widget của bạn, thông thường địa chỉ id này là duy nhất và được dùng để làm mã định danh của widget.

$widget_name

(string) (không bắt buộc) Tiêu đề của widget, hiển thị ở trên cùng của box.

$callback

(string) (không bắt buộc) Tên của hàm hiển thị nội dung bên trong widget.

$control_callback

(string) (không bắt buộc) Tên của hàm điều khiển và quản lý thông tin của form trên widget.

$control_callback

(array) (không bắt buộc) Tham số truyền vào cho hàm gọi hiển thị nội dung trên widget. Tham số này sẽ nhận biến $post và tất cả giá trị mà người dùng nhập vào.


Nguồn

function wp_add_dashboard_widget( $widget_id, $widget_name, $callback, $control_callback = null, $callback_args = null ) {
    $screen = get_current_screen();
    global $wp_dashboard_control_callbacks;

    if ( $control_callback && current_user_can( 'edit_dashboard' ) && is_callable( $control_callback ) ) {
        $wp_dashboard_control_callbacks[$widget_id] = $control_callback;
        if ( isset( $_GET['edit'] ) && $widget_id == $_GET['edit'] ) {
            list($url) = explode( '#', add_query_arg( 'edit', false ), 2 );
            $widget_name .= ' <span class="postbox-title-action"><a href="' . esc_url( $url ) . '">' . __( 'Cancel' ) . '</a></span>';
            $callback = '_wp_dashboard_control_callback';
        } else {
            list($url) = explode( '#', add_query_arg( 'edit', $widget_id ), 2 );
            $widget_name .= ' <span class="postbox-title-action"><a href="' . esc_url( "$url#$widget_id" ) . '" class="edit-box open-box">' . __( 'Configure' ) . '</a></span>';
        }
    }

    $side_widgets = array( 'dashboard_quick_press', 'dashboard_primary' );

    $location = 'normal';
    if ( in_array($widget_id, $side_widgets) )
        $location = 'side';

    $priority = 'core';
    if ( 'dashboard_browser_nag' === $widget_id )
        $priority = 'high';

    add_meta_box( $widget_id, $widget_name, $callback, $screen, $location, $priority, $callback_args );
}

Ví dụ

function sb_theme_custom_add_dashboard_widgets() {
    wp_add_dashboard_widget('sb_theme_custom_draft_posts', 'Recent Draft Posts', 'sb_theme_custom_add_dashboard_draft_posts_widget_callback');
}
add_action('wp_dashboard_setup', 'sb_theme_custom_add_dashboard_widgets');

function sb_theme_custom_add_dashboard_draft_posts_widget_callback() {
    $args = array(
        'post_type' => 'any',
        'posts_per_page' => -1,
        'post_status' => 'draft'
    );
    $query = new WP_Query($args);
    if($query->have_posts()) {
        echo '<div class="rss-widget sb-draft-post-widget">';
        echo '<ul>';
        while($query->have_posts()) {
            $query->the_post();
            echo '<li>';
            echo '<a class="rsswidget draft-post" href="' . get_edit_post_link(get_the_ID()) . '">' . get_the_title() . '</a>';
            echo '</li>';
        }
        echo '</ul>';
        echo '</div>';
    }
}

Với ví dụ bên trên bạn sẽ thêm được một box hiển thị danh sách các bài viết đang soạn thảo vào trang dashboard. Tuy nhiên hàm này chỉ cho phép bạn thêm box vào cột bên trái của trang, nếu bạn muốn thêm một widget vào cột bên phải của trang dashboard thì bạn có thể sử dụng hàm bên dưới để thay thế.

add_meta_box('sb_theme_custom_draft_posts', 'Recent Draft Posts', 'sb_theme_custom_add_dashboard_draft_posts_widget_callback', 'dashboard', 'side', 'low');