Tengo el problema de que tengo que cargar el functions.php
archivo de mi tema principal antes de que se cargue el archivo de mi tema secundario functions.php
. Esto es necesario para el procedimiento de configuración e inicio. Miré los ganchos dentro de /wp_core_root/wp-settings.php (named:) do_action('setup_theme');
.
El problema es que no sé cómo conectarme allí, porque el primer archivo que obtengo es el tema secundario functions.php
, por lo que no add_action( 'setup_theme', 'my_init_function' );
funcionará.
Editar:
a) Sé que los complementos se cargan antes que el tema y, por lo tanto, pueden acceder incluso a la consulta inicial, pero no quiero confiar en un complemento.
b) Aquí está el código (acortado) del archivo wp-settings.php
// happens a lot earlier:
do_action( 'plugins_loaded' );
// localize stuff happening here
do_action( 'setup_theme' );
// Load the functions for the active theme, for both parent and child theme if applicable.
if ( TEMPLATEPATH !== STYLESHEETPATH && file_exists( STYLESHEETPATH . '/functions.php' ) )
include( STYLESHEETPATH . '/functions.php' );
if ( file_exists( TEMPLATEPATH . '/functions.php' ) )
include( TEMPLATEPATH . '/functions.php' );
// first available hook, *after* functions.php was loaded
do_action( 'after_setup_theme' );
Quiero evitar dos cosas: primero mucha explicación para los usuarios. En segundo lugar, la posibilidad de que alguien rompa algo si corta la cuerda al eliminar accidentalmente el procedimiento de inicio de los padres. La gente simplemente jugará dentro de functions.php sin arriesgarse a romper nada sin saberlo.
En otras palabras: ¿cómo mantengo limpio mi archivo de funciones de temas infantiles.php, pero tengo el arranque de los temas principales?
¿Algunas ideas? ¡Muchas gracias!
functions.php
. Eche un vistazo alwp-settings.php
archivo "molto loko" en el núcleo (línea: 275-279 @wp 3.1 rc) ... se ve así:if ( TEMPLATEPATH !== STYLESHEETPATH && file_exists( STYLESHEETPATH . '/functions.php' ) ) include( STYLESHEETPATH . '/functions.php' ); if ( file_exists( TEMPLATEPATH . '/functions.php' ) ) include( TEMPLATEPATH . '/functions.php' );
así que no puedo ver una oportunidad ... Y no quiero usar un complemento para arrancar mi tema.include(/path/to/parent/themes/functions.php)
en la parte superior de los temas de su hijo functions.php, entonces todo lo que está allí se carga antes. ¿No?Respuestas:
Justin Tadlock recientemente escribió una gran publicación sobre cómo hacer un mejor archivo functions.php
donde (si no recuerdo mal) se ocupa de este problema exacto.
Lamentablemente, su sitio no funciona en este momento, así que tengo que confiar en mi memoria por ahora.
Estás en el camino correcto con el
after_setup_theme
gancho.Ver ejemplo a continuación.
functions.php
archivos primarios y secundarios .Un poco de código que vale más que mil palabras: el tema principal
function.php
debería verse así:fuente
after_setup_theme
es demasiado tarde, porque los archivos functions.php ya estaban cargados.En primer lugar, no puedes. El archivo child functions.php siempre se carga primero, punto.
En segundo lugar, los temas no se pueden conectar a setup_theme. Los complementos pueden, pero lo primero a lo que se puede conectar un tema es after_setup_theme.
Si su padre está diseñado correctamente, entonces el niño es capaz de anular funciones y cosas en el padre, pero solo cuando se carga primero.
En términos generales, si cree que necesita cargar primero el archivo de funciones de los padres, entonces probablemente lo esté haciendo mal, de alguna manera. Necesitas explicar el problema más grande.
fuente
after_setup_theme
gancho? ¿Simplemente para no "enviar spam" al gancho, o porque es más "emprendedor" o "kool" er? Quiero decir: ¿la idea de "mejor práctica" detrás de los ganchos paralelos específicos del tema "deja los ganchos centrales para los complementos"? (Así es como lo manejo actualmente.)Entonces está tratando de ejecutar código desde las funciones del niño.php, pero después de que se haya cargado el tema principal. Simple, solo use una acción personalizada:
Al final de
parent/functions.php
:En
child/functions.php
:Todos los temas para padres que valen la pena lo hacen de esta manera. Además, tienen varias otras acciones y filtros esparcidos para que el tema secundario los use.
fuente
¿Por qué no incluye el
functions.php
archivo del tema principal en el archivo del tema secundariofunctions.php
, así:En el
functions.php
archivo del tema hijo :De esta manera, el
functions.php
archivo del tema principal no cambia (a veces esto es importante).fuente
Tuve un problema similar antes y lo solucioné creando un "child-functions.php" vacío adicional en parent e incluyéndolo en "functions.php" (parent también) justo después de los archivos / funciones que quiero usar en child, luego, en el tema hijo, creo un archivo "child-functions.php" y allí es donde puedo comenzar a simular las funciones child.php ejecutadas después de parent no es una solución elegante, pero hizo el trabajo.
fuente