Cómo anular un archivo principal en un tema secundario de WordPress cuando se requiere un archivo principal en functions.php

5 minutos de lectura

avatar de usuario
InterlocutorNo27

Soy bastante nuevo en el diseño y la codificación de temas de WordPress y recientemente comencé un tema secundario basado en el tema Sydney que se ofrece de forma gratuita en WordPress. Me he topado con un obstáculo que no puedo resolver.

Hay un archivo PHP que se está llamando a través del padre functions.php que necesito personalizar y que no se debe modificar cuando actualice el tema principal. Este archivo se llama template-tags.php y se encuentra dentro de una carpeta “inc”. Ahora, supuestamente, de acuerdo con el códice de WordPress (que he consultado antes de preguntar aquí), cualquier archivo duplicado en el tema secundario (excepto el functions.php) anulará automáticamente los del tema principal. No sé si esto funciona también para archivos dentro de carpetas, pero creo que el hecho de que este archivo en particular se llame en el padre functions.php hace que sea el archivo principal el que se está cargando. Asumo esto porque lo mismo ocurre con los archivos de script de estilo CSS y JS que tuve que poner en cola en el tema secundario para obtener mis propias versiones personalizadas.

Sin embargo, no hay nada en el códice de WordPress que explique cómo anular un archivo que ya se está llamando en el directorio principal. functions.php. Y no puedo encontrar nada en ningún otro lugar (ni siquiera en estas preguntas: el tema secundario de WordPress anula un tema principal incluido, Anulando las funciones del tema principal con un tema secundario en WordPress, Cómo anular una función de tema principal no conectable de una no función. php?, tema secundario de WordPress – copia de functions.php – no se puede “volver a declarar”) que me ayuda específicamente.

Entonces, para resumirlo todo:

  • El tema principal tiene una carpeta “inc” con el archivo template-tags.php en eso.
  • Mi tema hijo también tiene una carpeta “inc” con el archivo template-tags.php en eso.
  • El tema principal functions.php tiene el siguiente código que llama a su archivo:

    require get_template_directory() . '/inc/template-tags.php';
    
  • Cualquier cosa que intente agregar en la de mi hijo functions.php archivo que llama a su template-tags.php archivo dará como resultado un error porque, obviamente, WP no puede requerir lo mismo dos veces.

Aparte de comentar la llamada en el teléfono de los padres functions.phpque no me parece una solución práctica sino más bien una solución alternativa, no tengo idea de qué más hacer.

Agradecería cualquier aporte en este momento. ¡Gracias por adelantado!

  • es una buena práctica permitir que los archivos de temas secundarios anulen la plantilla principal. Pero si el desarrollador ha utilizado require, no puede deslizar su propio archivo allí, de todos modos suena como una página de funciones. Es posible que vea dónde se conectan las funciones que desea anular y puede desengancharlas y conectar las suyas propias.

    – David

    13/09/2015 a las 21:53

  • Hola David, gracias por la respuesta. Si lo entiendo correctamente, recomienda vincular mi archivo personalizado donde está vinculado el archivo de los padres. Si esto es así, también podría cortar ese enlace en el archivo de los padres y el enlace en functions.php de mi hijo sería el único. Pero luego tendría que tener eso en cuenta e ingresar y hacerlo cada vez que se actualice el tema. Y parece que este lo hace a menudo. Empecé a mediados de la semana pasada y ya tenía una actualización hoy; el 15, porque está en la versión 1.15. Preferiría evitar tener que tener que hacer siempre esto. ¡Gracias!

    – Interlocutor No27

    13/09/2015 a las 22:40

  • no, estoy diciendo cómo es 🙂 pero lo que sería posible es mirar cada función individualmente y desengancharlas si es posible, por ejemplo, si una función está enganchada a init, desenganche y enganche la suya propia. pero a juzgar por el nombre del archivo, las etiquetas de plantilla, ¿se usan en las plantillas? podrías simplemente crear tus propias plantillas usando tus propias etiquetas, etc…

    – David

    13 de septiembre de 2015 a las 23:04

Hola @PreguntadorNo27,

Ha pasado mucho tiempo desde que preguntaste esto, pero también he estado buscando una respuesta durante 2 días porque tenía el mismo problema. Ahí está la respuesta, simple como “Hola”:

  1. no necesitas el inc carpeta en su tema hijo ni el template-tags.php expediente.
  2. Solo tiene que copiar las funciones que desea anular de su padre template-tags.php y pégalo en tu tema hijo functions.php
    En mi caso, quería anular function mytheme_posted_on() de mi padre template-tags.php

Y ahora está funcionando. Gracias a https://wordpress.org/support/topic/inc-folder-in-child-theme (Respuesta de Stephencottontail)

  • Según tengo entendido, el tema secundario solo amplía el tema principal y agrega más funciones. Si solo copia (y no corta) la función, el servidor arrojará un error porque intenta cargar la misma función varias veces. Me estoy perdiendo de algo ?

    – Víctor

    9 sep 2020 a las 16:02

avatar de usuario
Yasar

Tuve un problema similar en el que quería hacer cambios en el diseño del encabezado en mi tema secundario dentro de template-tags.php.

La solución que funcionó para mí fue usar la siguiente línea en mi archivo functions.php en mi tema secundario: require get_stylesheet_directory() . ‘/inc/plantilla-etiquetas.php’;

Estaba usando la línea original de Parent ellos en functions.php: require get_template_directory() . ‘/inc/plantilla-etiquetas.php’;

El uso de la función get_template_directory() no funcionaba porque esta función siempre devolverá el directorio del tema principal.

El uso de la función get_stylesheet_directory() funcionó porque recupera el directorio del tema secundario.

Sí, sé que el nombre de la función “get_stylesheet_directory()” no es muy intuitivo, pero en realidad devolverá la ubicación del directorio del tema secundario.

Tomó un tiempo resolver esto buscando en línea. Encontré esta referencia en línea que me ayudó en mi búsqueda: Cómo anular un archivo principal en un tema secundario de WordPress cuando se requiere un archivo principal en functions.php

  • oye ese link es esta pregunta, me siento muy confundida

    – Vlad Havriuk

    22 oct 2021 a las 19:11

avatar de usuario
nader haji

Deberías usar

get_stylesheet_directory() que se refiere al directorio de temas activos

en vez de get_template_directory() que se refiere al directorio del tema principal

https://www.csestack.org/overwrite-wordpress-php-file-subfolder-child-theme/

¿Ha sido útil esta solución?

Cómo anular un archivo principal en un tema secundario de WordPress cuando se requiere un archivo principal en functions.php

5 minutos de lectura

avatar de usuario
InterlocutorNo27

Soy bastante nuevo en el diseño y la codificación de temas de WordPress y recientemente comencé un tema secundario basado en el tema Sydney que se ofrece de forma gratuita en WordPress. Me he topado con un obstáculo que no puedo resolver.

Hay un archivo PHP que se está llamando a través del padre functions.php que necesito personalizar y que no se debe modificar cuando actualice el tema principal. Este archivo se llama template-tags.php y se encuentra dentro de una carpeta “inc”. Ahora, supuestamente, de acuerdo con el códice de WordPress (que he consultado antes de preguntar aquí), cualquier archivo duplicado en el tema secundario (excepto el functions.php) anulará automáticamente los del tema principal. No sé si esto funciona también para archivos dentro de carpetas, pero creo que el hecho de que este archivo en particular se llame en el padre functions.php hace que sea el archivo principal el que se está cargando. Asumo esto porque lo mismo ocurre con los archivos de script de estilo CSS y JS que tuve que poner en cola en el tema secundario para obtener mis propias versiones personalizadas.

Sin embargo, no hay nada en el códice de WordPress que explique cómo anular un archivo que ya se está llamando en el directorio principal. functions.php. Y no puedo encontrar nada en ningún otro lugar (ni siquiera en estas preguntas: el tema secundario de WordPress anula un tema principal incluido, Anulando las funciones del tema principal con un tema secundario en WordPress, Cómo anular una función de tema principal no conectable de una no función. php?, tema secundario de WordPress – copia de functions.php – no se puede “volver a declarar”) que me ayuda específicamente.

Entonces, para resumirlo todo:

  • El tema principal tiene una carpeta “inc” con el archivo template-tags.php en eso.
  • Mi tema hijo también tiene una carpeta “inc” con el archivo template-tags.php en eso.
  • El tema principal functions.php tiene el siguiente código que llama a su archivo:

    require get_template_directory() . '/inc/template-tags.php';
    
  • Cualquier cosa que intente agregar en la de mi hijo functions.php archivo que llama a su template-tags.php archivo dará como resultado un error porque, obviamente, WP no puede requerir lo mismo dos veces.

Aparte de comentar la llamada en el teléfono de los padres functions.phpque no me parece una solución práctica sino más bien una solución alternativa, no tengo idea de qué más hacer.

Agradecería cualquier aporte en este momento. ¡Gracias por adelantado!

  • es una buena práctica permitir que los archivos de temas secundarios anulen la plantilla principal. Pero si el desarrollador ha utilizado require, no puede deslizar su propio archivo allí, de todos modos suena como una página de funciones. Es posible que vea dónde se conectan las funciones que desea anular y puede desengancharlas y conectar las suyas propias.

    – David

    13/09/2015 a las 21:53

  • Hola David, gracias por la respuesta. Si lo entiendo correctamente, recomienda vincular mi archivo personalizado donde está vinculado el archivo de los padres. Si esto es así, también podría cortar ese enlace en el archivo de los padres y el enlace en functions.php de mi hijo sería el único. Pero luego tendría que tener eso en cuenta e ingresar y hacerlo cada vez que se actualice el tema. Y parece que este lo hace a menudo. Empecé a mediados de la semana pasada y ya tenía una actualización hoy; el 15, porque está en la versión 1.15. Preferiría evitar tener que tener que hacer siempre esto. ¡Gracias!

    – Interlocutor No27

    13/09/2015 a las 22:40

  • no, estoy diciendo cómo es 🙂 pero lo que sería posible es mirar cada función individualmente y desengancharlas si es posible, por ejemplo, si una función está enganchada a init, desenganche y enganche la suya propia. pero a juzgar por el nombre del archivo, las etiquetas de plantilla, ¿se usan en las plantillas? podrías simplemente crear tus propias plantillas usando tus propias etiquetas, etc…

    – David

    13 de septiembre de 2015 a las 23:04

Hola @PreguntadorNo27,

Ha pasado mucho tiempo desde que preguntaste esto, pero también he estado buscando una respuesta durante 2 días porque tenía el mismo problema. Ahí está la respuesta, simple como “Hola”:

  1. no necesitas el inc carpeta en su tema hijo ni el template-tags.php expediente.
  2. Solo tiene que copiar las funciones que desea anular de su padre template-tags.php y pégalo en tu tema hijo functions.php
    En mi caso, quería anular function mytheme_posted_on() de mi padre template-tags.php

Y ahora está funcionando. Gracias a https://wordpress.org/support/topic/inc-folder-in-child-theme (Respuesta de Stephencottontail)

  • Según tengo entendido, el tema secundario solo amplía el tema principal y agrega más funciones. Si solo copia (y no corta) la función, el servidor arrojará un error porque intenta cargar la misma función varias veces. Me estoy perdiendo de algo ?

    – Víctor

    9 sep 2020 a las 16:02

avatar de usuario
Yasar

Tuve un problema similar en el que quería hacer cambios en el diseño del encabezado en mi tema secundario dentro de template-tags.php.

La solución que funcionó para mí fue usar la siguiente línea en mi archivo functions.php en mi tema secundario: require get_stylesheet_directory() . ‘/inc/plantilla-etiquetas.php’;

Estaba usando la línea original de Parent ellos en functions.php: require get_template_directory() . ‘/inc/plantilla-etiquetas.php’;

El uso de la función get_template_directory() no funcionaba porque esta función siempre devolverá el directorio del tema principal.

El uso de la función get_stylesheet_directory() funcionó porque recupera el directorio del tema secundario.

Sí, sé que el nombre de la función “get_stylesheet_directory()” no es muy intuitivo, pero en realidad devolverá la ubicación del directorio del tema secundario.

Tomó un tiempo resolver esto buscando en línea. Encontré esta referencia en línea que me ayudó en mi búsqueda: Cómo anular un archivo principal en un tema secundario de WordPress cuando se requiere un archivo principal en functions.php

  • oye ese link es esta pregunta, me siento muy confundida

    – Vlad Havriuk

    22 oct 2021 a las 19:11

avatar de usuario
nader haji

Deberías usar

get_stylesheet_directory() que se refiere al directorio de temas activos

en vez de get_template_directory() que se refiere al directorio del tema principal

https://www.csestack.org/overwrite-wordpress-php-file-subfolder-child-theme/

¿Ha sido útil esta solución?