WordPress 3.8 ввел в ядро плагин MP6, который, среди прочего, использует иконический шрифт Dashicons для отображения шрифтов на панели инструментов.
Теперь хорошо известно, что register_post_type имеет аргумент 'menu_icon'
, позволяющий указать пользовательский значок для пункта меню администратора CPT.
В моих плагинах / темах я часто использую этот аргумент с моими пользовательскими изображениями значков, которые обычно темные, потому что до 3.8 меню администратора имело светлый фон. С темным фоном меню по умолчанию в WP 3.8 мои иконки становятся почти невидимыми.
Кроме того, я думаю, что использовать новые дашиконы для моего CPT будет круто.
После некоторых исследований я знаю, что могу просто использовать CSS из дашиконов, что-то вроде
#menu-posts-mycpt div.wp-menu-image:before { content: "\f226"; }
Однако при использовании 'menu_icon'
аргумента register_post_type
и предыдущего css будут напечатаны оба значка в WP 3.8 и один значок + странный символ в WP 3.8-, и без 'menu_icon'
аргумента использования в более старых версиях используется значок по умолчанию.
Я знаю, что могу условно добавить 'menu_icon'
в register_post_type
WP 3.8-версии и условно добавить предыдущий css для WP 3.8+, но:
- это предполагает добавление некоторого кода (2 условных оператора) для каждого зарегистрированного CPT, поэтому обновление плагинов / тем является довольно сложной работой
- мне кажется, это скорее обходной путь, чем элегантное решение
Итак, вопросы:
Можно ли использовать dashicons css для WP 3.8+ и использовать настраиваемое изображение, заданное через 'menu_icon'
param для предыдущих версий, «более простым» способом, не требующим добавления 2 условных выражений для каждого зарегистрированного CPT?
И, если это так, возможно ли сделать это каким-то автоматическим способом register_post_type
без дополнительного кода?
источник
menu_icon
предыдущими версиями (и я могу исправить использование имен классов вместо char), потому что, если вы добавите класс dashicons, вы не сможете использовать URL-адрес изображения для предыдущих версий ... но кого волнует прошлое? :)Легко: просто прочитайте соответствующую часть
register_post_type()
phpDocBlock, а затем используйте правильный аргумент дляmenu_icon
: Ddashicon-groups
data:image/svg+xml;base64,
.'none'
чтобы оставитьdiv.wp-menu-image
пустым, чтобы иконка могла быть добавлена через CSS.источник
svg-painer.js
, базовая библиотека js, используемая для обработки изменения цвета, может занять очень много времени, если значок более «сложный», чем стандартные дашиконы. * Третий вариант (пустой значок) действителен не только для WP 3.8+, но и долгое время ... и я хочу избежать использования css (согласно вопросу). Итак, +1 за объединение всех вариантов, но я думаю, что принятый ответ уже ответил на мой вопрос. PS рад видеть этот бриллиант рядом с твоим именем :)svg-painter.js
файле. Я не знал, как я еще не пробовал.Я отвечаю сам, потому что сегодня я задал себе два вопроса, которые я написал, и потратил некоторое время, чтобы найти ответ. Как только я нашел решение, я хочу поделиться им, но любое другое решение высоко ценится, и я готов принять любое решение, которое я нашел лучше, чем мое. Изменения и улучшения моего решения приветствуются, а также приветствуются.
редактировать
После первого ответа я отредактировал код. Теперь функция использует стандартные классы dashicons, но также позволяет указывать URL-адрес изображения старого стиля в
menu_icon
аргументе и новый класс dashicons вmenu_dashicon
аргументе.Workflow
Сначала я подумал, что
register_post_type
запускает действие,registered_post_type
которое передает функции перехвата передаваемых аргументовregister_post_type
без их фильтрации, поэтому возможно создание пользовательских аргументов для этих функций.Поэтому я решил передать аргумент,
'menu_dashicon'
чтобы передать пользовательский дашикон.После этого я подумал создать класс, который будет слушать этот аргумент, сохраняя значок в переменной класса. Один и тот же класс может быть ответственным за
$menu
массив на правильном хуке и:'menu_icon'
и'menu_dashicon'
параметрЯ создаю код в одном файле, таким образом, его можно легко включить в любую тему / плагин или даже использовать как плагин MU, и после этого можно просто использовать новый
'menu_dashicon'
аргумент в каждой установленной теме и / или плагине.Я также добавил минимальный заголовок плагина, который позволяет использовать его как самостоятельный плагин, но, вероятно, это менее полезный способ использования.
Как пользоваться
Внутри
register_post_type
просто передайте'menu_dashicon'
аргумент со значением класса dashicon ( без префикса 'dashicons-'):Это все. Получить имя класса значка Dashicons с его сайта .
Итак, вот код:
Это также доступно как Гист
Два CPT: «Идеи» и «Галерея» с использованием Dashicons. Обратите внимание, автоматическое изменение цвета с различными цветовыми схемами администратора.
источник
Я просто добавил эту строку в код, который регистрирует пользовательский тип записи:
Вот полный код
Не нужно добавлять CSS.
источник