Masukkan gelembung pemberitahuan seperti pembaruan pada beberapa menu CPT untuk item yang menunggu keputusan

9

Sama seperti bagaimana item menu Plugin atau Komentar memiliki notifikasi nomor ini dalam gelembung untuk pembaruan dan komentar yang tidak dimoderasi, saya ingin menggunakan gelembung itu untuk menampilkan jumlah CPT yang memiliki status "Pending review". Bagaimana cara melakukannya?

Saya telah menemukan utas ini , tetapi tidak yakin ke mana harus pergi dari sana.

Itu akan rapi untuk dimiliki; karena saya memerlukan fitur ini di situs yang menggunakan konten buatan pengguna (tipe posting khusus). Setiap kali pengguna mengirimkan CPT baru, statusnya ditetapkan ke "Tinjauan tertunda", dan saya ingin admin situs untuk cepat melirik menu untuk melihat berapa banyak item yang perlu perhatian mereka.

EDIT: Saya sekarang memiliki kode ini:

// 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;
            }
        }
    }
}

... yang berfungsi, meskipun agak tidak konsisten. Terkadang ditampilkan, kadang tidak. Selain itu, jika saya memiliki beberapa CPT, bagaimana cara menerapkan kode ini untuk setiap item menu CPT tersebut? Kode di atas hanya akan berfungsi dengan satu CPT.

Hassan
sumber
Jawaban di tautan Anda menjelaskannya dengan cukup baik, Anda malah akan menyimpan item yang tertunda dalam transient untuk kasus Anda, kode apa yang Anda miliki?
Wyck
Periksa ini satu lainnya juga. Tapi, ya, tolong, cobalah bereksperimen dengan kode dan memposting investigasi Anda sendiri di sini;)
brasofilo
@ Wah, saya sudah memperbarui pertanyaan saya.
Hassan

Jawaban:

12

Saya membuat pekerjaan ini berulang melalui daftar jenis posting, dan menunjukkan dengan tepat $menukunci untuk jenis posting menggunakan fungsi sekunder (bukan secara manual mengulangi melalui $menuobjek).

gelembung posting yang menunggu keputusan

Referensi fungsi: get_post_typesdan wp_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;
}
brasofilo
sumber
Oh, ya-- itu berhasil! Untuk beberapa alasan, gelembung-gelembung itu menghilang ketika saya mengklik item menu CPT yang sesuai, tetapi mereka muncul kembali ketika saya berada di area lain di wp-admin. Tidak akan repot dengan itu, masalah terpecahkan.
Hassan
Di lingkungan pengujian saya, gelembung tidak hilang, bug lucu yang Anda dapatkan di sana ... Saya suka hal ini :) dan akan membungkusnya di dalam plugin dengan pengaturan untuk memilih jenis dan status posting.
brasofilo
Saya curiga itu karena WPML. Menggunakannya untuk mengelola situs web bilingual, dan saya pada dasarnya memiliki 2 versi dari setiap posting (cpt). Itu sebabnya saya terkadang melihat gelembung mengatakan 2 di mana sebenarnya ada 1 posting yang menunggu keputusan; karena kedua pos menyinkronkan status mereka. Hai, beri tahu saya tentang plugin setelah selesai: D
Hassan