Incluir archivos en el archivo functions del tema hijo

26 oct 2010, 08:41:35
Vistas: 47.7K
Votos: 9

Típicamente en el archivo functions de mi tema, suelo requerir otros archivos para mantener las cosas ordenadas.

require_once("foo.php");

Ahora trabajando en un tema hijo, me gustaría hacer lo mismo. Estoy agregando opciones personalizadas de administración y parece imposible incluir código. He mostrado la ruta con echo para asegurarme de que estoy llamando al archivo correcto y efectivamente está llamando a la ubicación correcta, pero nada dentro de ese archivo parece ejecutarse. El código funciona bien si se coloca dentro del archivo functions del tema hijo.

1
Comentarios

¿Podrías publicar más de tu código para mostrar exactamente lo que estás haciendo?

MikeSchinkel MikeSchinkel
26 oct 2010 09:45:00
Todas las respuestas a la pregunta 8
2
20

En un tema hijo, la forma correcta es:

require_once( get_stylesheet_directory() . '/foo.php');

Mientras que en el tema padre todavía puedes usar:

require_once ( get_template_directory() . '/foo.php' );

get_template_directory() sigue funcionando en el tema hijo, pero lamentablemente apunta al directorio del tema padre. En tu caso es útil

23 ago 2012 22:38:43
Comentarios

Tuve que usar una '/' por ejemplo require_once( get_stylesheet_directory() . '/foo.php');

ssaltman ssaltman
2 ene 2020 21:20:07

gracias @ssaltman. Tienes razón, la documentación lo confirma: https://developer.wordpress.org/reference/functions/get_stylesheet_directory/ Edité mi respuesta

Christian Christian
5 ene 2020 16:45:34
3
14

Los temas hijos hacen referencia a los temas padres por nombre de directorio, y en una instalación normal todos tus temas se encuentran en wp-content/themes/, así que diría que está bien hacer referencia a esos temas por su ruta relativa:

include '../parent-theme/some-file.php';

Si eso te hace sentir incómodo, observo las siguientes constantes en WordPress 3.0.1 con un tema hijo twentyten llamado tt-child:

TEMPLATEPATH     /home/adam/public_html/wp3/wp-content/themes/twentyten
STYLESHEETPATH   /home/adam/public_html/wp3/wp-content/themes/tt-child

Así que puedes hacer lo siguiente en tu tema hijo para hacer referencia al directorio del tema padre:

include TEMPLATEPATH . '/some-file.php';
26 oct 2010 15:50:42
Comentarios

La constante STYLESHEETPATH era lo que estaba buscando. Los includes funcionan en un tema hijo si usas eso.

curtismchale curtismchale
26 oct 2010 17:21:14

Realmente me sorprende que incluso consideres usar una ruta hard coded... un tema no debería funcionar solo en un entorno. Podría entender si get_template_directory() no existiera... pero sí existe. Acabo de darme cuenta de que es una pregunta del 2010 lol

Christian Christian
23 ago 2012 22:44:27

La primera opción no funcionó para mí. No estoy seguro por qué cuando ciertamente tenía la ruta relativa correcta al archivo padre. La segunda opción sí funcionó para mí, así que gracias.

bowlerae bowlerae
10 jun 2016 16:58:19
0

Definitivamente no quieres codificar la URL directamente. La forma correcta de hacerlo es:

require_once( get_stylesheet_directory(). '/my_included_file.php' );

Más información en Wordpress Codex

Ahora, si estás modificando por ejemplo header.php que tiene un include, lo referenciarías así:

require_once( get_stylesheet_directory() . '/../parenthteme/my_included_file.php' );
19 mar 2013 21:39:19
1

Hola @curtismchale:

No sé si esto es o no, pero necesitas incluir comillas alrededor de foo.php, así:

require_once('foo.php');

¿Resuelve eso tu problema?

26 oct 2010 09:46:24
Comentarios

Buena observación. Lo pasé por alto aquí pero lo tenía en el tema hijo.

curtismchale curtismchale
26 oct 2010 17:15:27
0

Usa <?php get_template_part( 'nombre-de-la-pagina-aqui' ); ?>. Sin la extensión .php

12 jul 2011 03:03:41
0

La forma más simple y mejor de incluir archivos tanto en el functions.php del tema como en el desarrollo de plugins es usando dirname(__FILE__).

En tu caso solo necesitas esto:

require_once dirname(__FILE__)."/foo.php";

Si el archivo que quieres incluir está en otra carpeta, por ejemplo inc, usarías esto:

require_once dirname(__FILE__)."/inc/foo.php";

Espero que esto ayude a alguien en el futuro.

15 ago 2021 03:05:32
0

Es completamente posible y normal hacer includes en functions.php.

Yo lo hago así en mi tema hijo (php es un subdirectorio para código):

include 'php/core.php';

Si tienes problemas sin razón aparente, prueba activando el modo de depuración en wp-config.php:

define('WP_DEBUG', true);

Podría haber errores relevantes ocurriendo, pero que no se muestran.

26 oct 2010 08:57:46
1

Creo que esta es la mejor manera de obtener la ruta de tu tema hijo

<?php $get_my_path = dirname( get_bloginfo('stylesheet_url') ); ?>
<?php require_once( $get_my_path. '/my_included_file.php' ); ?>

Obtuve la idea de http://dynamicweblab.com/2013/02/get-template-path-in-wordpress-child-themes/

19 mar 2013 22:34:35
Comentarios

require_once necesita una ruta, no una URL.

fuxia fuxia
19 mar 2013 23:04:15