在多个待处理项目的CPTS菜单上放置类似更新的通知气泡

时间:2013-03-01 作者:Hassan

就像插件或注释菜单项将这些编号通知分别放在更新和未减额注释的气泡中一样,我想使用该气泡来显示具有“待定审阅”状态的CPT的数量。怎么做呢?

我找到了this thread, 但不太清楚接下来该怎么办。

这将是整洁的拥有;因为我需要在使用用户生成内容(自定义帖子类型)的网站上使用此功能。每当用户提交新的CPT时,其状态都设置为“待定审查”,我希望站点管理员快速浏览菜单,看看有多少项需要他们注意。

EDIT: 我现在有以下代码:

// 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的每个菜单项?上面的代码将只用于一个CPT。

1 个回复
最合适的回答,由SO网友:brasofilo 整理而成

我反复查看了一个帖子类型列表,并确定了正确的$menu 使用辅助函数(而不是手动迭代$menu 对象)。

pending posts bubbles

功能参考: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;
}

结束

相关推荐