Contenu principal

Ajouter des types de contenu au nouveau widget « D’un coup d’œil » de WordPress 3.8

« D’un coup d’œil » (At a glance) est le remplaçant du widget « Aujourd’hui » sur le tableau de bord. Il y avait une méthode pour ajouter des CPT à ce widget, qui ne marche plus depuis la mise à jour. Tout le monde a déjà montré sa méthode pour palier ce petit désagrément, sauf moi… voici donc ma solution :p

***POUF***
EDIT 24/09/2014 :
Avec cette nouvelle version, plus besoin de prévoir le coup lorsque le CPT est créé en ajoutant du css (mon bout de code s’en charge).

010203040506070809101112131415161718192021222324252627282930313233343536

// "At a glance" items (dashboard widget): add the post types.

add_filter( 'dashboard_glance_items', 'sf_glance_post_types_items' );

function sf_glance_post_types_items( $items ) {
	$post_types = get_post_types( array( 'public' => true, '_builtin' => false ), 'object' );
	$post_types = apply_filters( 'sf_glance_post_types', $post_types );

	if ( count( $post_types ) ) {
		foreach ( $post_types as $post_type => $object ) {
			$num_posts = wp_count_posts( $post_type );
			if ( ! $num_posts || ! isset( $num_posts->publish ) ) {
				continue;
			}

			$icon  = ! empty( $object->menu_icon ) && strpos( $object->menu_icon, 'dashicons-' ) === 0 ? '<i class="sf-icon dashicons ' . $object->menu_icon . '"></i>' : '';
			$class = $icon ? ' hide-icon' : '';
			$text  = sprintf( _n( '%1$s %2$s', '%1$s %3$s', $num_posts->publish ), number_format_i18n( $num_posts->publish ), $object->labels->singular_name, $object->labels->name );
			
			if ( current_user_can( $object->cap->edit_posts ) ) {
				$items[] = sprintf( '<a class="%1$s-count%2$s" href="edit.php?post_type=%1$s">%3$s%4$s</a>', $post_type, $class, $icon, $text );
			}
			else {
				$items[] = sprintf( '<span class="%1$s-count%2$s">%3$s%4$s</span>', $post_type, $class, $icon, $text );
			}
		}
	}
	return $items;
}


add_action( 'admin_print_styles-index.php', 'sf_glance_post_types_style' );

function sf_glance_post_types_style() {
	echo '<style>#dashboard_right_now li .hide-icon:before {display: none;} #dashboard_right_now li .sf-icon {float:left; margin: 0 5px 0 0; color:#888;}</style>' . "\n";
}

La différence avec la précédente version de ce code, c’est qu’on ne se sert plus du système mis en place par WordPress pour ajouter une icône devant chaque ligne du widget. Au contraire, on va la cacher et ajouter la notre dans une balise <i> (pour éviter d’utiliser une balise <span> à cause des règles css déjà en place).

See ya!