Đặt bong bóng thông báo giống như cập nhật trên nhiều menu CPT cho các mục đang chờ xử lý


9

Giống như cách các mục trình đơn hoặc Bình luận có các thông báo số này trong một bong bóng để cập nhật và nhận xét không được kiểm soát, tôi muốn sử dụng bong bóng đó để hiển thị số lượng CPT có trạng thái "Đang chờ xem xét". Làm thế nào để đi về làm điều đó?

Tôi đã tìm thấy chủ đề này , nhưng không chắc chắn nơi để đi từ đó.

Đó sẽ là gọn gàng để có; vì tôi cần tính năng này trên một trang web sử dụng nội dung do người dùng tạo (loại bài đăng tùy chỉnh). Bất cứ khi nào người dùng gửi CPT mới, trạng thái của nó được đặt thành "Đang chờ xem xét" và tôi muốn quản trị viên trang web nhanh chóng lướt qua menu để xem có bao nhiêu mục cần sự chú ý của họ.

EDIT: Bây giờ tôi có mã này:

// buuble notifications for custom posts with status pending
add_action( 'admin_menu', 'add_pending_bubble' );

function add_pending_bubble() {
    global $menu;

    $custom_post_count = wp_count_posts('custom-post-name');
    $custom_post_pending_count = $custom_post_count->pending;

    if ( $custom_post_pending_count ) {
        foreach ( $menu as $key => $value ) {
            if ( $menu[$key][2] == 'edit.php?post_type=custom-post-name' ) {
                $menu[$key][0] .= ' <span class="update-plugins count-' . $custom_post_pending_count . '"><span class="plugin-count">' . $custom_post_pending_count . '</span></span>';
                return;
            }
        }
    }
}

... mà không hoạt động, mặc dù một chút không nhất quán. Đôi khi hiển thị, đôi khi không. Ngoài ra, nếu tôi có nhiều CPT, làm cách nào để áp dụng mã này cho mỗi và mọi mục menu của các CPT đó? Mã trên sẽ hoạt động chỉ với một CPT.


Câu trả lời trong liên kết của bạn giải thích nó khá tốt, thay vào đó bạn sẽ lưu trữ các mục đang chờ xử lý trong trường hợp tạm thời cho trường hợp của bạn, bạn có mã gì?
Wyck

Kiểm tra cái khác này quá. Nhưng, vâng, làm ơn, hãy thử trải nghiệm mã và đăng cuộc điều tra của riêng bạn ở đây;)
brasofilo

@Wyck Tôi đã cập nhật câu hỏi của tôi.
Hassan

Câu trả lời:


12

Tôi đã thực hiện công việc này lặp lại thông qua một danh sách các loại bài đăng và xác định chính xác $menukhóa cho loại bài đăng bằng cách sử dụng một chức năng phụ (thay vì lặp lại thủ công thông qua $menuđối tượng).

bài viết đang chờ xử lý

Chức năng tham khảo: get_post_typeswp_count_posts.

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

function pending_posts_bubble_wpse_89028() 
{
    global $menu;

    // Get all post types and remove Attachments from the list
    // Add '_builtin' => false to exclude Posts and Pages
    $args = array( 'public' => true ); 
    $post_types = get_post_types( $args );
    unset( $post_types['attachment'] );

    foreach( $post_types as $pt )
    {
        // Count posts
        $cpt_count = wp_count_posts( $pt );

        if ( $cpt_count->pending ) 
        {
            // Menu link suffix, Post is different from the rest
            $suffix = ( 'post' == $pt ) ? '' : "?post_type=$pt";

            // Locate the key of 
            $key = recursive_array_search_php_91365( "edit.php$suffix", $menu );

            // Not found, just in case 
            if( !$key )
                return;

            // Modify menu item
            $menu[$key][0] .= sprintf(
                '<span class="update-plugins count-%1$s" style="background-color:white;color:black"><span class="plugin-count">%1$s</span></span>',
                $cpt_count->pending 
            );
        }
    }
}

// http://www.php.net/manual/en/function.array-search.php#91365
function recursive_array_search_php_91365( $needle, $haystack ) 
{
    foreach( $haystack as $key => $value ) 
    {
        $current_key = $key;
        if( 
            $needle === $value 
            OR ( 
                is_array( $value )
                && recursive_array_search_php_91365( $needle, $value ) !== false 
            )
        ) 
        {
            return $current_key;
        }
    }
    return false;
}

Ồ, vâng-- nó hoạt động! Vì một số lý do, các bong bóng biến mất khi tôi nhấp vào mục menu CPT tương ứng, nhưng chúng xuất hiện lại khi tôi ở các khu vực khác trong wp-admin. Không bận tâm với điều đó, vấn đề được giải quyết.
Hassan

Trong môi trường thử nghiệm của tôi, các bong bóng không biến mất, lỗi vui nhộn bạn gặp ở đó ... Tôi thích thứ này :) và sẽ bọc nó trong một plugin với các cài đặt để chọn loại bài đăng và trạng thái.
brasofilo

Tôi nghi ngờ đó là vì WPML. Sử dụng nó để quản lý trang web song ngữ và về cơ bản tôi có 2 phiên bản cho mỗi bài đăng (cpt). Đó là lý do tại sao đôi khi tôi thấy bong bóng nói 2 nơi thực sự có 1 bài đang chờ xử lý; bởi vì cả hai bài viết đồng bộ hóa trạng thái của họ. Xin chào, hãy cho tôi biết về plugin khi bạn hoàn thành: D
Hassan
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.