WordPress 3.8 introdujo en el núcleo el plugin MP6 que, entre otras cosas, usa una fuente icónica llamada Dashicons para mostrar las fuentes en el tablero.
Ahora, es bien sabido que register_post_type tiene un argumento 'menu_icon'
que permite especificar un icono personalizado para la entrada del menú de administración de CPT.
En mis complementos / temas, a menudo uso ese argumento con mis imágenes de íconos personalizados que normalmente son oscuras porque antes del menú de administración 3.8 tenía un fondo claro. Con el fondo del menú oscuro predeterminado en WP 3.8 mis iconos se vuelven casi invisibles.
Aparte de eso, creo que usar los nuevos dashicons para mi CPT será genial.
Después de investigar un poco, sé que puedo usar el CSS de los dashicons, algo así como
#menu-posts-mycpt div.wp-menu-image:before { content: "\f226"; }
Sin embargo, usar tanto el 'menu_icon'
argumento de css register_post_type
como el anterior imprimirá ambos íconos en WP 3.8 y un ícono + un carácter extraño en WP 3.8-, y sin 'menu_icon'
argumento de uso , en versiones anteriores se usa el ícono predeterminado.
Yo sé que puedo agregar condicionalmente 'menu_icon'
en register_post_type
WP 3.8- versiones y añadir condicionalmente css anterior para WP 3,8+, pero:
- eso implica agregar algo de código (2 declaraciones condicionales) para cada CPT registrado, por lo que actualizar complementos / temas es un trabajo bastante duro
- me parece más una solución que una solución elegante
Entonces, las preguntas son:
¿Es posible usar dashicons css para WP 3.8+ y usar una imagen personalizada configurada a través de 'menu_icon'
param para versiones anteriores de una manera "más simple" que no implica agregar 2 condicionales por cada CPT registrado?
Y, si es así, ¿es posible hacerlo de alguna manera automática desde register_post_type
cualquier código adicional?
fuente
menu_icon
no puedes usar la URL de la imagen para versiones anteriores ... pero ¿a quién le importa el pasado? :)Fácil: solo lea la parte relevante del
register_post_type()
phpDocBlock y luego use el argumento correcto paramenu_icon
: Ddashicon-groups
data:image/svg+xml;base64,
.'none'
para dejarlodiv.wp-menu-image
vacío, de modo que se pueda agregar un icono a través de CSS.fuente
svg-painer.js
, la biblioteca core js utilizada para manejar el cambio de color puede llevar mucho tiempo si el icono es más "complejo" que los dashicons estándar. * La tercera opción (icono vacío) es válida no solo para WP 3.8+, sino desde hace mucho tiempo ... y usar css es algo que quiero evitar (según la pregunta). Entonces +1 por poner todas las opciones juntas, pero creo que la respuesta aceptada ya responde a mi pregunta. PD: feliz de ver ese diamante cerca de tu nombre :)svg-painter.js
archivo. No lo sabía porque aún no lo he intentado.Me respondo porque hoy me hice las 2 preguntas que publiqué, y pasé algún tiempo buscando una respuesta. Una vez que encontré una solución, quiero compartirla, pero cualquier otra solución es altamente apreciada y estoy listo para aceptar cualquier solución que encontré mejor que la mía. Las ediciones y mejoras a mi solución son apreciadas y no fomentadas.
Editar
Después de la respuesta de Rarst, edité el código. Ahora la función utiliza clases de dashicons estándar, pero también permite especificar una url de imagen de estilo antiguo en el
menu_icon
argumento y una clase de dashicons completamente nueva en elmenu_dashicon
argumento.Flujo de trabajo
Primero creo que pensé que era
register_post_type
, dispara una acciónregistered_post_type
, que pasa a las funciones de enganche a las que pasaron los argumentosregister_post_type
, sin filtrarlas, por lo que es posible crear argumentos personalizados para esas funciones.Así que decidí pasar el argumento
'menu_dashicon'
para pasar un dashicon personalizado.Después de eso, pensé crear una clase que escuchara ese argumento, guardando el ícono en una variable de clase. La misma clase puede ser responsable de
$menu
matriz en el gancho adecuado y:'menu_icon'
y'menu_dashicon'
parámetroCreo el código en un solo archivo, de esta manera puede incluirse fácilmente en cualquier tema / complemento o incluso usarse como complemento MU y después de eso uno puede usar el nuevo
'menu_dashicon'
argumento en cada tema y / o complemento instalado.También he agregado un encabezado de complemento mínimo que permite usarlo como un complemento independiente, pero probablemente esa es la forma menos útil de usar.
Cómo utilizar
En el interior
register_post_type
solo pasa el'menu_dashicon'
argumento con el valor de la clase dashicon ( sin el prefijo 'dashicons-'):Eso es todo. Obtenga el nombre de la clase de icono Dashicons de su sitio .
Entonces aquí el código:
También está disponible como Gist
Dos CPT: "Ideas" y "Galería" con Dashicons. Tenga en cuenta el cambio automático de color con diferentes esquemas de color de administrador.
fuente
Simplemente agregué esta línea al código que registra el tipo de publicación personalizada:
Aquí está el código completo
No es necesario agregar ningún CSS.
fuente