今日、私は自分が投稿した2つの質問に答えて、答えを見つけるのに時間を費やしたので、自分自身に答えています。解決策を見つけたら、それを共有したいと思いますが、他の解決策は非常に高く評価されており、私よりも優れた解決策を受け入れる準備ができています。私のソリューションの編集と改善を歓迎します。
編集
Rarstの回答の後、コードを編集しました。関数は標準のdashiconsクラスを使用するようになりましたが、引数に古いスタイルの画像URLを指定し、引数に新しいdashiconsクラスを指定することもできます。menu_icon
menu_dashicon
ワークフロー
最初に考えたのはregister_post_type
、がアクションを起動し、にregistered_post_type
渡された引数をフック関数に渡すことで、引数register_post_type
をフィルタリングすることなく、その関数のカスタム引数を作成できると思ったと思います。
そこで'menu_dashicon'
、カスタムダシコンを渡す引数を渡すことにしました。
その後、その引数をリッスンするクラスを作成し、アイコンをクラス変数に保存することを考えました。同じクラスが
- WPの現在のバージョンを確認し、それより小さい場合は3.8は何もしません
- バージョンが3.8+の場合
$menu
、適切なフックで配列をループし、以下を実行します。
- 存在する場合、任意のカスタムイメージを介して、追加、削除
'menu_icon'
、および
'menu_dashicon'
paramを介して追加された内容に従ってインラインスタイルを追加します
単一のファイルにコードを作成します。この方法で、任意のテーマ/プラグインに簡単に含めることができ、MUプラグインとして使用することもでき'menu_dashicon'
ます。
スタンドアロンのプラグインとして使用できるようにする最小限のプラグインヘッダーも追加しましたが、おそらくそれはあまり有用ではありません。
使い方
内部では、dashiconクラスの値を持つ引数をregister_post_type
渡し'menu_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としても利用可能です
2つのCPT:ダシコンを使用した「アイデア」と「ギャラリー」。異なる管理者の配色での自動色変更に注意してください。
menu_icon
すると、以前のバージョンのイメージURLを使用できません... :)