Bekleyen öğeler için birden çok CPT menüsüne güncelleme benzeri bildirim balonu yerleştirin


9

Eklentiler veya Yorumlar menü öğelerinin sırasıyla güncellemeler ve modifiye edilmemiş yorumlar için bir baloncuğun içinde bu sayı bildirimlerine sahip olması gibi, bu balonu "İncelenmeyi Bekliyor" durumuna sahip CPT'lerin sayısını görüntülemek için kullanmak istiyorum. Bunu nasıl yapabilirim?

Bu konuyu buldum , ama oradan nereye gideceğinden emin değilim.

Bu sahip olmak düzgün olurdu; kullanıcı tarafından oluşturulan içerik (özel yazı türleri) kullanan bir sitede bu özelliği gerekir. Kullanıcılar yeni bir CPT gönderdiğinde, durumu "İncelenmeyi Bekliyor" olarak ayarlandı ve site yöneticilerinin kaç öğenin dikkatine ihtiyacı olduğunu görmek için menüye hızla bakmasını istiyorum.

EDIT: Şimdi bu kodu var:

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

... ki bu biraz tutarsız da olsa işe yarıyor. Bazen gösteriliyor, bazen göstermiyor. Ayrıca, birden fazla CPT'm varsa, bu CPT'lerin her bir menü öğesi için bu kodu nasıl uygularım? Yukarıdaki kod yalnızca bir CPT ile çalışacaktır.


Bağlantınızdaki cevap oldukça iyi açıklıyor, bunun yerine bekleyen öğeleri durumunuz için geçici olarak saklarsınız, hangi kodunuz var?
Wyck

Bu kontrol diğerini de. Ancak, evet, lütfen, kodu denemeye çalışın ve burada kendi soruşturmanızı gönderin;)
brasofilo

@Wyck sorumu güncelledim.
Hassan

Yanıtlar:


12

Bir yazı türleri listesi üzerinden yinelenen ve $menuikincil bir işlev kullanarak ( $menunesne üzerinden el ile yineleme yerine) yazı türü için doğru anahtarı saptayarak bu işi yaptım .

bekleyen gönderiler kabarcıklar

İşlev referansı: get_post_typesve 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;
}

Oh, evet-- işe yarıyor! Bazı nedenlerden dolayı, karşılık gelen CPT menü öğesini tıklattığımda kabarcıklar kayboluyor, ancak wp-admin'deki diğer alanlarda olduğumda yeniden ortaya çıkıyorlar. Bununla uğraşmayacak, sorun çözüldü.
Hassan

Test ortamımda, kabarcıklar kaybolmuyor, orada var komik hata ... Bu şeyi beğendim :) ve yazı tiplerini ve durumunu seçmek için ayarlarla bir eklentinin içine sarar.
brasofilo

Bunun WPML nedeniyle olduğundan şüpheleniyorum. İki dilli web sitesini yönetmek için kullanıyorum ve aslında her yazının (cpt) 2 versiyonuna sahibim. Bu yüzden bazen kabarcığın aslında 1 bekleyen yazı olduğu 2 ifadesini görüyorum; çünkü her iki mesaj da durumlarını senkronize eder. Hey, işiniz bittiğinde eklenti hakkında bilgi verin: D
Hassan
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.