{"id":230216,"date":"2022-12-01T10:54:00","date_gmt":"2022-12-01T07:54:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=230216"},"modified":"2022-11-09T20:38:25","modified_gmt":"2022-11-09T17:38:25","slug":"adicion-de-una-clase-de-cuerpo-basada-en-una-plantilla","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/es\/adicion-de-una-clase-de-cuerpo-basada-en-una-plantilla\/","title":{"rendered":"Adici\u00f3n de una clase de cuerpo basada en una plantilla"},"content":{"rendered":"\n<p>Trabajar con plantillas en WordPress es algo que no es raro. Todo es una especie de plantilla, desde la plantilla de la p\u00e1gina principal, la plantilla de una sola p\u00e1gina, la plantilla 404, hasta las plantillas personalizadas.<\/p>\n<p>A veces, sin embargo, es posible que desee aplicar una clase al <code>body<\/code>elemento en funci\u00f3n de la plantilla que se est\u00e1 utilizando para que pueda dise\u00f1ar esta plantilla en particular de manera un poco diferente al resto del sitio.<\/p>\n<p>Aunque puedes hacerlo de varias maneras diferentes, todos tenemos nuestros m\u00e9todos para hacerlo, as\u00ed que pens\u00e9 en compartir el m\u00edo.<\/p>\n<h2>Clase de cuerpo basada en una plantilla<\/h2>\n<p>Antes de saltar al c\u00f3digo para agregar una clase de cuerpo basada en una plantilla, es importante tener en cuenta que asumo que la plantilla tiene el siguiente formato: <code>template-{name-of-template}.php<\/code>.<\/p>\n<p>Entonces, supongamos que est\u00e1 trabajando en una plantilla para mostrar informaci\u00f3n sobre el peso que ha perdido en un mes y desea hacerlo usando una plantilla para esto. La plantilla puede tener el nombre <code>template-weight-loss.php<\/code>.<\/p>\n<p>Aqu\u00ed est\u00e1 la cosa: aplicar el nombre de la clase a una sola p\u00e1gina que usa esta plantilla no es gran cosa. Pero si tiene varias p\u00e1ginas que usan esta plantilla (lo cual, si ejecuta un sitio en el que muchas personas pueden estar usando esta plantilla, tiene sentido, \u00bfno?), Entonces querr\u00e1 asegurarse de aplicar el nombre de la clase. a cada p\u00e1gina que como esta plantilla.<\/p>\n<p>\u00bfPero c\u00f3mo?<\/p>\n<p>Hay varias formas de hacerlo, pero requiere al menos lo siguiente:<\/p>\n<ol>\n<li>Engancharse al gancho <strong><a href=\"https:\/\/developer.wordpress.org\/reference\/functions\/body_class\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">body_class que proporciona WordPress,<\/a><\/strong><\/li>\n<li>Leyendo el nombre de la plantilla,<\/li>\n<li>Aplic\u00e1ndolo al nombre de clase del cuerpo (si la p\u00e1gina est\u00e1 usando la plantilla)<\/li>\n<\/ol>\n<p>Afortunadamente, es f\u00e1cil de hacer porque el enlace pasa una serie de clases a una funci\u00f3n enlazada y los metadatos de una publicaci\u00f3n determinada incluyen si est\u00e1 usando una plantilla o no.<\/p>\n<p>Dicho esto, <strong><a href=\"https:\/\/gist.github.com\/tommcfarlin\/e053ff5fdc82af9854bf7031d57a759d#file-00-add-body-class-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">as\u00ed es como se puede lograr esto:<\/a><\/strong><\/p>\n<pre><code>&lt;?php\n\nadd_filter('body_class', 'acme_add_body_class');\n\/**\n * If the current page has a template, apply it's name to the list of classes. This is\n * necessary if there are multiple pages with the same template and you want to apply the\n * name of the template to the class of the body.\n *\n * @param array $classes The current array of attributes to be applied to the \n *\/\nfunction acme_add_body_class($classes)\n{\n  if (!empty(get_post_meta(get_the_ID(), '_wp_page_template', true))) {\n      \/\/ Remove the `template-` prefix and get the name of the template without the file extension.\n      $templateName = basename(get_page_template_slug(get_the_ID()));\n      $templateName = str_ireplace('template-', '', basename(get_page_template_slug(get_the_ID()), '.php'));\n\n      $classes[] = $templateName;\n  }\n\n  return array_filter($classes);\n}\n<\/code><\/pre>\n<p>Tenga en cuenta que puede usar un cierre para esto en lugar de un nombre de funci\u00f3n enganchado y una funci\u00f3n independiente, pero dado que diferentes personas que leen esto usan diferentes versiones de PHP, la forma m\u00e1s f\u00e1cil de demostrar esto es usarlo arriba.<\/p>\n<h2>\u00bfPor qu\u00e9 hacer esto?<\/h2>\n<p>En t\u00e9rminos generales, si su p\u00e1gina tiene el mismo nombre que la plantilla que se est\u00e1 aplicando, tendr\u00e1 un nombre de clase que coincida con el nombre de la p\u00e1gina.<\/p>\n<p>Es decir, digamos que tiene una p\u00e1gina y su nombre es P\u00e9rdida de peso. El <code>body<\/code>elemento tendr\u00e1 una <code>weight loss<\/code>clase. Pero si usa un segundo, tercero, cuarto, etc. en una p\u00e1gina que tiene un t\u00edtulo diferente, no tendr\u00e1 esa clase.<\/p>\n<p>Si desea asegurarse de que <code>body<\/code>tenga el nombre de clase basado en la plantilla, el c\u00f3digo anterior garantizar\u00e1 que esto funcione.<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Fuente de grabaci\u00f3n:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/tommcfarlin.com\" class=\"external external_icon\">tommcfarlin.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Una manera f\u00e1cil de aplicar una clase de cuerpo basada en un nombre de plantilla utilizando las API de WordPress y las funciones de PHP.<\/p>\n","protected":false},"author":1,"featured_media":163533,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[892,716,914,800,840,861],"tags":[1172],"class_list":["post-230216","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-codigo","category-desarrollador","category-otro","category-php-2","category-tutoriales","category-wordpress-2","tag-affiai-es"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/posts\/230216","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=230216"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/posts\/230216\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/media\/163533"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/media?parent=230216"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/categories?post=230216"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/tags?post=230216"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}