Visualizzazione dei tipi di posta personalizzati nella Meta Box "A colpo d'occhio"


8

Ho trovato il seguente frammento che mostra il numero di tipi di post personalizzati pubblicati nel widget At A Glance di Dashboard, in questo modo:

A prima vista

C'è un modo per trasformare quel testo "81 Wrestlers" in un collegamento all'elenco dei tipi di post. Ecco il codice:

add_filter( 'dashboard_glance_items', 'custom_glance_items', 10, 1 );
function custom_glance_items( $items = array() ) {
    $post_types = array( 'wrestler' );
    foreach( $post_types as $type ) {
        if( ! post_type_exists( $type ) ) continue;
        $num_posts = wp_count_posts( $type );
        if( $num_posts ) {
            $published = intval( $num_posts->publish );
            $post_type = get_post_type_object( $type );
            $text = _n( '%s ' . $post_type->labels->singular_name, '%s ' . $post_type->labels->name, $published, 'your_textdomain' );
            $text = sprintf( $text, number_format_i18n( $published ) );
            if ( current_user_can( $post_type->cap->edit_posts ) ) {
                $items[] = sprintf( '%2$s', $type, $text ) . "\n";
            } else {
                $items[] = sprintf( '%2$s', $type, $text ) . "\n";
            }
        }
    }
    return $items;
}

Risposte:


8

Ecco la funzione che utilizzo per visualizzare CPT nel widget "A colpo d'occhio"

add_action( 'dashboard_glance_items', 'cpad_at_glance_content_table_end' );
function cpad_at_glance_content_table_end() {
    $args = array(
        'public' => true,
        '_builtin' => false
    );
    $output = 'object';
    $operator = 'and';

    $post_types = get_post_types( $args, $output, $operator );
    foreach ( $post_types as $post_type ) {
        $num_posts = wp_count_posts( $post_type->name );
        $num = number_format_i18n( $num_posts->publish );
        $text = _n( $post_type->labels->singular_name, $post_type->labels->name, intval( $num_posts->publish ) );
        if ( current_user_can( 'edit_posts' ) ) {
            $output = '<a href="edit.php?post_type=' . $post_type->name . '">' . $num . ' ' . $text . '</a>';
            echo '<li class="post-count ' . $post_type->name . '-count">' . $output . '</li>';
        }
    }
}

Ciò rende il testo selezionabile come collegamento. Spero che sia di aiuto


Ma mostra tutti i tipi di post personalizzati e voglio solo visualizzare il tipo di post "Wrestler".
Hardeep Asrani,

Ho modificato il tuo codice e l'ho mescolato con il mio e ha funzionato :) Grazie!
Hardeep Asrani,

@Hardeep Asrani felice di poterti aiutare. Sarebbe bello se potessi aggiungere il tuo codice come risposta.
Pieter Goosen,

@PieterGoosen Probabilmente un colpo lungo, ma sto cercando di ottenere la casella "A colpo d'occhio" per visualizzare il Dashicon giusto ( developer.wordpress.org/resource/dashicons ). Qualche idea?
user2019515

Questo mi ha davvero aiutato ... Ora hai idea di come posso visualizzarli con le loro icone? Sto provando ad aggiungere la classe dashicon nell'output ... $output = '<a class="' . $post_type->menu_icon . '" href="edit.php?post_type=' . $post_type->name . '">' . $num . ' ' . $text . '</a>';... ma ci sono stili che la sovrascrivono, quindi ho provato ad aggiungere questo stile: #dashboard_right_now li a::before, #dashboard_right_now li > span::before { content: initial; }... ma che sovrascrive lo stile della classe dashicon. Si prega di avvisare.
juliusbangert,

2

Ok, quindi ho usato questo codice per visualizzare solo il tipo di post "wrestler" e ha funzionato. Ho mescolato il mio e il codice di Pieter Goosen per farlo uscire:

add_filter( 'dashboard_glance_items', 'custom_glance_items', 10, 1 );
function custom_glance_items( $items = array() ) {
    $post_types = array( 'wrestler' );
    foreach( $post_types as $type ) {
        if( ! post_type_exists( $type ) ) continue;
        $num_posts = wp_count_posts( $type );
        if( $num_posts ) {
            $published = intval( $num_posts->publish );
            $post_type = get_post_type_object( $type );
            $text = _n( '%s ' . $post_type->labels->singular_name, '%s ' . $post_type->labels->name, $published, 'your_textdomain' );
            $text = sprintf( $text, number_format_i18n( $published ) );
            if ( current_user_can( $post_type->cap->edit_posts ) ) {
            $output = '<a href="edit.php?post_type=' . $post_type->name . '">' . $text . '</a>';
                echo '<li class="post-count ' . $post_type->name . '-count">' . $output . '</li>';
            } else {
            $output = '<span>' . $text . '</span>';
                echo '<li class="post-count ' . $post_type->name . '-count">' . $output . '</li>';
            }
        }
    }
    return $items;
}

0

Nel codice che hai pubblicato non riesco davvero a capire qual è il punto di:

if ( current_user_can( $post_type->cap->edit_posts ) ) {
  $items[] = sprintf( '%2$s', $type, $text ) . "\n";
} else {
  $items[] = sprintf( '%2$s', $type, $text ) . "\n";
}

IE se l'utente corrente può modificare il tipo di post fare qualcosa, altrimenti fare la stessa cosa ...

Suppongo che tu voglia mostrare il link all'elenco dei post se l'utente corrente può modificare il tipo di post (proprio come WordPress fa per pagine e post).

In tal caso il tuo codice diventa:

function custom_glance_items( $items = array() ) {
  $post_types = array( 'wrestler' );
  foreach( $post_types as $type ) {
    if( ! post_type_exists( $type ) ) continue;
    $num_posts = wp_count_posts( $type );
    if( $num_posts ) {
      $published = intval( $num_posts->publish );
      $post_type = get_post_type_object( $type );
      $text = _n(
        '%s ' . $post_type->labels->singular_name,
        '%s ' . $post_type->labels->name,
        $published,
        'your_textdomain'
      );
      $text = sprintf( $text, number_format_i18n( $published ) );

      // show post type list id user can edit the post type,
      // otherwise just swho the name and the count
      if ( current_user_can( $post_type->cap->edit_posts ) ) {
        $edit_url = add_query_arg( array('post_type' => $type),  admin_url('edit.php') );
        $items[] = sprintf( '<a href="%s">%s</a>', $edit_url, $text ) . "\n";
      } else {
        $items[] = $text . "\n";
      }

    } // end if( $num_posts )
  } // end foreach
  return $items;
}

Non funziona nel mio caso.
Hardeep Asrani,

0

Per tutte le occorrenze future, dell'aggiunta di tipi di post personalizzati nella casella "In breve", il seguente codice ha funzionato per me in WordPress 4.6.1. E potrebbe funzionare per gli altri.

// Add custom taxonomies and custom post types counts to dashboard
    add_action( 'dashboard_glance_items', 'cpt_to_at_a_glance' );
function cpt_to_at_a_glance() {
        // Custom post types counts
        $post_types = get_post_types( array( '_builtin' => false ), 'objects' );
        foreach ( $post_types as $post_type ) {
            $num_posts = wp_count_posts( $post_type->name );
            $num = number_format_i18n( $num_posts->publish );
            $text = _n( $post_type->labels->singular_name, $post_type->labels->name, $num_posts->publish );
            if ( current_user_can( 'edit_posts' ) ) {
                $num = '<li class="post-count"><a href="edit.php?post_type=' . $post_type->name . '">' . $num . ' ' . $text . '</a></li>';
            }
            echo $num;
        }
    }

Tutto il merito va al seguente autore

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.