保留中のアイテムの複数のCPTメニューに更新のような通知バブルを配置する


9

[プラグイン]または[コメント]メニュー項目でこれらの番号通知がそれぞれ更新およびモデレートされていないコメントのバブルにあるのと同じように、そのバブルを使用して、「保留中のレビュー」ステータスのCPTの数を表示します。それをどうやってやるの?

私はこのスレッドを見つけましたが、そこからどこに行くべきかはよくわかりません。

それはきちんとしているでしょう。ユーザーが作成したコンテンツ(カスタム投稿タイプ)を使用するサイトでこの機能が必要になるためです。ユーザーが新しいCPTを送信するときはいつでも、そのステータスは「審査待ち」に設定されています。サイト管理者がメニューを一目見て、注意が必要なアイテムの数を確認してください。

編集:私は今このコードを持っています:

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

...少し矛盾していますが、機能します。表示される場合もあれば、表示されない場合もあります。また、複数のCPTがある場合、それらのCPTのすべてのメニュー項目にこのコードを適用するにはどうすればよいですか?上記のコードは1つのCPTでのみ機能します。


あなたのリンクの答えはそれをかなりよく説明しています、あなたは代わりにあなたのケースのために一時的なものに保留中のアイテムを保存するでしょう、あなたはどんなコードを持っていますか?
Wyck

こちらチェック。しかし、はい、どうぞ、コードを試してみて、ここに独自の調査を投稿してください;)
brasofilo

@Wyck質問を更新しました。
Hassan

回答:


12

この作業を投稿タイプのリスト$menuを反復処理し、($menuオブジェクトを手動で反復処理する代わりに)2次関数を使用して投稿タイプの正しいキーを特定しました。

保留中の投稿のバブル

関数リファレンス:get_post_typesおよび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;
}

ああ、そうです-うまくいきます!何らかの理由で、対応するCPTメニュー項目をクリックするとバブルが消えますが、wp-adminの他の領域にいるとバブルが再び表示されます。気にしないで、問題は解決しました。
Hassan

私のテスト環境では、泡は消えません、面白いバグがそこにあります...私はこれが好きです:)投稿タイプとステータスを選択するための設定でプラグイン内にラップします。
ブラソフィロ2013

WPMLが原因だと思います。バイリンガルのウェブサイトを管理するためにそれを使用して、私はすべての投稿(cpt)の本質的に2つのバージョンを持っています。そのため、実際には保留中の投稿が1つある2というバブルがときどき表示されます。両方の投稿がステータスを同期するためです。完了したら、プラグインについてお知らせください:D
Hassan
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.