Saya menjawab sendiri karena hari ini saya bertanya pada diri sendiri 2 pertanyaan yang saya posting, dan meluangkan waktu untuk menemukan jawaban. Setelah saya menemukan solusi, saya ingin membagikannya, tetapi solusi lain sangat tepat dan saya siap untuk menerima solusi apa pun yang saya temukan lebih baik daripada milik saya. Pengeditan dan peningkatan solusi saya dihargai dan tidak dianjurkan.
Edit
Setelah jawaban Rarst saya telah mengedit kode. Sekarang fungsinya menggunakan kelas dashicons standar, tetapi juga memungkinkan untuk menentukan url gambar gaya lama dalam menu_icon
argumen dan kelas dashicon baru dalam menu_dashicon
argumen.
Alur kerja
Pertama saya pikir saya pikir adalah register_post_type
, menembakkan suatu tindakan,, registered_post_type
yang lolos ke fungsi kait argumen dilewati register_post_type
, tanpa menyaring mereka, jadi mungkin untuk membuat argumen kustom untuk fungsi itu.
Jadi saya memutuskan untuk meneruskan argumen 'menu_dashicon'
untuk melewati dasbor kustom.
Setelah itu saya berpikir untuk membuat kelas yang mendengarkan argumen itu, menyimpan ikon dalam variabel kelas. Kelas yang sama dapat bertanggung jawab untuk
- periksa versi terbaru WP, dan jika kurang dari 3,8 jangan lakukan apa-apa
- jika versinya 3.8+ loop
$menu
array pada hook yang tepat dan:
- hapus, jika ada, gambar kustom apa pun yang ditambahkan melalui
'menu_icon'
dan
- tambahkan gaya inline sesuai dengan apa yang ditambahkan melalui
'menu_dashicon'
param
Saya membuat kode dalam satu file, dengan cara ini dapat dengan mudah dimasukkan dalam setiap tema / plugin atau bahkan digunakan sebagai plugin MU dan setelah itu kita dapat menggunakan 'menu_dashicon'
argumen baru di setiap tema dan / atau plugin yang diinstal.
Saya juga menambahkan header plugin minimal yang memungkinkan untuk menggunakannya sebagai plugin mandiri, tapi mungkin itu cara yang kurang bermanfaat untuk digunakan.
Cara Penggunaan
Di dalam register_post_type
hanya meneruskan 'menu_dashicon'
argumen dengan nilai kelas dashicon ( tanpa awalan 'dashicons-'):
$args = array(
...
'menu_dashicon' => 'chart-pie', // dashicons will be used in WP 3.8+
'menu_icon' => $url_of_the_icon // icon images will be used in WP 3.7.1 & previous
);
register_post_type('my_cpt', $args);
Itu saja. Dapatkan nama kelas ikon Dashicons dari situsnya .
Jadi di sini kodenya:
<?php
/**
* Plugin Name: GM CPT Icon
*/
namespace GM;
class CptIcon {
public static $cpt;
public $css;
static function registerIcon( $cpt, $icon ) {
self::$cpt[$cpt] = $icon;
}
function init() {
if ( $this->mp6() ) {
\add_action('admin_menu', array($this, 'parseMenu') );
}
}
function mp6() {
return \version_compare( $GLOBALS['wp_version'], '3.8', '>=' );
}
function parseMenu() {
if ( $this->mp6() && ! empty( self::$cpt ) ) {
foreach ( $GLOBALS['menu'] as $i => $item ) {
if $item[1] === 'edit_posts' && (strpos($item[2], 'edit.php?post_type=') === 0)) {
$this->menuItemClass($i, str_replace('edit.php?post_type=', '', $item[2]));
}
}
}
}
function menuItemClass( $i, $type ) {
if ( \in_array($type, \array_keys(self::$cpt), TRUE ) ) {
$GLOBALS['menu'][$i][4] = str_replace('menu-icon-post', '', $GLOBALS['menu'][$i][4]);
$GLOBALS['menu'][$i][6] = 'dashicons-' . self::$cpt[$type];
}
}
}
\add_action('plugins_loaded', function() {
if ( \is_admin() && !( \defined('DOING_AJAX') && \DOING_AJAX ) ) {
$cpticon = new CptIcon;
$cpticon->init();
}
});
\add_action('registered_post_type', function( $post_type, $args ) {
if ( isset($args->menu_dashicon) && ! empty($args->menu_dashicon) ) {
CptIcon::registerIcon($post_type, $args->menu_dashicon);
}
}, 10, 2);
Ini juga tersedia sebagai Gist
Dua CPT: "Gagasan" dan "Galeri" menggunakan Dashicons. Perhatikan perubahan warna otomatis dengan berbagai skema warna admin.
menu_icon
Anda tidak dapat menggunakan url gambar untuk versi sebelumnya ... tapi siapa yang peduli dengan masa lalu? :)