Modificare i contenuti della sidebar di amministrazione per mostrare l'indicatore dei post in attesa

11 nov 2010, 02:56:40
Visualizzazioni: 4.2K
Voti: 4

Sto cercando di far apparire un contatore nella sidebar di amministrazione per i post in attesa, simile alla bolla che appare per i commenti in attesa:

Bolla dei commenti in attesa

Offtopic: Sono l'unico a pensare che questo dovrebbe essere un comportamento standard? Dove potrei suggerire questa funzionalità?

Comunque, ho trovato questo plugin, ma ho notato che non funziona sempre. A volte il notificatore appare su Pagine o altre voci.

Il codice che utilizza per aggiungere il contatore dei post in attesa è più o meno questo:

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

Quindi, chiaramente il problema è il 5 hard-codato, ma come posso modificarlo in modo che punti sempre ai Post?

Sarei felice di commitare questa modifica al plugin se troviamo una soluzione.

Grazie!

3
Commenti

$menu[5] è hard-codato come Articoli in wp-admin/menu.php, almeno nella versione 3.0. Quando vedi la notifica apparire in un'area diversa? Riesci a restringere la configurazione in cui vedi accadere questo?

goldenapples goldenapples
11 nov 2010 06:17:54

C'è un filtro specifico disponibile per ordinare le voci di menu, alcuni plugin si agganciano a quel filtro e spostano le voci, il che risulta in 'articoli' che non hanno più la chiave 5..

t31os t31os
11 nov 2010 11:07:13

Per chiunque fosse interessato a questa funzionalità, ho inviato un ticket al Trac di WP. Sembra che sia stato pianificato per una versione futura :) - http://core.trac.wordpress.org/ticket/15406

Ignacio Ignacio
14 nov 2010 23:09:03
Tutte le risposte alla domanda 3
4

come seguito alla risposta di t31os, ecco il codice completo necessario (combinando i contenuti del plugin menzionato con la correzione di t31os), con modifiche per gestire anche i custom post type:

add_filter( 'add_menu_classes', 'mostra_numero_in_attesa');
function mostra_numero_in_attesa( $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;

    // costruisce la stringa da cercare nell'array $menu
    if ($type == 'post') {
        $menu_str = 'edit.php';
    } else {
        $menu_str = 'edit.php?post_type=' . $type;
    }

    // scorre gli elementi del menu, trova la corrispondenza e aggiunge l'indicatore
    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;
}

inserisci questo codice in functions.php, non c'è bisogno del plugin.

11 nov 2010 19:08:01
Commenti

Wow, grazie. Ho già contattato il creatore del plugin per poter apportare queste modifiche nel caso qualcuno avesse bisogno di questo comportamento.

Quindi, qualcuno sa perché non funziona così di default?

Ignacio Ignacio
11 nov 2010 19:16:23

Non avevo nemmeno controllato il plugin, grazie per il follow-up. Il codice che hai fornito costituisce una bella e semplice funzione che altri utenti possono ora copiare se desiderano avere questa funzionalità... bel lavoro... ;)

t31os t31os
13 nov 2010 11:40:50

D: La funzione non sta impostando la variabile $type, rendendo di fatto la condizione if ($type == 'post') { inutile?

t31os t31os
20 nov 2010 13:18:47

sì, questo esempio è un po' strano, poiché l'ho adattato da uno in cui eseguo il polling di tutti i tipi di post nel sistema e li passo attraverso la funzione (qui ho dovuto solo dichiarare le variabili desiderate affinché l'esempio funzionasse in modo autonomo). Lo scopo del condizionale è costruire l'URL appropriato per tutto tranne che per il tipo di post principale...

somatic somatic
22 nov 2010 22:21:21
1

@ign

Sostituisci la riga di codice che hai postato con la seguente..

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;

..questo dovrebbe evitare la necessità di conoscere la chiave specifica.. (fammi sapere se ci sono problemi)..

Spero che ti sia d'aiuto.. :)

11 nov 2010 15:05:41
Commenti

Prego... ;) E un ulteriore grazie a Somatic per le informazioni di follow-up ..

t31os t31os
13 nov 2010 11:37:48
0

Ho apportato una leggera modifica al post di somatic che consente di gestire più tipi di post:

// Aggiunge il numero di post in attesa ai tipi di post nel menu di amministrazione
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');
5 lug 2013 15:36:13