나는 오늘 내가 게시 한 두 가지 질문을 스스로에게 물었고 답변을 찾기 위해 시간을 보냈기 때문에 스스로 대답하고 있습니다. 솔루션을 찾은 후에는 공유하고 싶지만 다른 솔루션은 엄청나게 수정되었으며 내 솔루션보다 더 나은 솔루션을 수용 할 준비가되었습니다. 내 솔루션에 대한 편집 및 개선은 고맙게도 감사합니다.
편집하다
Rarst 답변 후 코드를 편집했습니다. 이제 함수는 표준 대시 아이콘 클래스를 사용하지만 인수에 이전 스타일 이미지 URL을 지정하고 인수에 새로운 대시 아이콘 클래스 를 지정할 수도 있습니다 .menu_iconmenu_dashicon
워크 플로우
먼저 생각한 것은 register_post_type액션을 발생시키는 것으로 , registered_post_type인자를 전달 register_post_type하지 않고 전달 된 인자를 후킹하는 함수에 전달 하는 것입니다.
그래서 나는 'menu_dashicon'맞춤 대시 아이콘을 전달 하기 위해 인수 를 전달 하기로 결정했습니다 .
그 후 나는 그 인수를 듣고 클래스 변수에 아이콘을 저장하는 클래스를 만들려고 생각했습니다. 같은 클래스가 책임을 질 수 있습니다
- WP의 currnt 버전을 확인하십시오. 3.8보다 작 으면 아무 것도 수행하지 마십시오.
- 버전이 3.8 이상인 경우
$menu적절한 후크 에서 어레이를 루프 하고 다음을 수행하십시오.
- 존재하는 경우, 사용자 정의 이미지를 통해 추가, 제거
'menu_icon'및
'menu_dashicon'매개 변수 를 통해 추가 된 내용에 따라 인라인 스타일을 추가하십시오.
단일 파일로 코드를 작성하면이 방식으로 모든 테마 / 플러그인에 쉽게 포함되거나 MU 플러그인으로 사용할 수 있으며 그 후에는 'menu_dashicon'설치된 모든 테마 및 / 또는 플러그인에서 완전히 새로운 인수를 사용할 수 있습니다 .
또한 독립형 플러그인으로 사용할 수있는 최소 플러그인 헤더를 추가했지만 사용 방법이 덜 유용합니다.
사용하는 방법
내부 register_post_type그냥 통과 'menu_dashicon'합니다 (dashicon 클래스의 값을 인수 없이 접두사 '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);
그게 다야. 사이트 에서 Dashicons 아이콘 클래스 이름을 가져옵니다 .
여기 코드가 있습니다 :
<?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);
Gist 로도 사용 가능

두 개의 CPT : Dashicon을 사용하는 "아이디어"및 "갤러리" 다른 관리자 색 구성표를 사용하여 자동 색 변경에 유의하십시오.
menu_icon이전 버전의 이미지 URL을 사용할 수 없으므로 과거를 걱정하는 사람은 누구입니까? :)