Modificare i contenuti della sidebar di amministrazione per mostrare l'indicatore dei post in attesa
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:
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!
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.

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?

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... ;)

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

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...

@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.. :)

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');
