{"id":233331,"date":"2023-02-11T15:06:00","date_gmt":"2023-02-11T12:06:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=233331"},"modified":"2022-11-10T20:31:34","modified_gmt":"2022-11-10T17:31:34","slug":"agregue-metaconfiguraciones-personalizadas-faciles-de-usar-a-los-elementos-del-menu-de-wordpress","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/es\/agregue-metaconfiguraciones-personalizadas-faciles-de-usar-a-los-elementos-del-menu-de-wordpress\/","title":{"rendered":"Agregue metaconfiguraciones personalizadas f\u00e1ciles de usar a los elementos del men\u00fa de WordPress"},"content":{"rendered":"\n<p>En una actualizaci\u00f3n reciente de WordPress, ahora es posible y bastante simple agregar metacampos personalizados a los elementos del men\u00fa. En esta publicaci\u00f3n, aprenderemos c\u00f3mo agregar nuestra configuraci\u00f3n personalizada a los elementos del men\u00fa, actualizar su configuraci\u00f3n y, finalmente, c\u00f3mo utilizar los metadatos.<\/p>\n<p>Recientemente, WordPress <a href=\"https:\/\/make.wordpress.org\/core\/2020\/02\/25\/wordpress-5-4-introduces-new-hooks-to-add-custom-fields-to-menu-items\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">anunci\u00f3 soporte para agregar campos personalizados a los elementos del men\u00fa<\/a> en la versi\u00f3n 5.4. Se agregaron dos nuevas acciones que permiten a los desarrolladores agregar campos personalizados en la p\u00e1gina de administraci\u00f3n del men\u00fa de WordPress y en el editor de men\u00fa del Personalizador. En esta publicaci\u00f3n nos centraremos en uno de ellos, el de la p\u00e1gina de administraci\u00f3n del men\u00fa de WordPress.<\/p>\n<p>Con este cambio, ya no es necesario obligar a los usuarios de temas o complementos a recordar y escribir los nombres de las clases para activar la &quot;configuraci\u00f3n&quot; de los elementos del men\u00fa. Hasta ahora, este ha sido un proceso com\u00fan para cosas como hacer que un elemento del men\u00fa parezca un bot\u00f3n o cambiar entre diferentes dise\u00f1os de men\u00fas desplegables. A menudo en combinaci\u00f3n con un caminante de men\u00fas personalizado.<\/p>\n<p>Tenga en cuenta que para que este c\u00f3digo funcione se requiere la versi\u00f3n m\u00ednima de WordPress 5.4.0.<\/p>\n<h2>Lo que haremos en este tutorial<\/h2>\n<p>Con el nuevo enlace a los elementos del men\u00fa y el soporte de WordPress para agregar metadatos a los elementos del men\u00fa, realmente no hay l\u00edmite en cuanto a qu\u00e9 tipo de configuraci\u00f3n desea. El proceso depende de cu\u00e1l sea el resultado final. En la mayor\u00eda de los casos, basta con agregar una clase CSS personalizada al elemento del men\u00fa.<\/p>\n<p>Para mantenerlo simple, en esta publicaci\u00f3n agregaremos una casilla de verificaci\u00f3n etiquetada como &quot;Mostrar como bot\u00f3n&quot;. En nuestro tema tenemos CSS que dise\u00f1ar\u00e1 un elemento de men\u00fa para que parezca un bot\u00f3n (llamada a la acci\u00f3n) si el elemento tiene una clase determinada. En lugar de obligar al usuario del tema a escribir la clase de CSS &quot;men\u00fa-elemento-bot\u00f3n&quot; en el campo de clase de CSS del elemento de men\u00fa en el administrador, les ofrecemos una casilla de verificaci\u00f3n f\u00e1cil de usar.<\/p>\n<p>Al final de esta publicaci\u00f3n, encontrar\u00e1 algunas ideas para otras acciones y filtros que puede usar si desea hacer algo m\u00e1s que agregar una clase CSS.<\/p>\n<p>\u00a1Empecemos!<\/p>\n<h2>Agregar campos personalizados a los elementos del men\u00fa<\/h2>\n<p>El nuevo gancho agregado recientemente es <code>[wp_nav_menu_item_custom_fields](https:\/\/developer.wordpress.org\/reference\/hooks\/wp_nav_menu_item_custom_fields\/)<\/code>. Es un gancho que se dispara justo encima de los botones de movimiento de un elemento del men\u00fa;<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-153876-61e51560662d6.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-153876-61e51560662d6.png\" alt=\"Agregue metaconfiguraciones personalizadas f\u00e1ciles de usar a los elementos del men\u00fa de WordPress\" ><\/a><\/p>\n<p>El gancho viene con no menos de cinco par\u00e1metros. En este post haremos cosas que solo requieren las dos primeras.<\/p>\n<ul>\n<li><code>item_id<\/code>: El ID del elemento de men\u00fa actual<\/li>\n<li><code>item<\/code>: objeto de datos del elemento de men\u00fa<\/li>\n<li><code>depth<\/code>: La profundidad del elemento de men\u00fa dentro del men\u00fa, representada como un n\u00famero entero<\/li>\n<li><code>args<\/code>: un objeto de argumentos de elementos de men\u00fa<\/li>\n<li><code>nav_id<\/code>: El ID del men\u00fa de navegaci\u00f3n<\/li>\n<\/ul>\n<p>Todas las entradas agregadas en este enlace deben tener un <code>name<\/code>atributo (ya que el editor de men\u00fa es un formulario). El atributo de nombre puede tener el nombre que desee, pero debe ser \u00fanico y debe agregar el ID del elemento de men\u00fa (primer par\u00e1metro) entre corchetes. Por ejemplo <code>name=\"my-custom-field[&lt;item ID&gt;]<\/code>, \u00ab. As\u00ed es como lo hacen las otras configuraciones de elementos de men\u00fa est\u00e1ndar.<\/p>\n<p>Comencemos con un ejemplo de agregar una casilla de verificaci\u00f3n para hacer que el elemento del men\u00fa se vea como un bot\u00f3n cuando el men\u00fa se coloca como el men\u00fa principal. Nos conectaremos <code>wp_nav_menu_item_custom_fields<\/code>solo con los dos primeros par\u00e1metros y haremos lo siguiente:<\/p>\n<pre><code>add_action('wp_nav_menu_item_custom_fields', function($item_id, $item) {\n    $show_as_button = get_post_meta($item_id, '_show-as-button', true);\n    ?&gt;\n    &lt;p class=\"awp-show-as-button description description-wide\"&gt;\n        &lt;label for=\"awp-menu-item-button-&lt;?php echo $item_id; ?&gt;\" &gt;\n            &lt;input type=\"checkbox\" \n                id=\"awp-menu-item-button-&lt;?php echo $item_id; ?&gt;\" \n                name=\"awp-menu-item-button[&lt;?php echo $item_id; ?&gt;]\" \n                &lt;?php checked($show_as_button, true); ?&gt; \n            \/&gt;&lt;?php _e('Show as a button', 'awp'); ?&gt;\n        &lt;\/label&gt;\n    &lt;\/p&gt;\n    &lt;?php\n}, 10, 2);<\/code><\/pre>\n<p>En la l\u00ednea <code>#2<\/code>buscamos el valor actual de nuestro elemento de men\u00fa meta. Los elementos del men\u00fa usan post meta, por lo que usamos <code>[get_post_meta](https:\/\/developer.wordpress.org\/reference\/functions\/get_post_meta\/)()<\/code>los que probablemente ya est\u00e9 familiarizado. Almacenamos los metadatos del elemento del men\u00fa con la tecla &#8216; <code>_show-as-button<\/code>&#8216;.<\/p>\n<p>Entonces es cuesti\u00f3n de hacer eco de un buen HTML. El c\u00f3digo anterior usa algunas de las clases que ya se usan para los elementos del men\u00fa para que se vea bien sin agregar un estilo personalizado (una <code>p<\/code>etiqueta con las clases &quot; <code>description description-wide<\/code>&quot;).<\/p>\n<p>Las partes importantes suceden en l\u00ednea <code>#8<\/code>y <code>#9<\/code>. Seguimos la regla del atributo de nombre, agregando <code>$item_id<\/code>entre par\u00e9ntesis, y nos aseguramos de que el valor guardado actual se refleje en la casilla de verificaci\u00f3n. Puede agregar cualquier tipo de entradas, e incluso m\u00faltiples entradas aqu\u00ed. Solo recuerde proporcionar el <code>name<\/code>atributo apropiado y establecer su valor actual correctamente.<\/p>\n<p>Con este c\u00f3digo en el c\u00f3digo de su tema <code>functions.php<\/code>o complemento, ahora deber\u00eda obtener una nueva casilla de verificaci\u00f3n para todos los elementos del men\u00fa:<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-153876-61e5156147558.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-153876-61e5156147558.png\" alt=\"Agregue metaconfiguraciones personalizadas f\u00e1ciles de usar a los elementos del men\u00fa de WordPress\" ><\/a><\/p>\n<p>Actualmente no est\u00e1 salvando nuestro campo. Ese es el siguiente paso.<\/p>\n<h2>Actualizaci\u00f3n de los campos personalizados<\/h2>\n<p>Para actualizar los campos personalizados en los elementos del men\u00fa, usamos el gancho <code>[wp_update_nav_menu_item](https:\/\/developer.wordpress.org\/reference\/hooks\/wp_update_nav_menu_item\/)<\/code>. Viene con tres argumentos, pero solo necesitamos el segundo, que es el ID del elemento del men\u00fa.<\/p>\n<p>La forma en que maneje guardar el valor de su(s) entrada(s) depende de usted. Eleg\u00ed simplemente guardar &#8216; <code>_show-as-button<\/code>&#8216; como verdadero o falso. Simplemente use <code>[update_post_meta](https:\/\/developer.wordpress.org\/reference\/functions\/update_post_meta\/)()<\/code>y\/o <code>[delete_post_meta](https:\/\/developer.wordpress.org\/reference\/functions\/delete_post_meta\/)()<\/code>.<\/p>\n<pre><code>add_action('wp_update_nav_menu_item', function($menu_id, $menu_item_db_id) {\n    $button_value = (isset($_POST['awp-menu-item-button'][$menu_item_db_id]) &amp;&amp; $_POST['awp-menu-item-button'][$menu_item_db_id] == 'on')? true: false;\n    update_post_meta($menu_item_db_id, '_show-as-button', $button_value);\n}, 10, 2);<\/code><\/pre>\n<p>En el c\u00f3digo anterior busco el valor del campo personalizado por su nombre en la <code>$_POST<\/code>matriz. Dado que es una casilla de verificaci\u00f3n, no existir\u00e1 en la <code>$_POST<\/code>matriz (sin marcar) o se devolver\u00e1 como &#8216; <code>on<\/code>&#8216;. Luego actualizo la clave meta &#8216; <code>_show-as-button<\/code>&#8216; como verdadera o falsa.<\/p>\n<p>Con el c\u00f3digo anterior, deber\u00eda ver que su campo se actualiza correctamente al guardar el men\u00fa.<\/p>\n<p>El siguiente paso es hacer algo con nuestros metadatos personalizados. Y c\u00f3mo lo haga depende de cu\u00e1l sea el resultado final. En cuanto a nuestro ejemplo, todo lo que tenemos que hacer es agregar una clase personalizada al elemento del men\u00fa.<\/p>\n<h2>Actualizar elemento de men\u00fa clase CSS<\/h2>\n<p>WordPress ofrece un filtro en las clases del elemento del men\u00fa: <code>[nav_menu_css_class](https:\/\/developer.wordpress.org\/reference\/hooks\/nav_menu_css_class\/)<\/code>. Todo lo que tenemos que hacer es agregar una clase personalizada a la matriz mediante este filtro si nuestro meta personalizado es <code>true<\/code>. Usamos <code>[get_post_meta](https:\/\/developer.wordpress.org\/reference\/functions\/get_post_meta\/)()<\/code>para obtener el valor de &#8216; <code>_show-as-button<\/code>&#8216; y si es cierto, agregamos la clase CSS &#8216; <code>menu-item-button<\/code>&#8216;:<\/p>\n<pre><code>add_filter('nav_menu_css_class', function($classes, $menu_item) {\n    $show_as_button = get_post_meta($menu_item-&gt;ID, '_show-as-button', true);\n    if ($show_as_button) {\n        $classes[] = 'menu-item-button';\n    }\n    return $classes;\n}, 10, 2);<\/code><\/pre>\n<p>El <code>nav_menu_css_class<\/code>filtro viene con un total de cuatro argumentos, incluidos los argumentos del men\u00fa y la profundidad del elemento del men\u00fa. Si es necesario, puede hacer que los nombres de las clases se vean afectados por estos valores. Por ejemplo, normalmente no tendr\u00eda sentido transformar un elemento de men\u00fa en un bot\u00f3n a menos que est\u00e9 en el nivel superior (y no dentro de un men\u00fa desplegable).<\/p>\n<p>Con el c\u00f3digo anterior, ahora deber\u00eda ver que cualquier elemento de men\u00fa que haya marcado &quot;Mostrar como bot\u00f3n&quot; obtendr\u00e1 la clase &#8216; <code>menu-item-button<\/code>&#8216;.<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-153876-61e515621cd00.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-153876-61e515621cd00.png\" alt=\"Agregue metaconfiguraciones personalizadas f\u00e1ciles de usar a los elementos del men\u00fa de WordPress\" ><\/a><\/p>\n<p>Tenga en cuenta: es posible que experimente que el <code>nav_menu_css_class<\/code>filtro no se aplica si el men\u00fa usa un men\u00fa personalizado que, por ejemplo, contiene el m\u00e9todo <code>start_el()<\/code>. \u00a1 El caminante debe aplicar el <code>nav_menu_css_class<\/code>filtro en las clases del elemento del men\u00fa (usando <code>apply_filters()<\/code>) para que funcione el filtro anterior!<\/p>\n<h2>Otros usos de los metacampos personalizados de elementos de men\u00fa<\/h2>\n<p>Como se mencion\u00f3, el proceso de usar los campos personalizados depende del resultado final. Es dif\u00edcil hacer una publicaci\u00f3n que cubra todas las posibilidades. Pero al menos esto deber\u00eda darte algunas ideas. El ejemplo anterior mostr\u00f3 c\u00f3mo simplemente agregar una clase personalizada al elemento del men\u00fa.<\/p>\n<p>En otros casos, es posible que desee aprovechar los metadatos en un caminante de men\u00fa. En la mayor\u00eda de las funciones en un caminante de men\u00fas, tiene acceso a la ID del elemento del men\u00fa y, por lo tanto, puede obtener f\u00e1cilmente los metadatos.<\/p>\n<p>Una alternativa al uso de un caminante de men\u00fa personalizado puede usar el filtro <code>[wp_setup_nav_menu_item](https:\/\/developer.wordpress.org\/reference\/functions\/wp_setup_nav_menu_item\/)<\/code>para tener m\u00e1s control sobre el objeto del elemento de men\u00fa.<\/p>\n<p>O puede usar el filtro <code>[wp_get_nav_menu_items](https:\/\/developer.wordpress.org\/reference\/functions\/wp_get_nav_menu_items\/)<\/code>para, por ejemplo, excluir elementos del men\u00fa, si su configuraci\u00f3n es limitar la visibilidad del elemento del men\u00fa.<\/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>En una actualizaci\u00f3n reciente de WordPress, ahora es posible y bastante simple agregar metacampos personalizados a los elementos del men\u00fa. \u00a1En este post aprenderemos c\u00f3mo!<\/p>\n","protected":false},"author":1,"featured_media":223830,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[924,892,892,716,716,831,1110,800,800,831,924,840,840,861,861],"tags":[1172],"class_list":{"0":"post-233331","1":"post","2":"type-post","3":"status-publish","4":"format-standard","5":"has-post-thumbnail","6":"hentry","7":"category-asignaturas","8":"category-codigo","10":"category-desarrollador","12":"category-guia-para-principiantes","13":"category-n-a","14":"category-php-2","18":"category-tutoriales","20":"category-wordpress-2","22":"tag-affiai-es"},"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/posts\/233331","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=233331"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/posts\/233331\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/media\/223830"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/media?parent=233331"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/categories?post=233331"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/tags?post=233331"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}