Inserisci un fumetto di notifica simile a un aggiornamento su più menu CPT per gli elementi in sospeso


9

Proprio come le voci di menu Plugin o Commenti hanno queste notifiche numeriche in una bolla rispettivamente per gli aggiornamenti e i commenti non moderati, mi piacerebbe usare quella bolla per visualizzare il numero di CPT che hanno lo stato "In attesa di revisione". Come fare per farlo?

Ho trovato questo thread , ma non sono sicuro di dove andare da lì.

Sarebbe bello avere; poiché ho bisogno di questa funzione su un sito che utilizza contenuti generati dall'utente (tipi di post personalizzati). Ogni volta che gli utenti inviano un nuovo CPT, il loro stato viene impostato su "In attesa di revisione" e desidero che gli amministratori del sito guardino rapidamente il menu per vedere quanti elementi richiedono la loro attenzione.

EDIT: ora ho questo codice:

// 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;
            }
        }
    }
}

... che funziona, anche se un po 'incoerente. A volte visualizzato, a volte no. Inoltre, se ho più CPT, come posso applicare questo codice per ciascuna voce di menu di tali CPT? Il codice sopra funzionerà con un solo CPT.


La risposta nel tuo link lo spiega abbastanza bene, invece di archiviare gli articoli in sospeso in un transitorio per il tuo caso, che codice hai?
Wyck,

Controllare questo altro anche. Ma, sì, per favore, prova a sperimentare il codice e pubblica qui la tua indagine;)
brasofilo

@Wyck ho aggiornato la mia domanda.
Hassan,

Risposte:


12

Ho fatto questo lavoro ripetendo un elenco di tipi di post e individuando la $menuchiave corretta per il tipo di post usando una funzione secondaria (invece di iterare manualmente l' $menuoggetto).

bolle in sospeso

Riferimento funzione: get_post_typese 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;
}

Oh, sì-- funziona! Per qualche ragione, le bolle scompaiono quando faccio clic sulla voce di menu CPT corrispondente, ma riappaiono quando sono su altre aree in wp-admin. Non mi preoccuperò, problema risolto.
Hassan,

Nel mio ambiente di test, le bolle non scompaiono, bug divertente che ci sei arrivato ... Mi piace questa cosa :) e la avvolgerà all'interno di un plugin con impostazioni per selezionare i tipi di post e lo stato.
brasofilo,

Sospetto sia a causa di WPML. Usandolo per gestire il sito web bilingue, e ho essenzialmente 2 versioni di ogni post (cpt). Ecco perché a volte vedo la bolla che dice 2 dove in realtà c'è 1 post in sospeso; perché entrambi i post sincronizzano i loro stati. Ehi, fammi sapere del plugin quando hai finito: D
Hassan
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.