Affichage des types de publication personnalisés dans la Meta Box «en un coup d'œil»

8

J'ai trouvé l'extrait suivant qui affichera le nombre de types de publication personnalisés publiés dans le widget Dashboard's At A Glance, comme ceci:

Coup d'œil

Existe-t-il un moyen de transformer ce texte "81 Wrestlers" en un lien vers la liste des types de publication. Voici le code:

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;
}
Hardeep Asrani
la source

Réponses:

8

Voici la fonction que j'utilise pour afficher CPT dans le widget "En un coup d'œil"

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

Cela rend le texte cliquable en tant que lien. J'espère que cela t'aides

Pieter Goosen
la source
Mais il montre tous les types de messages personnalisés, et je veux seulement afficher le type de message "Wrestler".
Hardeep Asrani
J'ai édité votre code et l'ai mélangé avec le mien et cela a fonctionné :) Merci!
Hardeep Asrani
@Hardeep Asrani heureux d'avoir pu aider. Ce serait génial si vous pouviez ajouter votre code comme réponse.
Pieter Goosen
@PieterGoosen Probablement un long plan, mais je cherche à obtenir la boîte "En un coup d'œil" pour afficher le bon Dashicon ( developer.wordpress.org/resource/dashicons ). Une idée?
user2019515
Cela a vraiment aidé ... Maintenant, une idée de comment je peux les afficher avec leurs propres icônes? J'essaie d'ajouter la classe dashicon dans la sortie ... $output = '<a class="' . $post_type->menu_icon . '" href="edit.php?post_type=' . $post_type->name . '">' . $num . ' ' . $text . '</a>';... mais il y a des styles qui la remplacent, j'ai donc essayé d'ajouter ce style: #dashboard_right_now li a::before, #dashboard_right_now li > span::before { content: initial; }... mais qui remplace le style de la classe dashicon. S'il vous plaît donnez votre avis.
juliusbangert
2

D'accord, j'ai donc utilisé ce code pour afficher uniquement le type de message "catcheur" et cela a fonctionné. J'ai mélangé le code de Pieter Goosen et le mien pour le sortir:

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;
}
Hardeep Asrani
la source
0

Dans le code que vous avez publié, je ne comprends pas vraiment à quoi ça sert:

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 si l'utilisateur actuel peut modifier le type de message, faites quelque chose, sinon faites la même chose ...

Je suppose que vous souhaitez afficher le lien vers la liste des publications si l'utilisateur actuel peut modifier le type de publication (tout comme WordPress le fait pour les pages et les publications).

Dans ce cas, votre code devient:

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;
}
gmazzap
la source
Ne fonctionne pas dans mon cas.
Hardeep Asrani
0

Pour toutes les occurrences futures, de l'ajout de types de publication personnalisés à la boîte `` En bref '', le code suivant a fonctionné pour moi dans WordPress 4.6.1. Et cela peut fonctionner pour d'autres.

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

Tout le mérite revient à l' auteur suivant

klewis
la source