¿Cómo sobreescribir get_template_directory() en un tema hijo?

27 jun 2015, 09:03:26
Vistas: 41.1K
Votos: 13

¿Es posible reemplazar un get_template_directory() en el archivo functions.php de mi tema hijo?

Quiero hacer cambios en el archivo:

/**
* Cargar archivo de tipos de publicaciones personalizadas.
*/
require get_template_directory() . '/inc/post-types.php';

Obviamente, preferiría que mi trabajo no se sobrescriba cuando actualice mi tema, ¿puedo anular el registro del archivo del tema padre y luego volver a registrar el archivo de mi tema hijo en el archivo functions del tema hijo?

4
Comentarios

¿Hay alguna acción en el post-types.php? Si es así, quizás puedas eliminar la acción, o tal vez un hook en ese archivo.

czerspalace czerspalace
27 jun 2015 10:12:37

El registro de tipos de contenido tiene una acción que te permite modificarlos, tal vez si explicas qué quieres cambiar en ese archivo, no necesitarás reemplazarlo por completo.

Milo Milo
27 jun 2015 19:21:20

Necesito cambiar mucho. Principalmente los nombres y los supports de los diferentes tipos de contenido personalizados.

Heather Heather
28 jun 2015 00:03:57

Puedes usar get_template_directory_uri() en un tema hijo.

Pardeep Pardeep
4 oct 2019 13:43:19
Todas las respuestas a la pregunta 2
1
30

Respuesta tardía, pero en WordPress 4.7 se introdujeron dos nuevas funciones para abordar esta cuestión.

get_theme_file_path() (para rutas absolutas de archivos) y get_theme_file_uri() (para URLs) funcionan igual que get_template_part() en el sentido de que primero buscarán automáticamente el archivo en el tema hijo, y si no lo encuentran, recurrirán al tema padre.

En tu ejemplo, podrías reescribirlo usando WordPress 4.7 de la siguiente manera:

/**
* Cargar archivo de Custom Post Types.
*/
require get_theme_file_path( 'inc/post-types.php' );

Más información aquí: https://make.wordpress.org/core/2016/09/09/new-functions-hooks-and-behaviour-for-theme-developers-in-wordpress-4-7/

9 dic 2016 21:32:03
Comentarios

No veo cómo esto resuelve el problema, cuando el creador del tema ha puesto require( get_template_directory() . '/includes/somefile.php' ); en el functions.php del tema padre. ¿Cómo puedo reemplazar somefile.php, manteniendo el código del tema padre sin modificar? Entiendo que el creador del tema padre podría haber usado una función mejor, pero no lo hizo.

Fanky Fanky
29 oct 2021 17:15:42
1
15

Debes usar get_stylesheet_directory_uri() en lugar de get_template_directory() en tu tema hijo.

Del Codex de WordPress:

get_template_directory_uri()

En caso de que se esté usando un tema hijo, esta función devolverá la URI del directorio del tema padre. get_template_directory_uri() debe usarse para recursos que no están destinados a ser incluidos o sobrescritos por un tema hijo. Usa get_stylesheet_directory_uri() para incluir recursos que sí están destinados a ser incluidos o sobrescritos por el tema hijo.

get_stylesheet_directory_uri()

Cuando se está usando un tema hijo, esta función devolverá la URI del directorio del tema hijo. Usa get_template_directory_uri() para evitar que los recursos sean sobrescritos por un tema hijo.

27 jun 2015 09:57:31
Comentarios

Sí, pero dado que get_template_directory() está en mi tema padre, ¿hay algo que pueda hacer desde mi tema hijo para cambiar eso?

Heather Heather
27 jun 2015 18:21:00