{"id":233495,"date":"2023-02-16T16:41:00","date_gmt":"2023-02-16T13:41:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=233495"},"modified":"2022-11-11T00:00:50","modified_gmt":"2022-11-10T21:00:50","slug":"como-agregar-iconos-de-fontawesome-a-los-elementos-del-menu-con-campos-personalizados-avanzados","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/es\/como-agregar-iconos-de-fontawesome-a-los-elementos-del-menu-con-campos-personalizados-avanzados\/","title":{"rendered":"C\u00f3mo agregar \u00edconos de Fontawesome a los elementos del men\u00fa con campos personalizados avanzados"},"content":{"rendered":"\n<p>Esta publicaci\u00f3n le mostrar\u00e1 c\u00f3mo puede usar los campos personalizados avanzados (ACF) para permitir agregar \u00edconos a su men\u00fa. En este ejemplo, agregaremos un \u00edcono de <a href=\"https:\/\/fontawesome.com\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Fontawesome<\/a>, pero puede modificar el c\u00f3digo para que se ajuste a sus necesidades. En su lugar, podr\u00eda agregar un selector de archivos para archivos SVG o algo m\u00e1s.<\/p>\n<p>Esta gu\u00eda funcionar\u00e1 con la <a href=\"https:\/\/wordpress.org\/plugins\/advanced-custom-fields\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">versi\u00f3n gratuita de Campos personalizados avanzados<\/a>, pero aseg\u00farese de tener la versi\u00f3n 5.6 o posterior.<\/p>\n<h2>Agregar el grupo y el campo ACF<\/h2>\n<p>El primer paso es agregar el propio campo a los elementos del men\u00fa. Esta gu\u00eda agregar\u00e1 una entrada de texto para escribir el nombre de la clase para el icono de Fontawesome, pero si desea otra soluci\u00f3n (por ejemplo, un selector de archivos para un archivo SVG), modifique las entradas de campo.<\/p>\n<p>Aseg\u00farese de que la ubicaci\u00f3n de su grupo de campos personalizados avanzados est\u00e9 configurada en &quot;Elemento de men\u00fa&quot;. Puede configurarlo en &quot;Todos&quot;, o puede especificar por ubicaciones de men\u00fa o por men\u00fas espec\u00edficos.<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-153055-61e506fa60c76.png\" data-rel=\"lightbox\"><img decoding=\"async\" class=\"SDStudio-light-box-enable SDStudio-editor-tools-md-imp\" src=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-153055-61e506fa60c76.png\" alt=\"C\u00f3mo agregar \u00edconos de Fontawesome a los elementos del men\u00fa con campos personalizados avanzados\" ><\/a><\/p>\n<p>Si est\u00e1 agregando sus campos y agrupando por c\u00f3digo, establezca el par\u00e1metro de ubicaci\u00f3n en &#8216; <code>nav_menu_item<\/code>&#8216;. Consulte mi <a href=\"https:\/\/awhitepixel.com\/blog\/complete-reference-for-adding-advanced-custom-fields-acf-fields-and-groups-by-code\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">referencia completa para agregar campos ACF por c\u00f3digo<\/a> para obtener m\u00e1s informaci\u00f3n.<\/p>\n<pre><code>acf_add_local_field_group([\n    ...\n    'location' =&gt; [\n        [\n            [\n                'param' =&gt; 'nav_menu_item',\n                'operator' =&gt; '==',\n                'value' =&gt; 'all'\n            ]\n        ]\n    ]\n]);<\/code><\/pre>\n<p>En cuanto al campo en s\u00ed, agregaremos una entrada de texto simple con el nombre &#8216; <code>fontawesome_icon<\/code>&#8216;.<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-153055-61e506fd705e6.png\" data-rel=\"lightbox\"><img decoding=\"async\" class=\"SDStudio-light-box-enable SDStudio-editor-tools-md-imp\" src=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-153055-61e506fd705e6.png\" alt=\"C\u00f3mo agregar \u00edconos de Fontawesome a los elementos del men\u00fa con campos personalizados avanzados\" ><\/a><\/p>\n<p>O por c\u00f3digo, agregue el campo as\u00ed:<\/p>\n<pre><code>[\n    'key' =&gt; 'field_fontawesome_icon',\n    'label' =&gt; __('Fontawesome icon class', 'txtdomain'),\n    'name' =&gt; 'fontawesome_icon',\n    'instructions' =&gt; __('Type the name of a &lt;a href=\"https:\/\/fontawesome.com\/icons?d=gallery&amp;m=free\" target=\"_blank\"&gt;Fontawesome icon&lt;\/a&gt; class. Example: \"fab fa-facebook\".', 'txtdomain'),\n    'type' =&gt; 'text',\n]<\/code><\/pre>\n<p>Para que sea m\u00e1s f\u00e1cil de usar, es una buena idea agregar una descripci\u00f3n con un enlace a la <a href=\"https:\/\/fontawesome.com\/icons?d=gallery&#038;m=free\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">descripci\u00f3n general de los \u00edconos de Fontawesome disponibles<\/a>. Estoy agregando el enlace para mostrar solo los \u00edconos gratuitos, no ninguno de los Pro, ya que esta es la biblioteca que tengo en mi tema.<\/p>\n<p>Despu\u00e9s de guardar el campo en admin o en el c\u00f3digo, ahora deber\u00eda obtener el campo adicional cuando expanda un elemento del men\u00fa:<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-153055-61e507009e5b9.png\" data-rel=\"lightbox\"><img decoding=\"async\" class=\"SDStudio-light-box-enable SDStudio-editor-tools-md-imp\" src=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-153055-61e507009e5b9.png\" alt=\"C\u00f3mo agregar \u00edconos de Fontawesome a los elementos del men\u00fa con campos personalizados avanzados\" ><\/a><\/p>\n<h2>Una nota sobre las clases de Fontawesome<\/h2>\n<p>En los &quot;viejos tiempos&quot;, antes de Fontawesome 5, proporcionar una clase de Fontawesome pod\u00eda simplificarse un poco para el usuario. Para el carrito de compras, simplemente podr\u00eda escribir &quot;carrito de compras&quot; y en nuestro c\u00f3digo podr\u00edamos agregar la clase &quot; <code>fa fa-<\/code>&quot; y luego la clase dada (dando como resultado &quot; <code>fa fa-shopping-cart<\/code>&quot;). Pero desde Fontawesome 5 las clases se han complicado un poco.<\/p>\n<p>La clase &quot;global&quot; &quot; <code>fa<\/code>&quot; ha sido reemplazada por categor\u00edas espec\u00edficas para el tipo de icono. Por ejemplo, las redes sociales o los logotipos est\u00e1n en la categor\u00eda de marcas y requieren la clase &quot; <code>fab<\/code>&quot;, los \u00edconos s\u00f3lidos requieren la clase &quot; <code>fas<\/code>&quot;, mientras que los \u00edconos regulares requieren &quot; <code>far<\/code>&quot;, y as\u00ed sucesivamente. Esta es la raz\u00f3n por la que ahora tenemos que solicitar al usuario del tema que escriba en ambas clases de Fontawesome. Deber\u00eda ser f\u00e1cil encontrar la clase correcta, ya que esto se muestra claramente en cada \u00edcono en el sitio de Fontawesome:<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-153055-61e50702d0f82.png\" data-rel=\"lightbox\"><img decoding=\"async\" class=\"SDStudio-light-box-enable SDStudio-editor-tools-md-imp\" src=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-153055-61e50702d0f82.png\" alt=\"C\u00f3mo agregar \u00edconos de Fontawesome a los elementos del men\u00fa con campos personalizados avanzados\" ><\/a><\/p>\n<p>Como ejemplo, debe ingresar &quot; <code>fas fa-shopping-cart<\/code>&quot; en nuestro campo personalizado en un elemento del men\u00fa para el \u00edcono del carrito de compras.<\/p>\n<h2>Mostrar el icono en el men\u00fa<\/h2>\n<p>El siguiente y \u00faltimo paso es representar el \u00edcono en el men\u00fa si est\u00e1 configurado. Para ello utilizamos el filtro de WordPress <code>[wp_nav_menu_objects](https:\/\/developer.wordpress.org\/reference\/hooks\/wp_nav_menu_objects\/)<\/code>. Este filtro se aplica a cada men\u00fa en todos los men\u00fas representados justo antes de generar su HTML, lo que nos permite modificar la salida de texto, las clases y m\u00e1s.<\/p>\n<p>La forma en que desea generar el icono depende nuevamente de usted. \u00bfDesea reemplazar el texto del enlace con el icono o desea mostrar el icono antes o despu\u00e9s del enlace de texto? Seguiremos la costumbre de Fontawesome generando una <code>&lt;i&gt;<\/code>etiqueta con la clase proporcionada.<\/p>\n<pre><code>add_filter('wp_nav_menu_objects', function($items) {\n    foreach ($items as &amp;$item) {\n        $icon = get_field('fontawesome_icon', $item);     \n        if ($icon) {\n            $item-&gt;title = '&lt;i class=\"'. $icon. '\"&gt;&lt;\/i&gt;'. $item-&gt;title;\n        }\n    }\n    return $items;\n});<\/code><\/pre>\n<p>La forma en que modificamos los elementos del men\u00fa es recorriendo los elementos del men\u00fa usando pasar por referencia (agregando un <code>&amp;<\/code>antes de la variable). Esto significa que cualquier cambio que hagamos en el elemento, se aplicar\u00e1 al objeto de elementos de crianza.<\/p>\n<p>Para cada elemento, usamos la <code>get_field()<\/code>funci\u00f3n de campo personalizado avanzado para obtener el valor de nuestro campo, &#8216; <code>fontawesome_icon<\/code>&#8216;. Si est\u00e1 listo, estamos listos para comenzar. El ejemplo de c\u00f3digo anterior agregar\u00e1 el \u00edcono antes del texto. Si desea agregar el \u00edcono despu\u00e9s del texto, reemplace la l\u00ednea <code>#6<\/code>con:<\/p>\n<pre><code>$item-&gt;title .= '&lt;i class=\"'. $icon. '\"&gt;&lt;\/i&gt;';<\/code><\/pre>\n<p>O si desea reemplazar el texto con un \u00edcono, sin mostrar ning\u00fan texto, reemplace la l\u00ednea <code>#6<\/code>con:<\/p>\n<pre><code>$item-&gt;title = '&lt;i class=\"'. $icon. '\" title=\"'. $item-&gt;title. '\"&gt;&lt;\/i&gt;';<\/code><\/pre>\n<p>Agregu\u00e9 un <code>title<\/code>atributo para que sea un poco m\u00e1s informativo para el usuario frontend. Dado que se elimina el texto, a veces puede resultar confuso para el usuario final para qu\u00e9 sirve el elemento del men\u00fa. Pero el <code>title<\/code>atributo se asegura de que el usuario reciba informaci\u00f3n sobre herramientas con el texto del elemento del men\u00fa cuando se desplaza sobre el icono. Esto es totalmente opcional, por supuesto.<\/p>\n<p>Si est\u00e1 utilizando un campo de un tipo diferente, por ejemplo, un selector de archivos para archivos SVG, debe ajustar la salida en consecuencia.<\/p>\n<p>\u00a1Y eso es! Ahora deber\u00eda obtener un \u00edcono de Fontawesome en todas partes donde se muestra el men\u00fa. Pero probablemente necesites agregarle algo de estilo. Por ejemplo, agregar algo de espacio entre el icono y el texto.<\/p>\n<h3>Adici\u00f3n de clases para un estilo m\u00e1s f\u00e1cil<\/h3>\n<p>Puede agregar clases personalizadas a la <code>&lt;i&gt;<\/code>etiqueta o agregar m\u00e1s HTML si es necesario.<\/p>\n<p>Si necesita agregar una clase al elemento del men\u00fa de ajuste (el <code>li<\/code>elemento), tiene acceso completo a las clases de elementos del men\u00fa que se aplicar\u00e1n en el filtro anterior. Agregue una clase de elemento de men\u00fa personalizado para elementos de men\u00fa de iconos como este:<\/p>\n<pre><code>        ...\n        if ($icon) {\n            $item-&gt;title = '&lt;i class=\"'. $icon. '\"&gt;&lt;\/i&gt;'. $item-&gt;title;\n            $item-&gt;classes[] = 'menu-with-icon';\n        }\n        ...<\/code><\/pre>\n<p>El men\u00fa debe salir as\u00ed:<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-153055-61e507050aa94.png\" data-rel=\"lightbox\"><img decoding=\"async\" class=\"SDStudio-light-box-enable SDStudio-editor-tools-md-imp\" src=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-153055-61e507050aa94.png\" alt=\"C\u00f3mo agregar \u00edconos de Fontawesome a los elementos del men\u00fa con campos personalizados avanzados\" ><\/a><\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Fuente de grabaci\u00f3n:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/awhitepixel.com\" class=\"external external_icon\">awhitepixel.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>C\u00f3mo agregar \u00edconos de Fontawesome a los elementos del men\u00fa. Usamos campos personalizados avanzados para permitir la definici\u00f3n de clases. Es f\u00e1cil ajustar el c\u00f3digo para iconos SVG o similares.<\/p>\n","protected":false},"author":1,"featured_media":224889,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[892,892,716,716,831,1110,800,800,831,840,840,861,861],"tags":[1172],"class_list":["post-233495","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-codigo","category-desarrollador","category-guia-para-principiantes","category-n-a","category-php-2","category-tutoriales","category-wordpress-2","tag-affiai-es"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/posts\/233495","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/comments?post=233495"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/posts\/233495\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/media\/224889"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/media?parent=233495"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/categories?post=233495"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/tags?post=233495"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}