问题描述
很像 「插件」 或 「评论」 菜单项在气泡中有如下更新和未修改的注释的通知,我想使用该气泡来显示具有”Pending review” 状态的 CPT 数量。怎么去做这个?
我发现 this thread,但不太确定从那里去哪里。
那会是整齐的因为我需要使用 user-generated 内容 (自定义帖子类型) 的网站上的此功能。每当用户提交新的 CPT 时,其状态设置为”Pending review”,我想让网站管理员快速浏览菜单,查看需要注意的项目数量。
编辑:我现在有这个代码:
// 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 。
最佳解决方案
我做了这个工作,通过一个帖子类型列表进行迭代,并使用辅助功能 (而不是手动迭代 $menu
对象) 来确定帖子类型的正确 $menu
密钥。
功能参考: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;
}
参考文献
注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。