在為 WordPress開發(fā)插件的時(shí)候,有時(shí)候我們需要添加一些消息提醒到后臺(tái)菜單,類似主題插件升級(jí)或待審核評(píng)論提醒,可是 WordPress 并沒有我們提供這樣的接口,研究了一些已經(jīng)實(shí)現(xiàn)了類似功能的插件,在網(wǎng)上研究了很久,發(fā)現(xiàn)實(shí)現(xiàn)這個(gè)功能的方法還不止一個(gè)。
通過添加提醒消息到?add_menu_classes filter 的方法
這種方法最為靈活,可以在開發(fā) WordPress主題的時(shí)候,添加提醒消息到已有的菜單項(xiàng)目上。
add_filter( 'add_menu_classes', 'show_pending_number');
function show_pending_number( $menu ) {
$type = "animals";
$status = "pending";
$num_posts = wp_count_posts( $type, 'readable' );
$pending_count = 0;
if ( !empty($num_posts->$status) )
$pending_count = $num_posts->$status;
// 需要添加提醒的菜單項(xiàng)目
if ($type == 'post') {
$menu_str = 'edit.php';
// 支持自定義文章類型
} else {
$menu_str = 'edit.php?post_type=' . $type;
}
// 遍歷菜單,找到需要添加的菜單項(xiàng)目,添加提醒
foreach( $menu as $menu_key => $menu_data ) {
if( $menu_str != $menu_data[2] )
continue;
$menu[$menu_key][0] .= " <span class='update-plugins count-$pending_count'><span class='plugin-count'>" . number_format_i18n($pending_count) . '</span></span>';
}
return $menu;
}
AnsPress 的實(shí)現(xiàn)方法
這種實(shí)現(xiàn)方法是通過直接添加提醒消息字符串到菜單名稱標(biāo)簽后面的方法實(shí)現(xiàn)的,比較直接,適合需要添加提醒消息到新創(chuàng)建菜單的時(shí)候使用。
add_menu_page( 'AnsPress', 'AnsPress'.$counts['total'], 'delete_pages', 'anspress', array( $this, 'dashboard_page' ), ANSPRESS_URL . '/assets/answer.png', $pos );
WooCommerce的實(shí)現(xiàn)方法
這種方法和上面 AnsPress 的方法類似,也是直接把提醒消息添加到了菜單名稱標(biāo)簽后面。
if ( apply_filters( 'woocommerce_include_processing_order_count_in_menu', true ) && current_user_can( 'manage_woocommerce' ) && ( $order_count = wc_processing_order_count() ) ) {
foreach ( $submenu['woocommerce'] as $key => $menu_item ) {
if ( 0 === strpos( $menu_item[0], _x( 'Orders', 'Admin menu name', 'woocommerce' ) ) ) {
$submenu['woocommerce'][ $key ][0] .= ' ' . number_format_i18n( $order_count ) . '';
break;
}
}
}
上面代碼的原理非常簡(jiǎn)單,就是獲取一個(gè)數(shù)量,然后加上一些顯示起泡效果的前端代碼,然后添加到菜單里面。弄清楚了上面的原理,我們會(huì)發(fā)現(xiàn)文中演示的方法,除了添加待審核文章的提醒,同樣也可以添加其他類型的提醒,比如待處理用戶提交的信息的提醒。


