get_template_directory_uri() en tema hijo apuntando al tema hijo

17 may 2017, 00:09:17
Vistas: 25.6K
Votos: 8

Según la documentación (https://codex.wordpress.org/Child_Themes y https://developer.wordpress.org/reference/functions/get_template_directory_uri/), tengo entendido que get_template_directory_uri() debería devolver la URL del directorio del tema padre cuando se usa dentro de un tema hijo. Pero esto no está sucediendo en mi caso.

En un tema hijo que estoy desarrollando, cuando uso get_template_directory_uri() devuelve la URL del directorio del tema hijo, no la del directorio del tema padre. Si hago clic en Detalles del Tema para el tema hijo en la página de administración de temas, WordPress indica que el tema es hijo de otro tema, exactamente como esperaría. Tengo una

Template: parent

línea en el style.css del tema hijo.

Otros hechos relevantes:

  • Estoy usando WordPress Multi-Sitio
  • Desarrollé el tema padre y lo estoy usando en uno de los otros sitios dentro de mi Multi-Sitio y funciona perfectamente
  • Ambos temas (padre e hijo) están activados en la Red y son accesibles en el sitio en el que estoy trabajando
  • Intenté apuntar el tema hijo al tema twentyfourteen y estoy viendo el mismo comportamiento, así que no creo que sea un problema con el tema padre
  • Desactivé todos mis plugins para ver si uno de ellos era el problema sin éxito - ninguno de los plugins parece ser la causa de esto
  • Creé una copia de twentyfourteen y lo hice un tema hijo de mi tema padre y ocurre el mismo problema
  • En mi copia de twentyfourteen, también agregué una línea Template: en style.css para hacerlo un tema hijo de twentyfourteen y estoy viendo el mismo comportamiento (es decir, la página de administración de temas indica que el tema copiado es hijo de twentyfourteen pero la función get_template_directory_uri no me está dando el directorio del tema padre)

¿Alguien tiene sugerencias sobre cuál podría ser el problema aquí? ¿O estoy malinterpretando cómo se supone que debe funcionar get_template_directory_uri()?

4
Comentarios

¿Cuál es tu línea actual de Template: parent?

hwl hwl
17 may 2017 02:21:11

Si usas la combinación de tema hijo/padre en una instalación de un solo sitio, ¿funciona correctamente la función get_template_directory_uri()?

Nathan Johnson Nathan Johnson
17 may 2017 03:19:52

@hwl - al intentar apuntar a la plantilla Twenty Fourteen como padre, la línea era "Template: twentyfourteen". Y la página de gestión de temas indica que el tema hijo estaba apuntando a Twenty Fourteen como tema padre.

Bill Bill
17 may 2017 21:30:43

@NathanJohnson - Instalé un sitio de prueba de WordPress (sin multisitio, sin plugins, muy básico) y get_template_directory_uri() funciona como se esperaba - apunta correctamente al tema padre en un tema hijo. He estado copiando lentamente los cambios de configuración al sitio de prueba (es decir, convirtiéndolo en multisitio, wp-config.php, .htaccess ...) y todavía no he podido reproducir el problema en el sitio de prueba, así que no sé cuál es el problema todavía. Puede que simplemente tenga que hacer una copia de seguridad de la base de datos en el multisitio en el que estoy trabajando y reinstalarlo.

Bill Bill
17 may 2017 21:33:34
Todas las respuestas a la pregunta 2
2
11

Lo que necesitas es get_stylesheet_directory_uri, que funciona exactamente igual que get_template_directory_uri pero devolverá el directorio del tema hijo si estás usando uno, y devolverá el directorio del tema padre si no lo estás usando.

echo get_stylesheet_directory_uri();
17 may 2017 00:35:26
Comentarios

Gracias por la respuesta, pero estoy usando un tema hijo e intentando obtener la hoja de estilos del padre, no la del hijo. Estoy siguiendo las instrucciones en https://codex.wordpress.org/Child_Themes para encolar la hoja de estilos del padre junto con la del hijo en el tema hijo, pero la función get_template_directory_uri() que usan en su ejemplo devuelve la URL del tema hijo, lo cual no me ayuda para obtener la URL de la hoja de estilos del padre.

Bill Bill
17 may 2017 02:31:48

Oh, lo siento, entendí mal tu pregunta. 1) ¿Hay alguna URL que muestre este comportamiento para que podamos echar un vistazo más de cerca? 2) Solo para asegurarme, supongo que estás usando el handle correcto cuando encolas el estilo del tema padre?

Celso Bessa Celso Bessa
17 may 2017 03:58:17
2

CAUSA

Después de investigar el código de WordPress y la base de datos, el problema era que

get_option('template')

que es llamado por

wp-includes/theme.php : get_template()

estaba devolviendo el tema hijo en lugar del tema padre, pero solo para un sitio específico dentro de mi multisitio. Al revisar la tabla wp_{ID-DEL-SITIO}_options para ese sitio, el registro de la base de datos donde

option_name = "template"

apuntaba al tema hijo, no al tema padre. No estoy seguro de por qué la información del tema en la página de gestión de temas del Dashboard mostraba que mi tema hijo problemático era efectivamente un tema hijo cuando el registro en la base de datos no era correcto.

En cuanto a por qué se corrompió esta entrada en la base de datos, no estoy seguro, pero cuando estaba desarrollando inicialmente el tema hijo problemático, rompió mi WordPress Multisitio (incluyendo el Dashboard), así que renombré temporalmente la carpeta del tema en el servidor para que WordPress usara un tema por defecto. Quizás esto fue la causa.

SOLUCIÓN

Cambiar el tema a otro diferente y luego volver al tema hijo solucionó el problema. Esto hizo que el registro relevante en la base de datos (es decir, option_name = "template" en wp_{ID-DEL-SITIO}_options) se actualizara al valor correcto, es decir, al tema padre.

18 may 2017 23:29:01
Comentarios

Eres un héroe. Gracias por compartir tu solución aquí. Heredé un tema "child" mal hecho que no hacía referencia correctamente al tema padre. Tu solución fue exactamente lo que necesitaba.

Glitcher Glitcher
1 ago 2018 13:59:34

El héroe que necesitamos, pero no merecemos. También me funcionó. Gracias.

Sajidur Rahman Sajidur Rahman
15 sept 2022 12:40:02