¿Cómo sobreescribir get_template_directory() en un tema hijo?
¿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?
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/

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.

Debes usar get_stylesheet_directory_uri()
en lugar de get_template_directory()
en tu tema hijo.
Del Codex de WordPress:
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.
