Изменение содержимого боковой панели администратора для отображения индикатора ожидающих сообщений


Я пытался сделать так, чтобы количество ожидающих сообщений отображалось на боковой панели администратора для ожидающих сообщений, например, маленький пузырь, который появляется для ожидающих комментариев:

Comments pending bubble

Оффтопик: Я единственный, кто считает, что это должно быть основным поведением? Где я должен предложить эту функцию?

Так или иначе, я нашел этот плагин , но я заметил, что он не всегда работал. Иногда уведомитель появляется на Страницах или другом элементе.

Код, который он использует чтобы добавить количество ожидающих, выполните примерно следующее:

$menu[5][0] .= " <span class='update-plugins count-$pending_count'><span class='plugin-count'>" . number_format_i18n($pending_count) . '</span></span>';

Итак, очевидно, что проблема в жестко закодированном 5, но как я могу обновить его, чтобы он всегда указывал на сообщения?

Я буду рад внести это изменение в плагин, если мы знаем ответ.

Спасибо!

Author: Nacho, 2010-11-11

3 answers

@ игн

Замените строку кода, которую вы опубликовали, следующей..

foreach( $menu as $menu_key => $menu_data ) :
    if( 'edit.php' != $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>';
endforeach;

..что следует избегать необходимости знать конкретный ключ.. (дайте мне знать, если возникнут какие-либо проблемы)..

Надеюсь, это поможет..:)

 4
Author: t31os, 2010-11-11 15:05:41

В дополнение к ответу t31os, вот необходимый полный код (объединяющий содержимое упомянутого плагина с исправлением t31os), с изменениями для обработки пользовательских типов сообщений:

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;

    // build string to match in $menu array
    if ($type == 'post') {
        $menu_str = 'edit.php';
    } else {
        $menu_str = 'edit.php?post_type=' . $type;
    }

    // loop through $menu items, find match, add indicator
    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;
}

Поместите это в functions.php, нет необходимости в плагине.

 7
Author: somatic, 2010-11-11 19:08:01

Я внес небольшое изменение в сообщение соматика, которое допускает несколько типов сообщений:

// Add pending numbers to post types on admin menu
function show_pending_number($menu) {    
    $types = array("post", "page", "custom-post-type");
    $status = "pending";
    foreach($types as $type) {
        $num_posts = wp_count_posts($type, 'readable');
        $pending_count = 0;
        if (!empty($num_posts->$status)) $pending_count = $num_posts->$status;

        if ($type == 'post') {
            $menu_str = 'edit.php';
        } else {
            $menu_str = 'edit.php?post_type=' . $type;
        }

        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;
}
add_filter('add_menu_classes', 'show_pending_number');
 2
Author: Davs Howard, 2013-07-05 15:36:13