在待处理项目的多个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的每个菜单项应用此代码?上面的代码仅适用于一个CPT。


链接中的答案很好地说明了这一点,您将根据情况临时存储待处理的项目,您拥有什么代码?
Wyck

也检查其他。但是,是的,请尝试尝试代码并在此处发布您自己的调查报告;)
brasofilo 2013年

@Wyck我已经更新了我的问题。
哈桑

Answers:


12

我通过迭代文章类型列表来完成这项工作,并$menu使用辅助功能(而不是手动遍历$menu对象)为文章类型定位正确的键。

待处理帖子气泡

函数参考: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;
}

哦,是的-可行!但是由于某种原因,当我单击相应的CPT菜单项时,气泡消失了,但是当我在wp-admin中的其他区域时,气泡又出现了。问题不解决了。
哈桑

在我的测试环境中,气泡不会消失,您到达那里的有趣错误……我喜欢这件事:)并将其包装在具有设置的插件中,以选择帖子类型和状态。
brasofilo

我怀疑是因为WPML。使用它来管理双语网站,每个帖子(cpt)基本上都有2个版本。这就是为什么我有时会看到气泡说2,实际上有1个待处理帖子;因为两个帖子都同步其状态。嘿,完成后让我知道有关插件的信息:D
Hassan
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.