¿Cómo agregar código a Header.php en un tema hijo?

27 feb 2012, 17:40:36
Vistas: 91.7K
Votos: 27

Estoy creando un tema hijo por primera vez y tenía algunas preguntas sobre cómo agregar código al encabezado.

En un tema que no es hijo, normalmente agrego cierto código a mi archivo header.php como Google Analytics, Google Webmaster Tools, Buy Sell Ads, Facebook Open Graph, etc...

¿Cómo se hace esto en un tema hijo? ¿Se crea un archivo header.php en el tema hijo? Si es así, ¿cómo se hace? ¿Es igual que el @import que usé en el CSS?

Gracias.

0
Todas las respuestas a la pregunta 3
18
33

Yo conectaría a la acción wp_head. Colocaría esto en un plugin para abstraerlo de tu capa de presentación. Esto permite escalabilidad y cambio de temas. También previene cualquier daño colateral en los analytics si se omite un paso durante la migración de un tema a otro.

add_action('wp_head', 'wpse_43672_wp_head');
function wpse_43672_wp_head(){
    //Cerrar etiquetas PHP
    ?>
    AÑADE TU CÓDIGO HTML AQUÍ
    <?php //Abrir etiquetas PHP
}
27 feb 2012 17:47:21
Comentarios

Gracias. No tengo experiencia en crear un plugin. Tengo alrededor de 5 fragmentos de código que me gustaría añadir en el encabezado. ¿Necesitaría hacer un plugin para cada uno de ellos?

Rick Smith Rick Smith
27 feb 2012 18:26:16

@RickSmith He añadido el formato del plugin en la publicación de arriba

Brian Fegter Brian Fegter
27 feb 2012 18:35:25

Ya sea que uses un Tema Padre, un Tema Hijo o cualquier tema en absoluto, el enfoque correcto es colocar dicho código en una función de callback, enganchada al gancho de acción apropiado. Podrías poner este código en el archivo functions.php del Tema o, aún mejor y como Brian ha sugerido, colocarlo en un Plugin específico del sitio.

Chip Bennett Chip Bennett
27 feb 2012 19:33:44

@BrianFegter Muchas gracias. Trabajar con Php / temas hijos es nuevo para mí, así que estoy aprendiendo sobre la marcha. Gracias por tu paciencia. :) En mi tema anterior, entré al administrador de WordPress, luego al editor y agregué esto al encabezado. <meta property="fb:page_id" content="12345678" /> ¿Es mejor agregar todo eso al plugin?

Rick Smith Rick Smith
27 feb 2012 20:10:02

@RickSmith No hay problema. Para eso existe este foro. :)

Brian Fegter Brian Fegter
27 feb 2012 20:10:52

@BrianFegter Ok, acabo de colocar el código mencionado anteriormente en ese plugin, y cuando intenta activarse me sale este error. ¿Qué crees que estoy haciendo mal? Parse error: syntax error, unexpected '<' in /home/downsynd/public_html/wpdallas.com/test/wp-content/plugins/Ricks-Code/Rick-Widget.php on line 22

Rick Smith Rick Smith
27 feb 2012 20:16:56

@RickSmith ¿puedes publicar todo el contenido de Rick-Widget.php en un PasteBin y compartir el enlace?

Chip Bennett Chip Bennett
27 feb 2012 20:18:30

@RickSmith como mencionó Chip, cualquier cosa específica del sitio debería ir en ese único plugin.

Brian Fegter Brian Fegter
27 feb 2012 20:21:02

@BrianFegter Ese pastebin expiró. Aquí hay uno nuevo. http://pastebin.com/kmmKkSDS

Rick Smith Rick Smith
27 feb 2012 20:50:51

@RickSmith Mira mi última edición. Tu sintaxis de PHP es incorrecta. Debes usar echo o cerrar tus etiquetas php si quieres publicar HTML crudo en una función. ?> TU HTML <?php

Brian Fegter Brian Fegter
27 feb 2012 20:52:27

@BrianFegter ¡Gracias, hermano! ¡Lo entendí! Eso funcionó. Una pregunta más rápida. En mi tema antiguo tenía un JavaScript de compra/venta que agregué a la sección de pie de página del tema (me dijeron que lo hiciera para que mi tema cargara primero). ¿Estaría bien agregar ese código aquí, o debería agregarlo al pie de página?

Rick Smith Rick Smith
27 feb 2012 21:05:10

Puedes simplemente agregar otra acción y callback para wp_footer

Brian Fegter Brian Fegter
27 feb 2012 21:08:46

@BrianFegter vale, ¿sugieres poner todo esto en el footer? Como las herramientas de Google para webmasters, etc...? No estoy seguro de cuál es la mejor práctica...

Rick Smith Rick Smith
27 feb 2012 21:13:36

@RickSmith Eso está por encima de mi salario. jaj

Brian Fegter Brian Fegter
27 feb 2012 21:14:07

@BrianFegter Ja,ja..¡gracias! :) ¿Construyes sitios en WordPress?

Rick Smith Rick Smith
27 feb 2012 21:15:36

@BrianFegter Ok, entonces ahora estoy intentando agregar algo de JavaScript a ese plugin. Siguiendo tu ejemplo anterior, ¿cómo agrego JavaScript a él?

Rick Smith Rick Smith
27 feb 2012 22:00:54

Por favor revisa mi última edición. :)

Brian Fegter Brian Fegter
27 feb 2012 22:14:01

si es posible, ¿puedes explicar qué hace cada línea?

Ooker Ooker
19 feb 2021 18:04:48
Mostrar los 13 comentarios restantes
5

Añadir un fragmento de código

HTML

Si deseas añadir un fragmento de código, por ejemplo una meta etiqueta, dentro del <head>, entonces deberías usar la acción wp_head:

add_action( 'wp_head', 'wpse_43672_wp_head' );
function wpse_43672_wp_head() : void {
    ?>
    <meta ..... />
    <?php
}

También existen admin_head y wp_footer

Javascript & CSS

Podrías usar el código anterior para añadir Javascript, pero en su lugar, el JS personalizado debería encolarse como un archivo JS, o incluirse como JS en línea mediante wp_add_inline_script adjunto a un handle JS ya encolado.

https://developer.wordpress.org/reference/functions/wp_add_inline_script/

Esto también aplica para CSS, que tiene wp_add_inline_style https://developer.wordpress.org/reference/functions/wp_add_inline_style/

Modificar el encabezado del sitio

Ten en cuenta que una vez que hagas esto, no verás los cambios realizados en el tema padre cuando se actualice para aquellos archivos que has reemplazado y modificado.

En un tema de bloques

Si tu tema es un tema de bloques, entonces puedes hacer esto yendo al editor del sitio y realizando cambios en el área de administración.

En un tema clásico

Si tu sitio usa un tema clásico de PHP, entonces puedes usar un tema hijo.

Para modificar el encabezado en un tema hijo, copia el archivo header.php del tema padre al tema hijo y luego modifícalo. WordPress detectará que tienes un header.php en tu tema hijo y usará ese en lugar del header.php del tema padre.

Cualquier archivo de plantilla que coloques en tu tema hijo tendrá prioridad sobre el mismo archivo en el tema padre cuando WordPress lo llame.

Cualquier cosa que vaya dentro de la etiqueta <head> debería hacerse usando algo como la función en la respuesta de Brian. Si es específico del tema, puedes colocarlo en un archivo llamado functions.php en la carpeta de tu tema sin pasos adicionales.

27 feb 2012 18:36:33
Comentarios

Tom, gracias. Entonces, si necesito instalar 5 fragmentos de código diferentes en el header.php, ¿podría simplemente crear un solo plugin e instalarlo? ¿Todavía necesitaría copiar el archivo header.php en mi tema hijo?

Rick Smith Rick Smith
27 feb 2012 19:58:53

Sí, no hay razón para crear 5 plugins

Tom J Nowell Tom J Nowell
27 feb 2012 19:59:39

@RickSmith Si estás abstraiendo a un plugin, no hay razón para copiar el header.php. :)

Brian Fegter Brian Fegter
27 feb 2012 20:16:10

El problema con esta solución es que cuando el tema se actualice, te perderás las correcciones en header.php realizadas por el autor.

Matthew S Matthew S
24 feb 2016 09:32:42

¿WordPress sobrescribe el archivo completo o simplemente está agregando nuevo contenido al archivo padre?

Ooker Ooker
31 may 2020 11:44:10
2

Gracias a Brian Fegter. Si esta respuesta te ayuda, por favor califica la respuesta de Brian aquí arriba.

Este es un ejemplo completamente funcional de cómo agregar elementos al "header" mediante su propio plugin. En este caso, estoy agregando las propiedades de Facebook Open Graph para los botones Compartir y Me gusta.

Solo crea un archivo PHP con el nombre especificado en "Plugin Script" al inicio del código de ejemplo, colócalo en una carpeta con el mismo nombre sin la extensión, obviamente, y copia esta carpeta en el destino "/wp-content/plugins".

Luego, dentro de "WordPress", actualiza la sección "Plugins" y verás tu nuevo plugin instalado. Solo actívalo, y tus páginas comenzarán a contener los metadatos de Open Graph de Facebook y Twitter.

Descripción de la imagen aquí

MUY IMPORTANTE: El archivo PHP debe estar codificado en UTF-8 sin BOM, y no debe tener absolutamente ningún carácter al final. Debes asegurarte de esto.

<?php
/*
    Plugin Name: Mi Protocolo Open Graph de Facebook
    Plugin Script: my-facebook-open-graph-protocol.php
    Plugin URI: 
    Description: Agrega el Protocolo Open Graph de Facebook al encabezado
    Author: Diego Soto (Gracias a Brian Fegter)
    Donate Link: 
    License: GPL    
    Version: 0.1-alpha
    Author URI: https://wordpress.stackexchange.com/questions/43672/how-to-add-code-to-header-php-in-a-child-theme
    Text Domain: myfogp
    Domain Path: languages/
*/

/*  Copyright 2014 Diego Soto  (http://disientoconusted.blogspot.com.ar/)

    Este programa es software libre; puedes redistribuirlo y/o modificarlo
    bajo los términos de la Licencia Pública General GNU, versión 2, según
    publicada por la Free Software Foundation.

    Este programa se distribuye con la esperanza de que sea útil,
    pero SIN NINGUNA GARANTÍA; sin siquiera la garantía implícita de
    COMERCIALIZACIÓN o IDONEIDAD PARA UN PROPÓSITO PARTICULAR. Consulta la
    Licencia Pública General GNU para más detalles.

    Deberías haber recibido una copia de la Licencia Pública General GNU
    junto con este programa; si no, escribe a la Free Software
    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
*/

add_action('wp_head', 'wpse_43672_wp_head');

function wpse_43672_wp_head(){
    $title = get_the_title() ." &lsaquo; ". get_bloginfo( "name", "display" );

    $src = wp_get_attachment_image_src( get_post_thumbnail_id(get_the_ID()), array( 90,55 ), false, "" ); 

    $face_metad = get_post_meta(get_the_ID(), "metadescription", true);

    $twitter_metad = get_post_meta(get_the_ID(), "metadescription140", true);
    if (empty($twitter_metad)) 
        $twitter_metad = $face_metad;

    //Cierra las etiquetas PHP 
    ?>    
    <meta property="og:title" content="<?php echo esc_attr($title); ?>" />
    <meta property="og:image" content="<?php echo esc_attr($src[0]); ?>" />
    <meta property="og:url" content="<?php the_permalink(); ?>" />
    <meta property="og:description" content="<?php if (!empty($face_metad)) echo esc_attr($face_metad); else the_excerpt(); ?>" />

    <meta name="twitter:title" content="<?php echo esc_attr($title); ?>" />
    <meta name="twitter:image" content="<?php echo esc_attr($src[0]); ?>" />    
    <meta name="twitter:url" content="<?php the_permalink(); ?>" />
    <meta name="twitter:description" content="<?php if (!empty($twitter_metad)) echo esc_attr($twitter_metad); else the_excerpt(); ?>" />
    <?php //Abre las etiquetas PHP
}
?>

Para aquellos interesados en la funcionalidad del plugin.

  • El título será la concatenación del nombre de la página actual y el nombre del sitio.

  • Si existe un campo personalizado llamado "metadescription", el plugin intentará tomar la descripción de este campo. De lo contrario, tomará la descripción del extracto.

  • Como imagen, el plugin intentará usar la miniatura de la imagen destacada en la página.

14 ago 2014 02:12:12
Comentarios

Por favor usa esc_attr() para los contenidos de los atributos HTML.

fuxia fuxia
14 ago 2014 03:27:38

Modifiqué para usar esc_attr() como me indicaste. Gracias.

Diego Soto Diego Soto
14 ago 2014 07:19:48