Redefiniendo la función en temas secundarios

2

Estoy desarrollando un tema secundario siguiendo el codex

Necesito redefinir una función en functions.php y esa guía dice que puedo hacer esto agregando el código:

if ( ! function_exists( 'theme_special_nav' ) ) {
    function theme_special_nav() {
        //  Do something.
    }
}

Eso es lo que hice, pero me aparece el siguiente error

  

Error grave: no se puede volver a declarar reg_set_p () (declarado anteriormente en /web/htdocs/www.antonellofacchetti.it/home/smg/wp-content/themes/pasw2015-child/functions.php:6) en / web / htdocs / www.antonellofacchetti.it / home / smg / wp-content / themes / pasw2015 / functions.php en la línea 71

¿Debo suponer que algo ha cambiado en la última versión de wp (usando 4.0)?

    
pregunta Antonello Facchetti 12.11.2014 - 13:02

1 respuesta

6

Creo que malinterpretaste el códice aquí. No puede volver a declarar la misma función, excepto cuando, y solo cuando, el tema principal haya envuelto una función en esa declaración condicional

if ( ! function_exists( 'theme_special_nav' ) ) {
    function theme_special_nav() {
        //  Do something.
    }
}

Lo que esto significa es que puede copiar el theme_special_nav() sin la condición if en el tema de su hijo, mantener el mismo nombre y modificar la función según sea necesario.

Ejemplo:

function theme_special_nav() {
   //  Modified content.
}

Las funciones.php del tema secundario se cargan primero, luego las funciones.php del tema principal. Por lo tanto, cuando se carga el tema principal, primero verificará si una función con el mismo nombre ya existe en el tema secundario, y si lo hace, entonces la función en el tema principal se ignorará / omitirá

Si su tema principal no tiene esta declaración condicional que encierra una función, tiene otras tres opciones:

  • Haciendo uso de los filtros provistos dentro de la función si hay algunos proporcionados por el autor del tema.

  • Si no se proporcionan filtros personalizados, deberá copiar la función específica a su tema secundario, renombrarla , modificar la función según sea necesario y luego buscar todas las instancias donde la función se llama en los archivos de plantilla, copie las plantillas a su tema secundario y reemplace las llamadas originales a la función antigua con una llamada a su nueva función

  • Si la función está enganchada a un gancho o filtro de acción, puede eliminarla de ese gancho específico y reemplazarla con su función modificada con otro nombre

respondido por el Pieter Goosen 12.11.2014 - 13:46

Lea otras preguntas en las etiquetas