Los archivos PHP de Childs no sobrescriben los archivos PHP de los padres

2

Tengo un archivo php ubicado en:

.../wp-content/themes/kallyas-child/pagebuilder/elements/TH_TeamBox/TH_TeamBox.php

Estoy tratando de usar el archivo anterior para sobrescribir el archivo TH_TeamBox.php del padre que se encuentra aquí:

.../wp-content/themes/kallyas/pagebuilder/elements/TH_TeamBox/TH_TeamBox.php

El tema de mi hijo está activo y he creado la ruta del archivo en el tema de mi hijo para imitar el tema principal. Tenía la impresión de que si lo hiciera, podría editar los archivos PHP a mi gusto en el tema de mi hijo sin perder mis cambios cuando actualizo el tema principal.

He estado desarrollando durante un tiempo, pero como puedes ver, soy nuevo (er) para Wordpress. Cualquier información sobre por qué el archivo .php de mi hijo no está sobrescribiendo su archivo .php de los padres sería muy apreciada. Estaré encantado de proporcionarle más información que pueda necesitar para ayudarme, ¡gracias! :)

    
pregunta domdambrogia 07.04.2016 - 00:30

3 respuestas

6

Los temas secundarios pueden anular plantillas , no simplemente archivos PHP arbitrarios.

En WordPress, un tema consiste en un grupo de archivos PHP que se usan como plantillas. Puede encontrar una lista de esos archivos en la Jerarquía de plantillas .

Esos archivos de plantillas específicas se pueden anular con otros nuevos, pero a menos que el tema principal tenga algunos medios especiales para anular otros archivos, los archivos simplemente los incluirá el padre como parte de una estructura de soporte o como bibliotecas para un elemento de creación de páginas. El código no puede simplemente ser anulado de esa manera.

    
respondido por el Otto 07.04.2016 - 00:34
0

Tengo una solución para usted que puede ser mejor que solo escribir modificaciones en los archivos de temas principales, lo cual, por supuesto, no es deseable por las razones que mencionó Otto.

Si agrega estas dos líneas de PHP en la parte superior de cualquier archivo del que desee utilizar una copia modificada en su estructura de directorios de temas secundarios:

<?php
    $filepath = str_replace(get_option('template'), get_option('stylesheet'), __FILE__);
    if (file_exists($filepath)) {include($filepath); return;}
?>

Por supuesto, aún deberá hacer esto de nuevo en cada archivo al que haga esto después de una actualización del tema, por lo que se recomienda tomar nota de estos archivos , y probablemente ya no se actualice el tema. directamente, pero en lugar de descargarlo, agregue estas líneas nuevamente localmente y cargue la copia actualizada por FTP.

Puede parecer que no valga la pena esa molestia, pero lo que haría es permitirle mantener sus archivos modificados personalizados juntos en la estructura de su tema hijo y no ser sobrescrito por ninguna actualización del tema. Una vez más, simplemente volverá a agregar esas líneas a la parte superior de cualquier archivo principal que quiera seguir reemplazando.

También significa que usted podría eliminar la copia del archivo de funciones secundarias modificadas sin interrumpir su sitio (es decir, probar contra un archivo de tema actualizado), ya que esto se aplicará al archivo original si un no se encuentra copia modificada.

(CEM Typo Edit: reemplazó la primera llamada get_options con get_option .)

    
respondido por el majick 07.04.2016 - 09:51
0

La solución es mover los cambios necesarios a su archivo secundario del tema functions.php .

Si se trata de una función, normalmente habrá una sentencia if que verifica si ya está declarada, en este caso, puede copiar la función a functions.php con el mismo nombre y realizar los cambios necesarios, tendrá Prioridad sobre el resto de los archivos de temas. En caso de que la función se haya declarado sin una instrucción if, entonces tiene que cambiar su nombre en functions.php , buscar el archivo de plantilla al que se llama la función, copiarlo en el tema de su hijo y cambiar la llamada a la función en ella.

Si se trata de un widget, copie toda la declaración de la clase en functions.php , cambie su nombre y realice los demás cambios. Asegúrese de registrar también el nuevo widget y lo encontrará disponible en el área de widgets con el nuevo nombre y los cambios.

    
respondido por el Patriot 01.04.2018 - 14:58

Lea otras preguntas en las etiquetas